偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

高性能JavaScript:加載和執(zhí)行

開(kāi)發(fā) 前端
Javascript是一門(mén)很Web開(kāi)發(fā)語(yǔ)言,和HTML,css是一樣的,在本文中,我就自己看的一本書(shū)《高性能Javascript》所得的收獲給大家分享一下。

       在步入正題之前為大家介紹一本很好的書(shū)《高性能JavaScript》大家不妨看一下,在本文中我為大家分享我看這本書(shū)的一些收獲。

推薦的書(shū)

阻塞特性
       JS 有個(gè)很無(wú)語(yǔ)的阻塞特性,就是當(dāng)瀏覽器在執(zhí)行JS 代碼時(shí),不能同時(shí)做其他任何事情,無(wú)論其代碼是內(nèi)嵌的還是外部的。

腳本位置:
       瀏覽器在碰到一個(gè)引入外部JS 文件的<script>標(biāo)簽時(shí)會(huì)停下所有工作來(lái)下載并解析執(zhí)行它,在這個(gè)過(guò)程中,頁(yè)面渲染和用戶交互完全被阻塞了,為了避免頁(yè)面加載時(shí)的停頓甚至空白頁(yè)的出現(xiàn),JS 腳本應(yīng)盡量放置在頁(yè)面底部,這點(diǎn)很重要:

  1. <html>  
  2. <head>  
  3. <title>無(wú)標(biāo)題文檔</title>  
  4. <link rel="stylesheet" type="text/css" href="styles.css" />  
  5. </head>  
  6. <body>  
  7. <p>頁(yè)面的內(nèi)容。。。</p>  
  8. <!-- 推薦的位置,頁(yè)面底部: -->  
  9. <script type="text/javascript" src="file1.js"></script>  
  10. <script type="text/javascript" src="file2.js"></script>  
  11. <script type="text/javascript" src="file3.js"></script>  
  12. </body>  
  13. </html> 

組織腳本:
       為了改善上面的阻塞情況,應(yīng)盡可能的減少頁(yè)面中<script>標(biāo)簽的出現(xiàn)次數(shù),這同時(shí)也是考慮到HTTP 請(qǐng)求會(huì)帶來(lái)額外的性能開(kāi)銷(xiāo),也就是說(shuō)應(yīng)減少頁(yè)面中外鏈腳本的數(shù)量。

       你可以手動(dòng)合并你的多個(gè)JS 文件,也可采用類(lèi)似Yahoo! combo handler 這樣的實(shí)時(shí)在線服務(wù)來(lái)實(shí)現(xiàn),例如下面的這個(gè)<script>標(biāo)簽實(shí)際上便載入了3個(gè)JS 文件:

  1. <html>    
  2. <head>    
  3. <title>無(wú)標(biāo)題文檔</title>    
  4. <link rel="stylesheet" type="text/css" href="styles.css" />    
  5. </head>    
  6. <body>      
  7. <p>頁(yè)面的內(nèi)容。。。</p>      
  8. <!-- 推薦的位置,頁(yè)面底部: -->    
  9. <script type="text/javascript" src="http://yui.yahooapis.com/combo?file1.js&file2.js&file3.js"></script>    
  10. </body>    
  11. </html> 

無(wú)阻塞的腳本:
為了阻塞狀況,這里提供了幾個(gè)實(shí)現(xiàn)并行下載JS 腳本的方案。

1. 延遲的腳本

       HTML4 為<script>標(biāo)簽定義了一個(gè)defer 屬性,它能使這段代碼延遲執(zhí)行,然而該屬性只有IE4+ 和Firefox 3.5+ 支持。聲明了defer 屬性的<script>會(huì)在DOM加載完成,window.onload 事件觸發(fā)前被解析執(zhí)行:

  1. <script type="text/javascript" src="file1.js" defer></script> 

