在计时器中持续访问cookie的性能含义

时间:2013-09-20 15:01:51

标签: javascript performance cookies setinterval

我正在一个网站上工作,其中包含一些有趣的Javascript,我担心这可能会导致速度较慢的计算机出现性能问题。

该脚本使用setInterval来运行处理程序EVERY SECOND。处理程序执行以下操作:

  1. 读取单个cookie值(使用jquery cookie插件)
  2. 更新其价值和到期日期
  3. 将其写回cookie jar
  4. cookie有一个到期日期,所以理论上它应该每次写入磁盘,而不是保存在内存中。

    到目前为止,它在我的电脑上工作得很好,但我有一台带有固态硬盘的快速机器。你认为这种设计会在较慢的盒子或繁忙的硬盘上引起问题吗?可能导致每1秒发生一次轻微的口吃效果?只是寻找一些保证,这个设计并非绝对疯狂。感谢。

1 个答案:

答案 0 :(得分:5)

在浏览器中,JavaScript执行是单线程的。这意味着,当JS代码运行setInterval时,函数将无法运行。同样,当setInterval函数正在运行时,其他JS代码(例如事件处理程序)将无法运行。

因此,确保以较短间隔运行的代码运行良好非常重要。

在这种情况下,您拥有每秒运行一次的代码,因此重要的是它需要<<要完成1s,否则你将面临永远不会留出足够时间进行其他行动的风险。

有一些关于使用jQuery(和没有)available here访问cookie的性能数据。

它表明阅读和写作足够快,你应该能够做到这一点,而不需要花费太多的1s更新间隔。

另一种方法可能是尝试以下

var timeoutId;
var timeoutSetter = function(timeout) {
    timeoutId = setTimeout(function() {
        cookieUpdate();
        timeoutSetter(timeout);
    }, timeout);
};

timeoutSetter(1000);

这意味着在最后一次更新后的1秒内不会更新cookie,无论更新本身需要多长时间...可能是过度杀戮而且会导致一些相当粗糙的代码,但它是一个选项。

更新

根据下面的Bergi评论,我认为一个例子是有益的。

转到http://jsfiddle.net/meYc5/2/并打开控制台。每次单击黄色框时,您都会看到Foo clicked的日志。如果你反复点击,你会看到它从黄色翻转到红色并返回。有明显的延迟。那是因为它目前被配置为每秒一次阻止setInteval线程500ms。这意味着事件处理的占空比为50%。

此外,您会注意到textarea中的光标反应较慢。

这个(500毫秒)对于更新cookie来说是一个非常极端的时间,但它说明了原理。如果你正在使用setInterval做某事,你应该确保

execution time of the handler << interval period

以便您保持足够高的工作周期来处理事件。