2012-01-26 32 views
2

我對此相當肯定,但只是有您的意見:沒有web worker的Javascript後臺處理?

如果Web工作人員不可用,是否可以用Javascript在後臺執行操作? 是否有可能「濫用」異步功能或其他一些機制? 我的目標是從localStorage中讀取內容,做一些轉換並通過Ajax發送。

謝謝。

回答

1

不使用網絡工作者,你認爲(使用setTimeout)什麼是做到這一點的唯一方法,當然它不是真正的「背景」在所有的在這一點上。請注意,每次啓動「後臺」代碼時,您都需要保持處理的時間很短,因爲它根本不是真正的後臺代碼;當你的代碼正在運行時,頁面將會非常沒有響應(它的無響應程度會因瀏覽器而異,但頁面上的任何JavaScript代碼肯定會等待你的函數調用完成)。

2

是不是真的多線程在Javascript,但你可以使用異步運行setTimeout(code, 0)代碼。這將隊列執行的功能。

+0

好的執行,但是這意味着如果代碼是在未來jQuery的一個點上運行基於UI的用戶界面將在那時被阻止,對吧? – ceran

1

沒有,有沒有辦法做到在JavaScript中的背景什麼。它嚴格地是單線程的。

您可以使用setTimeoutsetInterval來完成前臺的工作,但每次只做一小部分工作。這種方式界面仍然是相當敏感的,因爲它處理你的工作爆發之間的事件。

3

你不能在後臺運行操作,但你可以在一小塊一小塊把它分割,並運行的setTimeout每一個部分。作爲結果,瀏覽器將有時間來呈現的變化,將響應正常的行爲,而你的長期過程,以及

function iteration(){ 
    do_some_small_amount_of_work(); 
    if (!not_finished) 
     scheduler.setTimeout(iteration, 1); 
} 
+0

還要感謝你3個人。 – ceran