當前位置:首頁 » 網頁前端 » 前端優化的詳細步驟
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

前端優化的詳細步驟

發布時間: 2023-05-13 09:42:41

❶ 如何對前端性能進行優化

前端開發代碼優化、可維護性、瀏覽器兼容性是非常重要的課題。從實際的工程應用角度出發,最常遇見的前端優化問題。前端性能進行優化規則,基本可以涵蓋現在前端大部分的性能優化原則了,很多更加geek和精細優化方法都是從這些原則裡面延伸出來的。

前端性能進行優化都有哪些規則

  1. 減少HTTP請求次數

    盡量合並圖片、CSS、JS。比如載入一個頁面有5個css文件的話,把這個5個文件合成一個的話,就只需要發出一次http請求,節省網路請求時間,加快頁面的載入。

2. 使用CDN

網站上靜態資源即css、js全都使用cdn分發,包括圖片

3. 避免空的src和href

當link標簽的href屬性為空、script標簽的src屬性為空的時候,瀏覽器渲染的時候會把當前頁面的URL作為它們的屬性值,從而把頁面的內容載入進來作為它們的值。所以要避免犯這樣的疏忽。

4. 為文件頭指定Expires

Exipres是用來設置文件的過期時間的,一般對css、js、圖片資源有效。 他可以使內容具有緩存性,這樣下回再訪問同樣的資源時就通過瀏覽器緩存區讀取,不需要再發出http請求。如下例子:

新浪微博的這個css文件的Expires時間是2016-5-04 09:14:14.

5. 使用gzip壓縮內容

gzip能夠壓縮任何一個文本類型的響應,包括html,xml,json。大大縮小請求返回的數據量。

6. 把CSS放到頂部

網頁上的資源載入時從上網下順序載入的,所以css放在頁面的頂部能夠優先渲染頁面,讓用戶感覺頁面載入很快。

7. 把JS放到底部

載入js時會對後續的資源造成阻塞,必須得等js載入完才去載入後續的文件 ,所以就把js放在頁面底部最後載入。

8. 避免使用CSS表達式

舉個css表達式的例子

