国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

《高性能javascript》 筆記一

yeyan1996 / 3081人閱讀

摘要:所以全局對(duì)象的返回所需要的時(shí)間是最長的應(yīng)該用局部變量存起來減少作用域鏈的查詢次數(shù)。這就導(dǎo)致本來可以自己訪問的局部變量需要在作用域鏈的后面一層被訪問到了。因?yàn)樵L問對(duì)象中的一些屬性和方法涉及到原型鏈的查找這個(gè)和作用域鏈?zhǔn)且粋€(gè)道理。

第一部分:關(guān)于script

當(dāng)把js腳本通過script標(biāo)簽放在head中的時(shí)候,早期瀏覽器在遇到script的時(shí)候會(huì)阻止瀏覽器加載和渲染html。直到j(luò)avascript腳本被下載并執(zhí)行完,且這些javascript是依次下載和執(zhí)行,不能并行。如下面這個(gè)圖所示:

現(xiàn)代瀏覽器如IE8,Firefox 3.5,Safari 4,Chrome 允許同時(shí)并行下載js文件。但是不幸的是js下載仍然會(huì)阻塞其他資源的下載,如圖片。還是會(huì)阻止瀏覽器去加載和渲染html。解決辦法就是將js body的最底端。

限制script標(biāo)簽的數(shù)量,因?yàn)槊看斡龅絪cript都要阻塞瀏覽器加載和渲染html。這個(gè)對(duì)于內(nèi)聯(lián)和外聯(lián)js都是一樣的。但是對(duì)于外聯(lián)js,每個(gè)http請(qǐng)求都需要和服務(wù)器建立一次連接,時(shí)間上的開銷也不小。所以下載一個(gè)100KB的js文件比下載4個(gè)25KB的js文件速度要快。所以可以將js文件進(jìn)行文件的合并減少http請(qǐng)求的數(shù)量提高性能。

非阻塞腳本在html加載完成后進(jìn)行javascript源碼的下載。有幾種方法可以做到:

  

3.1 在script上添加defer屬性。defer屬性告訴瀏覽器該javascript代碼不會(huì)影響dom樹。所以瀏覽器可以放心的將他延遲執(zhí)行,即等dom加載完成后執(zhí)行。defer屬性的script可以防止瀏覽器的任何一個(gè)地方,當(dāng)瀏覽器遇到這個(gè)script時(shí)候,開始下載但是并不立即執(zhí)行,等到dom樹加載完成在onload事件觸發(fā)之前執(zhí)行,且不會(huì)影響到其他資源的下載。

 
  
 Script Defer Example 
  
  
  
  
 
  

  

執(zhí)行結(jié)果:
在不支持defer屬性的瀏覽器中結(jié)果為:defer script load 在支持defer屬性的瀏覽器中的結(jié)果是script defer load

  

3.2 動(dòng)態(tài)執(zhí)行將javascript代碼插入文檔中。

function loadScript(url, callback){ 
 var script = document.createElement ("script") 
 script.type = "text/javascript"; 
 if (script.readyState){ //IE 
  script.onreadystatechange = function(){ 
  if (script.readyState == "loaded" || script.readyState == "complete"){ 
  script.onreadystatechange = null; 
  callback(); 
  } 
}; 
 } else { //Others 
  script.onload = function(){ 
  callback(); 
}; 
 } 
 script.src = url; 
 document.getElementsByTagName_r("head")[0].appendChild(script); 
}
  

3.3 通過XHR 從服務(wù)端獲取js 動(dòng)態(tài)插入到文檔中。

第二部分: 關(guān)于作用域鏈和原型鏈

每個(gè)函數(shù)都會(huì)有個(gè)作用域鏈,用于標(biāo)識(shí)符的查找也就是變量的查找。所以如果變量在原型鏈越后面的地方訪問所需要的時(shí)間就越長。所以全局對(duì)象的返回所需要的時(shí)間是最長的,應(yīng)該用局部變量存起來減少作用域鏈的查詢次數(shù)。

with語句和try-catch 會(huì)改變執(zhí)行函數(shù)的作用域鏈。會(huì)在作用域鏈前加上with或者catch自己的活躍對(duì)象AO。這就導(dǎo)致本來可以自己訪問的局部變量需要在作用域鏈的后面一層被訪問到了。增加了變量訪問的時(shí)間。所以避免使用with語句。而try-catch還是很有用的。不應(yīng)該避免,可以通過在catch到錯(cuò)誤后用一個(gè)錯(cuò)誤處理函數(shù)來解決這種性能問題。

