自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用setimmediate實現(xiàn)可伸縮執(zhí)行的腳本

開發(fā) 前端
看過我對JavaScript 性能優(yōu)化相關(guān)的討論的同學(xué)們一定很了解我的一個癖好,就是將一大段的script分解成多個塊來執(zhí)行。通過使用setTimeout(),你可以去改變特定代碼執(zhí)行的時間,從而做到讓UI現(xiàn)場執(zhí)行已經(jīng)在隊列里的任務(wù)。

看過我對JavaScript 性能優(yōu)化相關(guān)的討論的同學(xué)們一定很了解我的一個癖好,就是將一大段的script分解成多個塊來執(zhí)行。通過使用setTimeout(),你可以去改變特定代碼執(zhí)行的時間,從而做到讓UI現(xiàn)場執(zhí)行已經(jīng)在隊列里的任務(wù)。比如,你可以通過這樣的方式把要執(zhí)行的代碼在50ms后加到UI線程隊列里:

  1. setTimeout(function(){  
  2.  
  3.    //do  something  
  4.  
  5. }, 50) 

那么,在50ms后,這個函數(shù)就會被添加到隊列里,并在輪到它的時候執(zhí)行。調(diào)用setTimeout()方法可以允許當(dāng)前的JavaScript任務(wù)完成從而下一個UI更新可以順利進行。

雖然我一直很支持使用setTimeout()來提高性能,但是還是存在幾個問題。***個并且是最重要的問題是不同的瀏覽器有著不一樣的時間精確度。IE8和更早的IE的時間精確度是15.6ms,而IE9,或者更新的瀏覽器,還有chrome的時間精確度已經(jīng)到達4ms。所有的瀏覽器都強制給setTimeout設(shè)置了一個***延遲值,所以setTimeout(fn, 0)實際上在大于0ms的時間之后才會執(zhí)行,具體取決于對應(yīng)的時間精確度。

另一個是電源使用的問題。管理時間關(guān)系到筆記本或者手機的電池使用。Chrome曾經(jīng)嘗試把時間精確度降低到1ms,結(jié)果發(fā)現(xiàn)會增加筆記本電池的損耗。***還是覺得把時間精確度設(shè)置回4ms。其他瀏覽器也做過類似的嘗試,不過許多油門計時器分辨率為1s。微軟發(fā)現(xiàn)時間精確度為1ms的時候,電池的使用時間會降低25%。實際上,IE9會判斷筆記本是否在使用電池的情況下運行,如果是電池,則時間精確度為15.6ms,如果是直接插的電源則時間精確度會降低到4ms。

來自W3C Web Performance Working Group的一個方案“ Efficient Script Yielding ”,定義了一個新的函數(shù)去實現(xiàn)腳本的分塊執(zhí)行的setImmediate()方法。 這個方法接收一個函數(shù)作為參數(shù),它可以讓這個函數(shù)在UI線程空閑的時候執(zhí)行。基本的用法:

  1. var id = setImmediate(function(){  
  2.  
  3.     //do something  
  4.  
  5. }); 

setImmediate()函數(shù)會返回一個id,這個id可以通過clearImmediate()方法來取消這個過程。

我們也可以給它傳遞一些參數(shù)

  1. setImmediate(function(doc, win){  
  2.     //do something  
  3. }, document, window); 

用這個方式來傳遞可選的參數(shù)意味著你不需要總是使用一個閉包來讓函數(shù)包含一些有用的信息。

setImmediate()可以讓瀏覽器不需要去管理進程的定時器。不需要去等待更耗電的系統(tǒng)中斷,瀏覽器只需要等待UI隊列空閑,然后把新的JavaScript任務(wù)插入進去。Node.js的開發(fā)者會比較容易理解這個問題,因為process.nextTick()在自己的環(huán)境里做了相同的事情。

現(xiàn)在只有ie10支持這個方法,而且因為還沒有完全定下來,所以使用了msSetIntermediate()。IE10的Test Drive上也有一個setImmediate()的例子,展示了新方法帶來的性能提升。這個例子使用一個延遲來排列一些數(shù)據(jù),排序之后的狀態(tài)會直接展示出來。

原文:http://w3ctech.com/b/archives/597

【編輯推薦】

  1. Google強推Dart語言替代JavaScript 意欲何為?
  2. 在.NET中使用Javascript作為腳本語言
  3. JavaScript設(shè)計模式深入分析
  4. JavaScript有關(guān)的10個秘密和怪癖
  5. 10個***Web移動開發(fā)JavaScript框架推薦

 

責(zé)任編輯:陳貽新 來源: W3ctech
相關(guān)推薦

2023-06-26 18:13:56

開源API

2012-02-21 22:55:55

MDT 2010Windows 7

2009-04-16 17:30:00

可伸縮管理集成

2013-05-30 10:20:39

系統(tǒng)架構(gòu)

2009-09-16 10:00:14

可伸縮性Web服務(wù)

2009-08-20 10:30:55

可伸縮性系統(tǒng)

2009-11-11 16:07:09

OSPF路由協(xié)議

2012-01-18 10:41:29

ibmdw

2015-07-28 10:14:33

HBasehadoop

2015-09-23 14:01:51

2013-08-20 10:53:13

Minuum單行鍵盤A可穿戴Minuum

2015-09-17 09:30:50

云架構(gòu)可伸縮性風(fēng)險

2012-11-07 14:32:47

寶德云計算云服務(wù)

2010-11-04 13:55:26

DB2 SQL腳本批量

2015-06-29 11:29:08

2024-03-27 10:27:35

延遲垃圾收集器

2023-12-21 11:53:34

KubernetesKEDA云原生

2010-11-01 17:24:30

DB2批量執(zhí)行

2021-12-24 16:59:14

前端Web框架

2023-10-12 09:48:00

微服務(wù)工具
點贊
收藏

51CTO技術(shù)棧公眾號