font-color: expression( (new Date()).getHours()%3 ? 「#FFFFFF" : 「#AAAAAA" );

這個表達式會持續的在頁面上計算樣式,影響頁面的性能。並且css表達式只被IE支持。

9. 將CSS和JS放到外部文件中

目的是緩存文件,可以參考原則4。 但有時候為了減少請求,也會直接寫到頁面里,需根據PV和IP的比例權衡。

10. 權衡DNS查找次數

減少主機名可以節省響應時間。但同時,需要注意,減少主機會減少頁面中並行下載的數量。

IE瀏覽器在同一時刻只能從同一域名下載兩個文件。當在一個頁面顯示多張圖片時,IE 用戶的圖片下載速度就會受到影響。所以新浪會搞N個二級域名來放圖片。

下面是新浪微博的圖片域名,我們可以看到他有多個域名,這樣可以保證這些不同域名能夠同時去下載圖片,而不用排隊。不過如果當使用的域名過多時,響應時間就會慢,因為不用響應域名時間不一致。

11. 精簡CSS和JS

這里就涉及到css和js的壓縮了。比如下面的新浪的一個css文件,把空格回車全部去掉,減少文件的大小。現在的壓縮工具有很多,基本主流的前端構建工具都能進行css和js文件的壓縮,如grunt,glup等。

12. 避免跳轉

有種現象會比較坑爹,看起來沒什麼差別,其實多次了一次頁面跳轉。比如當URL本該有斜杠(/)卻被忽略掉時。例如,當我們要訪問http:// .com時,實際上返回的是一個包含301代碼的跳轉,它指向的是http:// .com/(注意末尾的斜杠)。在nginx伺服器可以使用rewrite;Apache伺服器中可以使用Alias 或者 mod_rewrite或者the DirectorySlash來避免。

另一種是不用域名之間的跳轉, 比如訪問http:// .com/bbs跳轉到http:// bbs..com/。那麼可以通過使用Alias或者mod_rewirte建立CNAME(保存一個域名和另外一個域名之間關系的DNS記錄)來替代。

13. 刪除重復的JS和CSS

重復調用腳本,除了增加額外的HTTP請求外,多次運算也會浪費時間。在IE和Firefox中不管腳本是否可緩存,它們都存在重復運算JavaScript的問題。

14. 配置ETags

它用來判斷瀏覽器緩存里的元素是否和原來伺服器上的一致。比last-modified date更具有彈性,例如某個文件在1秒內修改了10次,Etag可以綜合Inode(文件的索引節點(inode)數),MTime(修改時間)和Size來精準的進行判斷,避開UNIX記錄MTime只能精確到秒的問題。 伺服器集群使用,可取後兩個參數。使用ETags減少Web應用帶寬和負載

15. 可緩存的AJAX

非同步請求同樣的造成用戶等待,所以使用ajax請求時,要主動告訴瀏覽器如果該請求有緩存就去請求緩存內容。如下代碼片段, cache:true就是顯式的要求如果當前請求有緩存的話,直接使用緩存

$.ajax({ url : 'url', dataType : "json", cache: true, success : function(son, status){ }

16. 使用GET來完成AJAX請求

當使用XMLHttpRequest時,瀏覽器中的POST方法是一個「兩步走」的過程:首先發送文件頭,然後才發送數據。因此使用GET獲取數據時更加有意義。

17. 減少DOM元素數量

這是一門大學問,這里可以引申出一堆優化的細節。想要具體研究的可以看後面推薦書籍。總之大原則減少DOM數量,就會減少瀏覽器的解析負擔。

18. 避免404

比如外鏈的css、js文件出現問題返回404時,會破壞瀏覽器的並行載入。

19. 減少Cookie的大小

Cookie裡面別塞那麼多東西,因為每個請求都得帶著他跑。

20. 使用無cookie的域

比如CSS、js、圖片等,客戶端請求靜態文件的時候,減少了 Cookie 的反復傳輸對主域名的影響。

21. 不要使用濾鏡

IE獨有屬性AlphaImageLoader用於修正7.0以下版本中顯示PNG圖片的半透明效果。這個濾鏡的問題在於瀏覽器載入圖片時它會終止內容的呈現並且凍結瀏覽器。在每一個元素(不僅僅是圖片)它都會運算一次,增加了內存開支,因此它的問題是多方面的。

完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式來代替,這種格式能在IE中很好地工作。如果你確實需要使用AlphaImageLoader,請使用下劃線_filter又使之對IE7以上版本的用戶無效。

22. 不要在HTML中縮放圖片

比如你需要的圖片尺寸是50* 50

那就不用用一張500*500的大尺寸圖片,影響載入

23. 縮小favicon.ico並緩存

❷ 如何進行web前端性能優化

提起Web前端性能優化的問題,前端開發人員非常熟悉,對於一個網站而言,即使內容和功能再優秀,如果用戶需要花費很久的時間才能打開,這樣遲早會消耗用戶的耐心,並最終失去用戶。

那如何才能優化前端性能?歸納為三步

一、關鍵資源位元組數

位元組數也就是通常說的減少資源文件(js、css、image、video...)的大小。

1、壓縮衫螞

前端使用uglify混淆壓縮

後端開啟gzip

對圖片進行壓縮,使用壓縮比例更高的格式(WebP)

2、緩存

強緩存(http狀態碼:200),不用請求服務運納器直接使用本地緩存,協商緩存(http狀態碼:304),使用時先請求伺服器若被告知緩存沒過期則使用本地緩存,不用下載資源,使用localstorage對數據進行存儲

3、針對首屏優化

對非關鍵資源延遲載入、非同步載入,減少首屏資源大小

二、關鍵資源連接數

1、合並請求

使用http2.0的多路復用合並請求配置combo,在無法使用http2.0的情況下作為一種合並資源請求的手段。

2、減少圖片請求數

使用spite圖,使用svg-symbol。

3、針對一些場景採用css、js內聯的方式。

4、使用強緩存減少了一次伺服器請求。

5、非關鍵資源延遲、非同步載入,減少了首屏資源連接數。

三、關鍵渲染路徑

1、bigpipe分塊輸出

這里主要是因為要完成一整個頁面的輸出後端需要處理很多個任務,我們可以將這些多個任務進行分塊,誰先完成誰就先輸出,最終通過JS回填的方式輸出DOM節點,這種方式主要解決了直出頁面阻塞的問題。

2、bigrender分塊渲染

常規的手段就是採用前端模板渲染頁面,針對首屏時間主要減少了首次構建DOM樹時的節點數

3、針對reflow,repaint,composit路徑處理。

4、涉及到動畫時關於layer的概旁塌沒念renderlayer、graphicslayer。

5、css放在頭部、js放底部避免阻塞DOM樹的構建,關於css、js的位置對於頁面渲染的影響大家可以關注下相關的文章。核心:css資源不會阻塞DOM樹的構建但會阻塞DOM的渲染,JS會阻塞DOM樹的構建,CSS會阻塞JS的執行。

❸ 如何優化前端

優化你網站圖片.
大量使用的圖片和圖標雖然可以給網站帶來美輪美奐的效果,圖文混編更是一種非常絢麗的博文展現方法。
可圖片的體積確實不是很給力,jpg是一種有損壓縮格式,而png雖然是無損的,但缺憾是體積頗大。為了減少圖片體積達到最快的下載速度,每一張圖片上傳前應該優化一下體積。

❹ 如何做好網站前端優化

一. 清理 HTML 文檔
二. 優化 CSS 性能
三.減少外部HTTP請求
四. 壓縮 CSS, JS 和 HTML
五. 使用預先獲取
六. 使用 CDN 和緩存提高速度
七. 壓縮文件
八. 優化你的圖片
九. 使用輕量級框架
十.前端優化 – 總結
進行前端優化似乎需要花費很大的精力,相信這篇應用指南中的一些小技巧能幫你極大改善網站載入速度。網站載入地越快,則用戶體驗越佳。因此, 對前端進行優化能使給你和你的用戶都帶來益處。如果你有任何其他好的優化方法,請在評論區留下您的寶貴建議。

❺ Web前端新手如何做好性能優化

今天小編要跟大家分享的文章是關於Web前端新手如何做好性能優化?影響用戶訪問的最大部分是前端的頁面。網站的劃分一般為二:前端和後台。我們可以理解成後台是用來實現網站的功能的,比如:實現用戶注冊,用戶能夠為文章發表評論等等。而前端呢?其實應該是屬於功能的表現。

而我們建設網站的目的是什麼呢?不就是為了讓目標人群來訪問嗎?所以我們可以理解成前端才是真正和用戶接觸的。


除了後台需要在性能上做優化外,其實前端的頁面更需要在性能優化上下功夫,只有這樣才能給我們的用戶帶來更好的用戶體驗。不僅僅如此,如果前端優化得好,他不僅可以為企業節約成本,他還能給用戶帶肆攔來更多的用戶,因為增強的用戶體驗。說了這么多,那麼我們應該如何對我們前端的頁面進行性能優化呢?


前端性能優化的方法?


一、content方面


1,減少HTTP請求:合並文件、CSS精靈、inlineImage


2,減少DNS查詢:DNS查詢完成之前瀏覽器不能從這個主機下載任何任何文件。方法:DNS緩存、將資源分布到恰當數量的主機名,平衡並行下載和DNS查詢


3,避免重定向:多餘的中間訪問


4,使Ajax可緩存


5,非必須組件延遲載入


6,未來所需組件預載入


7,減少DOM元素數量


8,將資源放到不同的域下:瀏覽器同時從一個域下載資源的數目有限,增加域可以提高並行下載量


9,減少iframe數量


10,不要404


二、Server方面


1,使用CDN


2,添加Expires或者Cache-Control響應頭


3,對組件使用Gzip壓昌亮縮


4,配置ETag


5,FlushBufferEarly


6,Ajax使用GET進行請求


7,避免空src的img標簽


三、cookie方面


1,減小cookie大小


2,引入資源的域名不要包含cookie


四、CSS方面


1,將樣式表放到頁面頂部


2,不使用CSS表達式


3,使用不使用@import


4,不使用IE的Filter


五、JavaScript方面


1,將腳本放到頁面底部


2,將javascript和css從外部引入


3,壓縮javascript和css


4,刪除不需要的腳本


5,減少DOM訪問


6,合理設計事件監聽器、


六、圖片方面


1,優化圖片:根據實際顏色需要選擇色深、壓縮


2,優化css精靈


3,不要在HTML中拉伸圖片


4,保證favicon.ico小並且可緩存


七、移動方面


1,保證組件小於25k


2,


以上就是小編今天為大家分享的關於Web前端新手如何做好性能優化的文章,希望本篇文章能夠對正在從事web前端工作的小夥伴們有所幫助。裂迅胡想要了解
更多web前端知識記得關注北大青鳥web培訓官網。最後祝願小夥伴們工作順利!


❻ 如何優化網頁如何前端優化

一. 清理 HTML 文檔
二. 優化 CSS 性能
三.減少外部HTTP請求
四. 壓縮 CSS, JS 和 HTML
五. 使用預先獲取
六. 使用 CDN 和緩存提高速度
七. 壓縮文件
八. 優化你的圖片
九. 使用輕量級框架
十.前端優化 – 總結
進行前端優化似乎需要花費很大的精力,相信這篇應用指南中的一些小技巧能幫你極大改善網站載入速度。網站載入地越快,則用戶體驗越佳。因此, 對前端進行優化能使給你和你的用戶都帶來益處。如果你有任何其他好的優化方法,請在評論區留下您的寶貴建議。

❼ 前端性能優化有哪些方法

前端性能優化的方法有:

一、減少http請求數

常用的減少http請求數有以下幾種:

1、合並圖片。當圖片較多時,可以合並為一張大圖,從而減少http請求數。經常變化的圖片可能不太合適,變化相對穩定的就可以考慮。合並大圖除了能減少http請求數外,還可以充分利用緩存來提升性能。

2、合並壓縮css樣式表和js腳本,他們的共同目的都是為了減少http連接數。

3、去掉不哪念虧必要的請求。開發寫代碼或者系統升級之後殘留的無效請求連接。

4、充分利用緩存。這里說高卜的緩存是客戶端側緩存或者說瀏覽器緩存。Expires頭信息是客戶端側緩存的重要依據,格式類似於Expires:sun ,20 Dec 2017 23:00:00 GMT。

如果當前時間小於Expires指定的時間,瀏覽器就會從緩存中直接獲取相關的數據信息或html文件,如果當前時間大於Expires指定的時間,瀏覽器會向伺服器發送請求來獲取相關數據信息。

以Apache為例,可在Apache的配置文件httpd.conf中設置Expires。

二、圖片優化

優化方法:

1、盡可能的使用PNG格式的圖片,它相對來說體積較小。

2、對於不同格式的圖片,在上線之前最好進行一定的優化。

3、圖片的延遲載入,也叫做賴載入。

三、使用CDN

CDN即內容分發網路,可以使用戶就近取得所需內容,解決網路李神擁擠的狀況,提高用戶訪問網站的響應速度。

四、開啟GZIP

GZIP即數據壓縮,用於壓縮使用Internet傳輸的所有文本資源。開啟GZIP的方法很簡單,到對應的web服務配置文件中設置一下即可。以Apache為例,在配置文件httpd.conf中添加。

五、樣式表和JS文件的優化

一般我們會把css樣式表文件放到文件的頭部。比如,放到<head>標簽中,這樣可以讓CSS樣式表盡早地完成下載。對應js腳本文件,一般我們把他放到頁面的尾部。

六、使用無cookie域名

無cookie域名的概念:當發送一個請求時,同時還要請求一張靜態的圖片和發送cookie時,伺服器對於這些cookie不會做任何使用,也就是說這些cookie沒什麼用,沒不要隨請求一同發送。

❽ 常用的前端性能優化方法有哪些

常用的優化有兩部分
第一:面向內容的優化
1. 減少 HTTP 請求
2. 減少 DNS 查找
3. 避免重定向
4. 使用 Ajax 緩存
5. 延遲載入組件

6. 預先載入組件
7. 減少 DOM 元素數量
8. 切分組件到多個域

9. 最小化 iframe 的數量
10. 不要出現http 404 錯誤
第二:面向 Server
1. 縮小 Cookie
2. 針對 Web 組件使用域名無關性的

❾ 前端性能優化的具體方法有哪些

解決辦法一:

減少http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN託管,data緩存 ,圖片伺服器。
前端模板 JS+數據,減少由於HTML標簽導致的帶寬浪費,前端用變數保存AJAX請求結果,每次操作本地變數,不用請求,減少請求次數
用innerHTML代替DOM操作,減少DOM操作次數,優化javascript性能。
當需要設置的樣式很多時設置className而不是直接操作style。
少用全局變數、緩存DOM節點查找的結果。減少IO讀取操作。
避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。
圖片預載入,將樣式表放在頂部,將腳本放在底部 加上時間戳。
解決辦法二:

減少HTTP請求次數
使用CDN:CDN在前端開發的作用
避免空的src和href
為文件頭指定Expires
使用gzip壓縮內容
把CSS放到頂部
把JS放到底部
避 免使用CSS表達式
將CSS和JS放到外部文件中
避免跳轉
可緩存的AJAX
使用GET來完成AJAX請求

❿ Web前端性能優化的實用技巧匯總

今天小編要跟大家分享的文章是關於Web前端性能優化的實用技巧匯總。javascript在瀏覽器中運行的性能,可以認為是開發者所面臨的最嚴重的可用性問題。這個問題因為javascript的阻塞性而變得復雜,事實上,多數瀏覽器使用單一進程來處理用戶界面和js腳本執行,所以同一時刻只能做一件事。js執行過程耗時越久,瀏覽器等待響應的時間越長。

一.提高載入性能


1.IE8,FF,3.5,Safari4和Chrome都允許並行下載js文件,當script下載資源時不會阻塞其他script的下載。但是js下載仍然會阻塞其他資源的下載,如圖片。盡管腳本下載不會互相影響,但頁面仍然必須等待所有塌塵岩js代碼下載並執行完才能繼續。因兄雹此仍然存在腳本阻塞問題.推薦將所有js文件放在body標簽底部以減少對整個頁面的影響。


2.減少頁面外鏈腳本文件的數量將會提高頁面性能:


http請求會帶來額外的開銷,因此下載單個300k的文件將比下載10個30k的文件效率更高。


3.動態腳本載入技術:


無論何時啟動下載,文件的下載和執行都不會阻塞頁面其他進程。


functionlaodScript(url,callback){


varscript=document.createElement('script');_


_cript.type='text/javascript'__f(script.readyState){//ie


____cript.onreadystatechange=function(){_____


if(script.readyState=='loaded'||script.readyState=='complete'){_______


_cript.onreadystatechange=null;_______


callback()_____


____


__


}else{//其他瀏覽器___


script.onload=function(){_____


_allback()


___}_


}_


script.src=url;_


document.getElementsByTagName('head')[0].appendChild(script);


}
//使用


loadScript('./a.js',function(){_


loadScript('./b.js',function(){___


loadScript('./c.js',function(){_____


console.log('載入完成')___


})_


})


})


4.無阻塞載入類庫——LABjs,使用方法如下:





//鏈式調用時文件逐個下載,.wait()用來指定文件下載並執行完畢後所調用的函數


$LAB.script('./a.js')_


.script('./b.js')_


.wait(function(){__


_pp.init();


})
//為了保證執行順序,可以這么做,此時a必定在b前執行


$LAB.script('./a.js').wait()_


.script('./b.js')_


.wait(function(){___


_pp.init();


})


二.數據存取與JS性能


1.在js中,數據存儲的位置會對代碼整體性能產生重大影響。數據存儲共有4種方式:字面量,變數,數組項,對象成員。他們有著各自的性能特點。


2.訪問字面量和局部變數的速度最快,相反,訪問數組和對象相對較慢


3.由於局部變數存在於作用域鏈的起始位置,因此訪問局部變數的比訪問跨域作用變數更快


4.嵌套的對象成員會明顯影響性能,應盡量避免


5.屬性和方法在原型鏈位置越深,訪問他的速度越慢


6.通常我們可以把需要多次使用的對象成員,數組元素,跨域變數保存在局部變數中來改善js性能


三.DOM編程


1.訪問DOM會影響瀏覽器性能,修改DOM則更耗費性能,因為他會導致瀏覽器重新計算頁面的幾何變化。<通常的做法是減少訪問DOM的次數,把運算盡量留在JS這一端。


注團御:如過在一個對性能要求比較高的操作中更新一段HTML,推薦使用innerHTML,因為它在絕大多數瀏覽器中運行的都很快。但對於大多數日常操作而言,並沒有太大區別,所以你更應該根據可讀性,穩定性,團隊習慣,代碼風格來綜合決定使用innerHTML還是createElement()


2.HTML集合優化


HTML集合包含了DOM節點引用的類數組對象,一直與文檔保持連接,每次你需要最新的信息時,都會重復執行查詢操作,哪怕只是獲取集合里元素的個數。


①_優化一——集合轉數組collToArr


functioncollToArr(coll){_


for(vari=0,a=[],len=coll.length;i

a._ush(coll[i]);


__


returna


}


②緩存集合length


③訪問集合元素時使用局部變數(即將重復的集合訪問緩存到局部變數中,用局部變數來操作)


3.遍歷DOM


①使用只返回元素節點的API遍歷DOM,因為這些API的執行效率比自己實現的效率更高:


td{border:1pxsolid#ccc;padding:5px;margin:auto;}
td>p{text-align:left;}
td>pspan{text-align:center;display:block;}


屬性名
被替代屬性


children
childNodes


childElementCount
childNodes.length


firstElementChild
firstChild


lastElementChild
lastChild


nextElementSibling
nextSibling


previousElementSibling
previousSibling


_諮≡衿_PI——querySelectorAll()


querySelectorAll()方法使用css選擇器作為參數並返回一個NodeList——包含著匹配節點的類數組對象,該方法不會返回HTML集合,因此返回的節點不會對應實時文檔結構,著也避免了HTML集合引起的性能問題。


let_rr=_ocument.querySelectorAll('div.warning,_iv.notice>_')


4.重繪和重排


瀏覽器在下載完頁面的所有組件——html,js,css,圖片等之後,會解析並生成兩個內部數據結構——_OM樹,渲染樹.一旦DOM樹和渲染樹構建完成,瀏覽器就開始繪制頁面元素(paint).


①重排發生的條件:


添加或刪除可見的DOM元素位置變化元素尺寸改變內容改變頁面渲染器初始化瀏覽器窗口尺寸變化出現滾動條時會觸發整個頁面的重排_嘏瘧囟ㄖ鞀


5.渲染樹變化的排列和刷新


大多數瀏覽器通過隊列化修改並批量執行來優化重排過程,然而獲取布局信息的操作會導致隊列強制刷新。


offsetTop,offsetWidth...


scrollTop,scrollHeight...


clientTop,clientHeight...


getComputedStyle()


一些優化建議:將設置樣式的操作和獲取樣式的操作分開:


//設置樣式


body.style.color='red'


body.style.fontSize=པpx'


//讀取樣式


letcolor=body.style.color


let_ontSize=_ody.style.fontSize


另外,獲取計算屬性的兼容寫法:


functiongetComputedStyle(el){_


varcomputed=(document.body.currentStyle?el.currentStyle:document.defaultView.getComputedStyle(el,'');_


returncomputed


}


6.最小化重繪和重排


①.批量改變樣式


/*使用cssText
*/el.style.cssText='border-left:1px;_order-right:2px;_adding:20px'


②.批量修改dom的優化方案——使元素脫離文檔流-對其應用多重改變-把元素帶迴文檔


functionappendDataToEl(option){


vartargetEl=option.target||document.body,___


createEl,___


data=option.data||[];_//讓容器脫離文檔流,減少重繪重排_


vartargetEl_display=targetEl.style.display;_


targetEl.style.display='none'
_


//*****創建文檔片段來優化Dom操作****_


varfragment=document.createDocumentFragment();_//給元素填充數據_


for(vari=0,max=data.length;i

createEl=
document.createElement(option.createEl);___


for(varitemindata[i]){_____


if(item.toString()==='text'){_______


createEl.appendChild(document.createTextNode(data[i][item]));________ontinue;___________


_f(item.toString()==='html'){_______


createEl.innerHTML=item,data[i][item];_______


continue;_____


}_____


_reateEl.setAttribute(item,data[i][item]);_______


//****將填充好的node插入文檔片段****___


fragment.appendChild(createEl);___


//****將文檔片段統一插入目標容器****_


targetEl.appendChild(fragment);_


//顯示容器,完成數據填充_


targetEl.style.display=
targetEl_display;


}
//使用


varwrap=document.querySelectorAll('.wrap')[0];


vardata=[_


_name:'xujaing',text:'選景',title:'xuanfij'},_


{name:'xujaing',text:'選景',title:'xuanfij'},_


{name:'xujaing',text:'選景',title:'xuanfij'}];


appendDataToEl({_


target:wrap,_


createEl:'div',


_ata:data


});


上面的優化方法使用了文檔片段:_蔽頤前鹽牡燈尾迦氳澆詰闃惺保導噬媳惶砑擁鬧皇歉悶蔚淖詠詰悖皇瞧偽舊懟?梢允溝_om操作更有效率。


②.緩存布局信息


//緩存布局信息


letcurrent=el.offsetLeft;


current++;


el.style.left=current+'px'


if(current>300){_


stop();


}


④.慎用:hover


如果有大量元素使用:hover,那麼會降低相應速度,CPU升高


⑤.使用事件委託(通過事件冒泡實現)來減少事件處理器的數量,減少內存和處理時間


functiondelegation(e,selector,callback){_


e=e||window.event;_


vartarget=e.target||e.srcElement;
_if(target.nodeName!==selector||
target.className!==selector||target.id!==selector){___


return;


_}_


if(typeofe.preventDefault==='function'){__


_.preventDefault();___


e.stopPropagation();


}else{___


e.returnValue=false;


e.cancelBubble=true;_


}
__allback()}


四.演算法和流程式控制制


1.循環中減少屬性查找並反轉(可以提升50%-60%的性能)


//for循環


for(vari=item.length;i--){_


process(item[i]);


}


//while循環


varj=item.length;


while(j--){_


process(item[i]);


}


2.使用Duff裝置來優化循環(該方法在後面的文章中會詳細介紹)


3.基於函數的迭代(比基於循環的迭代慢)


items.forEach(function(value,index,array){__rocess(value);})


4.通常情況下switch總比if-else快,但是不是最佳方案


五.字元串和正則表達式


1.除了IE外,其他瀏覽器會嘗試為表達式左側的字元串分配更多的內存,然後簡單的將第二個字元串拷貝到他的末尾,如果在一個循環中,基礎字元串位於最左側,就可以避免重復拷貝一個逐漸變大的基礎字元串。2.使用[sS]來匹配任意字元串3.去除尾部空白的常用做法:


if(!String.prototype.trim){_


String.prototype.trim=function(){___


returnthis.replace(/^s+/,'').replace(/ss*$/,'')_


}


}


六.快速響應的用戶界面


1.瀏覽器的UI線程:用於執行javascript和更新用戶界面的進程。


2.在windows系統中定時器解析度為15毫秒,因此設置小於15毫秒將會使IE鎖定,延時的最小值建議為25ms.


3.用延時數組分割耗時任務:


functionmultistep(steps,args,callback){_


vartasks=steps.concat();
__etTimeout(function(){___


vartask=tasks.shift();___


task.apply(null,args||[]);_//調用Apply參數必須是數組
___


if(tasks.length>0){_____


setTimeout(arguments.callee,25);


___else{_____


_allback();___


__


},25);


}


4.記錄代碼運行時間批處理任務:


functiontimeProcessArray(items,process,callback){_


vartodo=item.concat();__etTimeout(function(){___


varstart=+newDate();
__o{_____


_rocess(todo.shift());___


}while(todo.length>0&&(+newDate()-start<50));
____f(todo.length>0){_____


_etTimeout(arguments.callee,25);


___else{____


_allback(items);_


}_


_,25)


}


5.使用WebWorker:它引入了一個介面,能使代碼運行且不佔用瀏覽器UI線程的時間。一個Worker由如下部分組成:


①一個navigator對象,包括app