在javascript中存儲(chǔ)數(shù)據(jù)的地方有四個(gè)。分別是直接量,變量,數(shù)組,對(duì)象。其中直訪問接量和變量是最快的,兩者差別不大。但是對(duì)于數(shù)組和對(duì)象相對(duì)來說要慢些,特別是對(duì)象。因?yàn)樵L問對(duì)象中的一些屬性和方法涉及到原型鏈的查找,這個(gè)和作用域鏈?zhǔn)且粋€(gè)道理。所以需要存儲(chǔ)這些需要遍歷原型鏈的方法或者屬性提供性能。

第三部分 : DOM對(duì)象編程

瀏覽器一般分為渲染引擎和js引擎,如chrome 它的渲染引擎就是webkit 它的js引擎是v8。

訪問和修改dom是需要付出性能代價(jià)的。因?yàn)樾薷囊粋€(gè)dom元素可能回去觸發(fā)瀏覽器去重新計(jì)算它的幾何屬性,重新排版。所以盡可能少的去和dom元素打交道。

選用更快的DOM API 比如用nextSibling 代替childNodes 或者用children代替childNodes。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/78041.html

相關(guān)文章

  • 性能JavaScript》讀書筆記

    摘要:除此以外,讓元素脫離文檔流也是一個(gè)很好的方法。因?yàn)樵匾坏┟撾x文檔流,它對(duì)其他元素的影響幾乎為零,性能的損耗就能夠有效局限于一個(gè)較小的范圍。講完重排與重繪,往元素上綁定事件也是引起性能問題的元兇。高性能這本書非常精致,內(nèi)容也非常豐富。 showImg(https://segmentfault.com/img/bVJgbt?w=600&h=784); 入手《高性能JavaScript》一...

    W_BinaryTree 評(píng)論0 收藏0
  • 性能javascript筆記

    摘要:首先將對(duì)象引用存儲(chǔ)到局部變量中,全局變量的訪問減少,當(dāng)有很多全局變量被反復(fù)訪問時(shí),這種方法對(duì)性能的改善是很明顯的。 javascript加載和運(yùn)行 1. 腳本位置 盡管瀏覽器已經(jīng)允許并行下載javascript文件,但是javascript下載過程仍然會(huì)阻塞其他資源的下載,如圖片。頁面仍然需要等待所有javascript代碼下載并執(zhí)行完成才能繼續(xù)所以優(yōu)化javascript的首要原...

    Jeffrrey 評(píng)論0 收藏0
  • JS筆記

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • 讀書筆記(03) - 性能 - JavaScript高級(jí)程序設(shè)計(jì)

    摘要:作用域鏈查找作用域鏈的查找是逐層向上查找。而全局變量和閉包則會(huì)與之相反,繼續(xù)保存,所以使用用后需手動(dòng)標(biāo)記清除,以免造成內(nèi)存泄漏。獲取元素的屬性獲取元素的屬性等參考文檔高級(jí)程序設(shè)計(jì)作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVburXV?w=500&h=399); 作用域鏈查找 作用域鏈的查找是逐層向上查找。查...

    warnerwu 評(píng)論0 收藏0
  • 性能JavaScript學(xué)習(xí)筆記-執(zhí)行與加載

    摘要:雖然會(huì)有阻塞但還是有幾招可以減少對(duì)性能的影響的。下載資源是異步的但是執(zhí)行代碼的時(shí)候仍是同步的同樣會(huì)造成阻塞。缺點(diǎn)文件必須與所請(qǐng)求頁面處于同一個(gè)域這種情況下文件不能從下載不適合大型的應(yīng)用。 瀏覽器在處理HTML頁面渲染和JavaScript腳本執(zhí)行的時(shí)候是單一進(jìn)程的,所以在當(dāng)瀏覽器在渲染HTML遇到了標(biāo)簽會(huì)先去執(zhí)行標(biāo)簽內(nèi)的代碼(如果是使用src屬性加載的外鏈文件,則先下載再執(zhí)行),在這個(gè)...

    fou7 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<