2. 動(dòng)態(tài)腳本元素
       這是最通用的解決方案,通過(guò)DOM 動(dòng)態(tài)地創(chuàng)建<script>元素并插入到文檔中,文件在該元素被添加到頁(yè)面時(shí)開(kāi)始下載,這樣 無(wú)論在何時(shí)啟動(dòng)下載,文件的下載和執(zhí)行過(guò)程不會(huì)阻塞頁(yè)面其他進(jìn)程。

       不過(guò)要注意使用這種方式加載的代碼會(huì)立刻執(zhí)行,這樣需清楚的了解各文件的作用以及合理的執(zhí)行順序,此時(shí)跟蹤并確保腳本下載完成并準(zhǔn)備就緒是很有必要的,非IE瀏覽器會(huì)在<script>元素接收完成時(shí)觸發(fā)一個(gè)load 事件,而IE 下則會(huì)觸發(fā)一個(gè)readystatechange 事件并通過(guò)readyState 屬性加以判斷便可。以下是兼容地動(dòng)態(tài)加載一個(gè)JS 腳本的函數(shù):了:

  1. function load_script(url, callback)   
  2. {      var script = document.createElement('script');        
  3.        script.type = 'text/javascript';  
  4.        if (script.readyState)   
  5.        {  //IE   
  6.          script.onreadystatechange = functio()
  7. {          
  8.  if (script.readyState == 'loaded' || script.readyState == 'complete'
  9. {
  10.                 script.onreadystatechange = null;
  11.                 callback();
  12.              }
  13.            }
  14.       } 
  15. else
  16. { //others
  17.         script.onload = function()
  18.              callback(); }
  19.       }
  20.       script.src = url;
  21.       document.getElementsByTagName('head')[0].appendChild(script);
  22.   } 

       你可以將這個(gè)函數(shù)保存至一個(gè)load_script.js 文件,然后用該函數(shù)來(lái)加載其他的腳本,當(dāng)要加載多個(gè)腳本時(shí),為了確保正確的加載順序,可以將load_script() 的執(zhí)行串聯(lián)起來(lái),最后如前面說(shuō)到的放至頁(yè)面的底部,這便是一個(gè)完美的解決方案了。

  1. <script  type="text/javascript"src="load_script.js"></script>    
  2. <script type="text/javascript">  
  3. load_script('file1.js'function()  
  4.  {     
  5.    load_script('file2.js'function()  
  6.      {        
  7.       load_script('file3.js', functio()  {                   
  8. //全部載入后的操作...           
  9.          } );  
  10.       } );  
  11.   } );  
  12. </script>  

3.XMLHttpRequest 腳本注入

       即通過(guò)AJAX 方式加載,不過(guò)這種方式無(wú)法實(shí)現(xiàn)跨域加載,不適用于大型網(wǎng)站。

推薦的無(wú)阻塞模式
       我們上面做的這些工作當(dāng)然也已經(jīng)被那些牛人們完成了,并寫(xiě)成了一些優(yōu)秀的JS 類(lèi)庫(kù)以便我們使用,它們均能很好地解決JS 腳本的阻塞問(wèn)題,實(shí)現(xiàn)并行下載,例如: YUI3、LazyLoad、LABjs 等。
 

【編輯推薦】

  1. JavaScript跨域總結(jié)與解決辦法
  2. 使用Javascript開(kāi)發(fā)移動(dòng)應(yīng)用程序
  3. 10個(gè)令人驚奇的HTML5和JavaScript效果
  4. JavaScript初學(xué)者應(yīng)注意的七個(gè)細(xì)節(jié)
責(zé)任編輯:佚名 來(lái)源: 網(wǎng)絡(luò)資源
相關(guān)推薦

2013-09-04 14:22:59

JavaScript性能優(yōu)化

2011-04-19 11:06:03

JavaScriptweb

2014-10-10 14:00:52

JavascriptHTML

2015-07-23 15:17:37

JavaScript循環(huán)語(yǔ)句

2014-11-25 10:03:42

JavaScript

2012-12-17 13:51:22

Web前端JavaScriptJS

2009-06-24 15:00:39

Javascript代

2023-04-25 17:24:31

veImageXiOSSDK

2009-01-05 10:00:11

JSP優(yōu)化Servlet性能優(yōu)化

2014-10-09 09:48:14

JavaScript

2013-06-06 10:53:39

Javascript裝載

2024-12-02 14:28:17

JavaScriptWeb開(kāi)發(fā)

2015-08-11 09:46:26

JavaScriptDOM編程重排

2024-12-04 10:58:57

TomcatJetty高并發(fā)

2023-11-01 11:51:08

Linux性能優(yōu)化

2019-03-01 11:03:22

Lustre高性能計(jì)算

2019-08-26 18:20:05

JavascriptWeb前端

2017-12-07 13:40:00

JavaScript內(nèi)存泄露內(nèi)存管理

2024-12-25 14:03:03

2020-01-07 16:16:57

Kafka開(kāi)源消息系統(tǒng)
點(diǎn)贊
收藏

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