簡體   English   中英

瀏覽器端的node.js還是非阻塞JavaScript?

[英]Browser-side node.js or non-blocking javascript?

我着迷於非阻塞架構。 雖然我沒有使用過Node.js,但從概念上我已經掌握了它。 另外,我一直在開發事件驅動的Web應用程序,因此我對事件編程有基本的了解。

如何在瀏覽器中編寫非阻塞JavaScript? 我想這在一定程度上與Node的實現方式有所不同。 例如,我的應用程序允許用戶加載大量數據(序列化為JSON)。 解析此數據以重新構成應用程序狀態。 這是一項繁重的操作,可能會導致瀏覽器鎖定一段時間。

我相信使用網絡工作者是一種方法。 (這似乎是顯而易見的選擇,但是,我相信Node可以在不使用Web Workers的情況下實現非阻塞,事件驅動的體系結構,因此我想肯定還有另一種方式。)我相信計時器也可以發揮作用。 我閱讀了有關TameJS和其他一些擴展javascript語言的庫的信息。 我對使用本機javascript而不引入新語言語法的javascript庫感興趣。

鏈接到資源,庫和實際示例非常受贊賞。

編輯:

了解了更多信息,我意識到我在說的是“未來”一詞。 jQuery實現了這一點,但是它始終使用XHR來調用服務器,服務器在返回結果之前先執行服務器的處理,而我所做的是在不調用服務器的情況下做同樣的事情,客戶端在非阻塞的情況下進行處理方式。

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

三是在瀏覽器上執行非阻塞工作的兩種方法

  • 網絡工作者 WebWorkers創建了一個新的隔離線程供您執行計算,但是瀏覽器支持告訴您IE <10討厭您。
  • 如果不這樣做,則不應在客戶端上以阻塞的方式進行昂貴的工作,將ajax請求發送到服務器以執行此操作,然后讓服務器返回結果。

可憐的人的線程:

您可以使用一些技巧:

  • 通過使用setTimeout模擬時間拼接。 這基本上意味着,在每次“成批”工作之后,您都可以通過調用setTimeout(doMore, 10)給瀏覽器一些響應的空間。 這基本上是以一種非常差的非優化方式編寫您自己的流程調度程序,而是使用Web worker
  • 通過使用自己的html文檔創建iframe來創建“新流程”。 在此iframe中,您可以進行計算而不會阻止自己的html文檔響應。

您具體說不阻塞是什么意思?

最長的操作(Ajax調用)已經是非阻塞的(異步)

如果您需要一些長時間運行的功能來“在某處”運行然后執行某些操作,則可以調用

 setTimeout(function, 0)

並從函數中調用回調。

您也可以在此處閱讀諾言

暫無
暫無

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

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