try
{
await faceServiceClient.DeletePersonGroupAsync(_groupId);
}
catch (Microsoft.ProjectOxford.Common.ClientException exC)
{
}
catch (FaceAPIException ex)
{
}
我将代码块复制到“循环”中,并粘贴到“测试”功能中以比较时间。
function* test() {
console.time("function-call")
loop();
console.timeEnd("function-call");
console.time("in-function");
var i, j;
i = 0;
while (i < 10000) {
j = 0;
while (j < 10000) {
j++
}
i++;
}
console.timeEnd("in-function");
}
function loop() {
var i, j;
i = 0;
while (i < 10000) {
j = 0;
while (j < 10000) {
j++
}
i++;
}
}
test().next();
调用函数比在函数内部循环要快得多。为什么会这样?
答案 0 :(得分:1)
@CristianTraìna节点不允许跳过空循环。仅在诸如Pascal或C / C ++之类的编译语言中带有-O2
等标志,才允许进行这些优化。
对于此程序
var max=process.argv[2];
for(var i=0;i<=max;i++){} // with let results is the same
我们可以从多个循环中获得以下执行时间依赖性。它是一个LogLog图表。当控制执行时间的一部分时,它所定义的第一个平坦区域是NodeJ的启动。 1M循环后,您可以看到迭代缩放的数量随时间线性增加。最高的测量大约需要1000秒,因此,V8绝对不会跳过空循环。
从问题返回脚本:
function-call: 154.878662109375ms
in-function: 153.7490234375ms
function-call: 154.183ms
in-function: 152.907ms
function-call: 156 ms debugger eval code:4:3
in-function: 1519 ms
function-call: 158.954345703125ms
in-function: 153.663818359375ms
function-call: 153.548095703125ms
in-function: 153.755126953125ms
function-call: 154.34814453125ms
in-function: 154.729248046875ms
我的朋友的计算机进行测试:
function-call: 3 496,6 ms
in-function: 2 330,9 ms
function-call: 70.69580078125ms
in-function: 70.43310546875ms
因此,现在看来Firefox和Edge都存在问题。
除Firefox和Edge以外,所有这些浏览器均使用V8引擎。 Firefox的描述如下:
https://www.digitaltrends.com/web/mozilla-firefox-new-browser-engine-quantum-2017/
,并使用Quantum Flow:
。
Edge团队考虑采用Chromium引擎
https://www.pcmag.com/news/365345/microsofts-edge-browser-to-adopt-googles-chromium-engine
这篇文章
我们可以看到将来仅支持Chromium from Google
和Gecko Quantum from Mozilla
。
如果任何人都可以访问Safari或Edge,请附加测试。