繁体   English   中英

在 codepen.io 中禁用无限循环保护

[英]Disable infinite loop protection in codepen.io

是否可以在 codepen.io 中禁用无限循环保护?

JSBin 有// noprotect

能够在没有 editor 进行任何添加的情况下运行代码就好了,例如。 在测量执行时间等时。

当我运行 CPU 分析器时,会调用 window.CP.PenTimer.shouldStopLoop(),这可能会导致测量执行时间时出错。

在 JSBin 中,完全相同的代码运行 1000 毫秒,但在 codepen.io 中,执行时间为 4000 毫秒。 这使得 codepen.io 不太适合运行繁重的循环。

例子:

// noprotect
var len = 2000000;
var a = [];
var t = performance.now();
while(len--)
{
  a.push((len%7)*Math.atan2(len,-len));
}
t = performance.now() - t;
document.write(t);

在 Codepen: http ://codepen.io/timo22345/pen/yYedmo 4202.92 ms (Chrome 45 OSX)

在 JSBin: http://jsbin.com/xufesa/2/edit?html,css,js,output 1082.03 ms (Chrome 45 OSX)

这就像巨大的减速使 codepen.io 成为一个不错的文本编辑器(在某种程度上它比 JSBIN 更接近桌面文本编辑器,因为例如,tab 键按预期工作并且可以在 iframe 中搜索),但是在代码之后处于最终状态,您必须将其移动到 JSBin 或其他服务器以运行代码 - 如果非节流速度很重要。

至少有一些警告可以避免完全错误的性能测量和错误的结论。 见例如。 http://www.sitepoint.com/measuring-javascript-functions-performance/ ,其中作者使用 codepen.io 测量各种函数的性能,并在测量执行时间后发现使用 forEach 的函数运行速度明显快于使用普通函数的函数for 循环。 而他的结论是:

解释很简单,但很微妙。 第一个使用 haystack.forEach 的函数受益于浏览器 JavaScript 引擎中的一些低级优化,这是我们在使用数组索引技术时无法获得的。 这证明了我们的观点:不测量你永远不知道!

Vyacheslav Egorov 评论说这不是真的:

一个更明显的解释是实验出了问题......而且确实是这样:如果你将调试器语句放入 for 循环中,你会发现 CodePen 使用抢占检查进行循环(为了防止无限循环杀死 UI,我猜)。 这些检查如下所示:

if (window.CP.shouldStopExecution(1)) {
  break;
}

您可以使用:

window.CP.PenTimer.MAX_TIME_IN_LOOP_WO_EXIT = Number.POSITIVE_INFINITY;

参考: Codepen 博客

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM