返回顶部
首页 > 资讯 > 前端开发 > 其他 >什么是EventLoop?怎么测试Node或页面的性能
  • 108
分享到

什么是EventLoop?怎么测试Node或页面的性能

Node.jsJavaScript 2023-05-14 22:05:14 108人浏览 泡泡鱼
摘要

const fns = [] window.addEventListener("message", () => { const currentFns = [...fns] fns.length =

const fns = []
window.addEventListener("message", () => {
    const currentFns = [...fns]
    fns.length = 0
    currentFns.forEach(fn => fn())
}, true);
function messageChannelMacroTaskDispatcher(fn) {
    fns.push(fn)
    window.postMessage(1)
}

可以看到和 node.js setImmediate 量级是一致的。

time: 78769.70 avg: 51759.83
time: 78975.60 avg: 48614.49
meaninglessRun: 921.143 ms
time: 80111.50 avg: 8805.14
time: 80327.00 avg: 46425.26
time: 80539.10 avg: 47169.81

MessageChannel

browser

理论上 browser 使用 MessageChannel 应该也是可以的,还避免了无效的消息被其他 window.addEventListener("message", handler) 接收:

const { port1, port2 } = new MessageChannel();
const fns = []
port1.onmessage = () => {
    const currentFns = [...fns]
    fns.length = 0
    currentFns.forEach(fn => fn())
};
function messageChannelMacroTaskDispatcher(fn) {
    fns.push(fn)
    port2.postMessage(1)
}

不是很懂为啥会比 window.postMessage 频繁一点,同时启动两个 checker 的话可以看到 log 是成对出现的,也就是说一个loop内大家都只执行了一次。我猜测是 window.postMessage 的实现方式消耗会大一些。

time: 54974.80 avg: 68823.12
time: 55121.00 avg: 68493.15
meaninglessRun: 925.160888671875 ms
time: 56204.60 avg: 9229.35
time: 56353.00 avg: 67430.88
time: 56503.10 avg: 66666.67
// 一起执行 wp=window.postMessage mc=MessageChannel
wp time: 43307.90 avg: 25169.90
mc time: 43678.40 avg: 27005.13
wp time: 43678.60 avg: 26990.55
mc time: 44065.80 avg: 25833.12
wp time: 44066.00 avg: 25819.78
mc time: 44458.40 avg: 25484.20

node

node.js 上也有 MessageChannel ,是否也可以用来测量loop次数呢?

mc time: 460.99 avg: 353930.80
mc time: 489.52 avg: 355088.11
mc time: 520.30 avg: 326384.64
mc time: 551.78 avg: 320427.29

量级很不正常。理论上不应该超过 setImmediate 的。如果同时启动 setImmediatesetTimeout 的 checker:

...
(messagechannel) time: 1231.10 avg: 355569.31
(messagechannel) time: 1260.14 avg: 345825.77
(setImmediate) time: 1269.95 avg: 339.27
(setTimeout) time: 1270.09 avg: 339.13
(messagechannel) time: 1293.80 avg: 298141.74
(messagechannel) time: 1322.50 avg: 349939.04
...

很明显跟不是宏任务了。我猜测 MessageChannel 在 node.js 被归入到跟 Socket 等同级别了,就是超出阈值之后的任务会移动到下一个loop中。

总结

使用这种方式去检测性能还挺有趣的,正式使用的话这个指标感觉过于不稳定(即使什么都没做都会有20%-30%的振动)。推荐和其他正经的办法(比如 perfORMance 等)结合。

同时这种方式非常有可能影响正常的 Event Loop,比如 Node.js 中会有一个 pull 的阶段,在执行完全部微任务后,没有任何 timer 的话是会停留在这个阶段,准备马上执行下一个出现的微任务。

顺便复习了下 Event Loop。没想到的是 MessageChannel 在两边的差距居然有这么大。

以上就是什么是EventLoop?怎么测试Node或页面的性能的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 什么是EventLoop?怎么测试Node或页面的性能

本文链接: https://lsjlt.com/news/207080.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 什么是EventLoop?怎么测试Node或页面的性能
    const fns = [] window.addEventListener("message", () => { const currentFns = [...fns] fns.length = ...
    99+
    2023-05-14
    Node.js JavaScript
  • EventLoop如何测试Node或页面的性能
    这篇文章主要介绍“EventLoop如何测试Node或页面的性能”,在日常操作中,相信很多人在EventLoop如何测试Node或页面的性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”EventLoop如何...
    99+
    2023-07-05
  • k8s性能测试的方法是什么
    进行Kubernetes性能测试通常包括以下几个步骤: 确定测试目标:明确需要测试的方面,比如集群的性能、节点的资源利用率、应用...
    99+
    2024-04-02
  • Java NIO性能测试的方法是什么
    这篇文章主要介绍“Java NIO性能测试的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java NIO性能测试的方法是什么”文章能帮助大家解决问题。时间(ms)文件大小(byte)Bu...
    99+
    2023-06-17
  • 云主机性能测试的方法是什么
    云主机性能测试常用的方法有以下几种:1. 压力测试:通过模拟大量用户及请求发送到云主机,测试其在高负载情况下的性能表现。可以使用工具...
    99+
    2023-09-17
    云主机
  • redis集群性能测试的方法是什么
    进行Redis集群性能测试的一种常用方法是使用基准测试工具,如redis-benchmark。以下是一些步骤,可以用来进行Redis...
    99+
    2024-04-09
    redis
  • golang中iris性能测试的方法是什么
    要对iris进行性能测试,可以使用go的内置工具go test结合第三方的性能测试工具go tool pprof。 首先,在项目中创...
    99+
    2024-04-03
    golang iris
  • windows下硬件性能测试的方法是什么
    在Windows下,可以使用以下方法进行硬件性能测试:1. 使用Windows自带的工具:- Windows系统自带的性能评估与工具...
    99+
    2023-09-12
    windows
  • linux怎么测试io性能
    在Linux上测试IO性能可以使用以下工具和方法:1. 使用dd命令:dd命令可以用于复制文件、转换文件的格式以及执行其他操作。通过...
    99+
    2023-10-10
    linux
  • 小程序测试中页面交互是什么意思
    小程序测试中页面交互是定义以及设计人造系统的行为设计领域。例如你在登录微信的时候需要输入用户名和密码,最后点击登录按钮。这就是交互设计。从用户角度来说,交互设计是一种使产品易用、提高用户体验感的技术。...
    99+
    2024-04-02
  • golang的执行性能怎么测试
    要测试Golang的执行性能,你可以使用以下几种方法: 使用内置的性能分析工具:Golang提供了一个内置的性能分析工具go t...
    99+
    2023-10-22
    golang
  • Apache下分析ab性能测试的结果是什么
    这篇文章给大家介绍Apache下分析ab性能测试的结果是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一直以来我都是用Loadrunner去做性能测试。Loadrunner实际上是一个很重的性能测试工具。他的功能很...
    99+
    2023-06-22
  • 软件测试要学什么(5)性能测试大纲
           性能测试主要测试软件测试的性能,包括负载测试,强度测试,数据库容量测试,基准测试以及竞争测试。  1.负载测试  负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。 在这...
    99+
    2023-06-03
  • win10电脑性能怎么测试
    有多种方法可以测试Win10电脑的性能。以下是一些常用的方法:1. 使用Windows 10自带的性能评估工具:- 打开控制面板,选...
    99+
    2023-09-12
    win10
  • Jmeter怎么实现性能测试
    本篇内容介绍了“Jmeter怎么实现性能测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.1 概述JMeter,每个资深测试工程师,必须...
    99+
    2023-06-02
  • ubuntu中怎么测试gpu性能
    这篇“ubuntu中怎么测试gpu性能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ubuntu中怎么测试gpu性能”文章吧...
    99+
    2023-07-04
  • php测试页面出不来怎么办
    本文操作环境:Windows7系统、PHP7.4.16版、DELL G3电脑php测试页面出不来怎么办?test.php测试页无法打开的解决方法:检查APACHE服务器是否在打开状态,在安装目录下“bin”文件夹中,找到apachemoni...
    99+
    2022-02-23
    php
  • 香港cn2的vps性能怎么测试
    香港cn2的vps性能测试方法:1、输入执行bench.sh脚本命令查看所有的配置,能直观的了解服务器的硬件配置;2、 使用Speedtest工具测试主机的上传和下载带宽;3、使用http://ipip.net在线工具对主机的PING响应时...
    99+
    2024-04-02
  • 服务器的cpu性能怎么测试
    有多种方法可以测试服务器的CPU性能,以下是其中的一些:1. 使用CPU-Z软件:CPU-Z是一款免费的CPU检测工具,可以查看CP...
    99+
    2023-06-07
    服务器的cpu 服务器
  • Linux系统的VPS性能怎么测试
    这篇文章主要讲解了“Linux系统的VPS性能怎么测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统的VPS性能怎么测试”吧!通过测试IP测试速度选择VPS当然要先进行IP测试...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作