[英]Performance implication of continuously accessing cookies in timer
我正在开发一个有一些有趣的Javascript的网站,我担心它可能会导致速度较慢的机器出现性能问题。
该脚本使用setInterval来运行处理程序EVERY SECOND。 处理程序执行以下操作:
cookie有一个到期日期,所以理论上它应该每次写入磁盘,而不是保存在内存中。
到目前为止它在我的电脑上工作得很好,但我有一台带有固态硬盘的快速机器。 你认为这种设计会在较慢的盒子或繁忙的硬盘上引起问题吗? 可能导致每1秒发生一次轻微的口吃效果? 只是寻找一些保证,这种设计并非绝对疯狂。 谢谢。
在浏览器中,JavaScript执行是单线程的。 这意味着,当JS代码运行时, setInterval
函数将无法运行。 同样,当setInterval
函数正在运行时,其他JS代码(例如事件处理程序)将无法运行。
因此,确保以较短间隔运行的代码运行良好非常重要。
在这种情况下,您拥有每秒运行一次的代码,因此重要的是它需要<< 1s才能完成,否则您将面临永远不会留下足够时间进行其他操作的风险。
有关于访问的cookies使用jQuery(和不)某些性能数据可在这里 。
它显示的是读取和写入足够快,你应该能够做到这一点而不需要花费1s更新间隔。
另一种方法可能是尝试以下方法
var timeoutId;
var timeoutSetter = function(timeout) {
timeoutId = setTimeout(function() {
cookieUpdate();
timeoutSetter(timeout);
}, timeout);
};
timeoutSetter(1000);
这意味着cookie不会在上次更新后的1s更新,无论更新本身需要多长时间......可能是矫枉过正,它会导致一些相当粗糙的代码,但它是一个选项。
按照下面的Bergi评论,我认为一个例子是有益的。
转到http://jsfiddle.net/meYc5/2/并打开控制台。 每次单击黄色框时,您都会看到Foo clicked
的日志被Foo clicked
。 如果你反复点击,你会看到它从黄色翻转到红色并返回。 有明显的延迟。 那是因为它当前被配置为setInteval
一次阻塞setInteval
线程500ms。 这意味着事件处理的占空比为50%。
此外,您会注意到textarea中的光标反应较慢。
这个(500毫秒)对于更新cookie来说是一个非常极端的时间,但它说明了原理。 如果你正在使用setInterval
做某事,你应该确保
execution time of the handler << interval period
这样你就可以保持足够高的工作周期来处理事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.