簡體   English   中英

在計時器中持續訪問cookie的性能含義

[英]Performance implication of continuously accessing cookies in timer

我正在開發一個有一些有趣的Javascript的網站,我擔心它可能會導致速度較慢的機器出現性能問題。

該腳本使用setInterval來運行處理程序EVERY SECOND。 處理程序執行以下操作:

  1. 讀取單個cookie值(使用jquery cookie插件)
  2. 更新其價值和到期日期
  3. 把它寫回餅干罐

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM