2011-07-27 42 views
4

我打算編寫一些本地加密JavaScript文件的代碼。對於大文件和大型密鑰大小,CPU使用率(自然)非常高。在單個腳本設計中,這通常掛起瀏覽器直到任務完成。減少Javascript的CPU使用率

爲了提高響應速度,並允許用戶做其他事情的同時,我想嘗試使腳本「友好」到用戶的PC。加密過程將讀取文件作爲二進制字符串,然後以塊的形式加密字符串(如1KB /塊 - 需要測試)。我想嘗試和使用基於HTML5的工作人員儘可能增加整個事情。喜歡的東西:

  1. 菌種工人
  2. 發送工人的二進制數據塊
  3. 工人完成加密,傳回新的塊
  4. 工人死亡。

這可能也有助於多核處理器,通過讓多個工作者同時存活。

反正已經有人看着刻意爲了降低CPU使用率放緩腳本?例如將工作人員的加密任務分解爲單個操作,並在它們之間引入延遲。

間隔定時器回調每100ms(實施例)。

工作人員忙嗎?
是 - 等待下一次的時間間隔
否 - 開始加密的下一個字母

建議/想法?

沒有人有使用經驗的工人?如果您將主UI從工作中分離出來,那麼響應能力是否會提高?

回答

2

這不使用任何HTML5,但這裏是每N毫秒調用一個函數的示例,假設您可以確定適當的等待時間。基本上,我試圖通過向您展示一種方法來在執行更多處理之前強制拖延一段時間來幫助您。

function doSomething(){ 
    clearTimeout(timeout); 
    // do your "expensive" processing 
    // ... 
    // decide the job is done and return here or else 
    // call doSomething again in sleepMS milliseconds 
    timeout = setTimeout(doSomething,sleepMS); 
} 
var timeout; 
var sleepMS = 1000; 


doSomething(); 

編輯

改變最後一行從

var timeout = setTimeout(doSomething,1000); 

只是這個

doSomething() 

EDIT 2

改爲1000 sleepMS在setTimeout調用,咄:)

+0

這就是我想的。並且引入這種延遲將會減少整體CPU使用率,並且不會掛起瀏覽器(儘管放慢總體加密時間)會產生淨效應? – Oliver

+0

沒錯,這是一種減少CPU使用率的迂迴方式,因爲(沒有任何ActiveX或其他插件),JS不會讓您直接訪問CPU上的處理器時間。這是另一個可以幫助你的技巧,http://stackoverflow.com/questions/5177451/measure-processing-time-of-ajax-call這對你的任務也有用 – mrk

+0

也許你的意思是setTimeout(doSomething,sleepMS);在函數的結尾? –

相關問題