簡體   English   中英

JavaScript中的一個函數調用期間的多個更新

[英]Multiple updates during one function call in JavaScript

我正在嘗試編寫一些腳本執行相當繁重的計算。 因此,我想通過更新網站上的內容(例如,完成計算的一小部分)來通知用戶進度。 是否可以用JavaScript實現? JavaScript是否允許在調用函數仍在運行時更新內容? 或者也許無論在什么情況下我都可以在調用函數完成后更新內容?

看一看工人: http//www.html5rocks.com/en/tutorials/workers/basics/

它用於繁重的計算(在javascript規模的c),並附帶一些函數來更新用戶有關計算的狀態,它基本上是在JavaScript中的多線程。

使用計時器

從您的計算功能,更新全局變量。

然后從主線程中,使用setTimeout()setInterval()定期查詢全局值並更新屏幕。

當您的函數正在運行時,不會發生任何屏幕更新:UI線程必須像其他任何JS線程一樣爭取它的時間。 你可以通過安排回調來做到這一點:

function f() {
  a();
  // update now
  b();
}

可以改寫為

function f() {
  a();
  setTimeout(function() {
    b();
  }, 0);
}

這種方式有效,在a()setTimeout將調度函數的其余部分,然后退出。 這是UI線程現在可以(並且將會)獲取控制權的地方; 完成后,計划的剩余部分將執行。

如果您有適合(非常嚴格的)WebWorker限制的事情,您可以使用它們; 然而,他們無法觸摸UI,因此重繪是沒有意義的(除非你像Antoine所說,並根據WebWorker計算的參數安排更新功能)。

我的幾分錢:

  • 最簡單的解決方法是簡單顯示繁忙動畫的最常用方法。

  • 嘗試將重量級計算代碼分解成碎片並更新進度條。

  • 或者如Antoine建議的那樣,嘗試使用Web Workers

是的,可能你可以做到。 我不知道你的問題的所有細節,但你應該針對socket.io和異步node.js。

使用node.js,您可以實時向客戶端發送進程狀態,並在客戶端使用socket.io捕獲服務器響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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