以下是Chrome Performance Devtools捕获的网络执行情况:
我注意到在执行期间,当我的网络功能停止时,功能将被停止多次Chrome会执行一些RegExp操作(如图所示)。我不明白这是什么,为什么会发生。请帮忙解释一下,谢谢。
更新:这是一个也以相同方式执行的功能:
答案 0 :(得分:5)
你描述问题的方式听起来你认为JavaScript虚拟机在执行时(即在它们返回之前)将函数置于保持状态(停止它们)以执行其他操作然后恢复功能。
您展示的图片并不表示对我而言。
VM执行:
callback
,调用fireWith
,其中称之为:fire
,其中称之为:然后最深的函数返回,并且调用它的那个返回,依此类推,直到fire
返回,fireWith
返回,我们无法读取的名称的函数返回,并且{{ 1}}返回。
然后VM运行一个RegExp函数,它再次调用一个名为callback
的函数,整个事情重新开始。 换句话说,第二列callback
,其余是函数的新调用。函数不是"停止[ping]一段时间" :它们被多次调用。
我总是在库中看到这些响应事件的情况。它们通常会遍历事件处理程序来调用它们。考虑到一个足够复杂的库,有相当数量的粘合代码可能位于调用处理程序的循环和自定义代码之间,因此在分析中会出现大量重复调用。