js性能優(yōu)化 如何更快速加載你的JavaScript頁(yè)面
不要什么都依賴JavaScript。不要編寫(xiě)重復(fù)性的腳本。要把JavaScript當(dāng)作糖果工具,只是起到美化作用。別給你的網(wǎng)站添加大量的JavaScript代碼。只有必要的時(shí)候用一下。只有確實(shí)能改善用戶體驗(yàn)的時(shí)候用一下。
盡量減少DOM訪問(wèn)
使用JavaScript訪問(wèn)DOM元素很容易,代碼更容易閱讀,但是速度很慢。下面介紹幾個(gè)要點(diǎn):限制使用JavaScript來(lái)修飾網(wǎng)頁(yè)布局,把針對(duì)訪問(wèn)元素的引用緩存起來(lái)。有時(shí),當(dāng)你的網(wǎng)站依賴大量的DOM改動(dòng)時(shí),就應(yīng)該考慮限制你的標(biāo)記。這是改用HTML5、舍棄那些原來(lái)的XHTML和HTML4的一個(gè)充分理由。你可以查看DOM元素的數(shù)量,只要在Firebug插件的控制臺(tái)中輸入:document.getElementsByTagName('*').length。
壓縮代碼
要提供經(jīng)過(guò)壓縮的JavaScript頁(yè)面,最有效的辦法就是先用JavaScript壓縮工具對(duì)你的代碼壓縮一下,這種壓縮工具可以壓縮變量和參數(shù)名稱,然后提供因而獲得的代碼,使用了gzip壓縮。
是的,我沒(méi)有壓縮我的main.js,但你要檢查有沒(méi)有未經(jīng)壓縮的任何jQuery插件,別忘了壓縮。下面我列出了壓縮方面的幾個(gè)方案。
◆ YUI壓縮工具(jQuery開(kāi)發(fā)團(tuán)隊(duì)就使用它),初學(xué)者指南
(http://www.slideshare.net/nzakas/extreme-JavaScript-compression-with-yui-compressor)、第二指南 (http://vilimpoc.org/research/js-speedup/)和官方網(wǎng)站(http://developer.yahoo.com/yui/compressor/)。
◆ Dean Edwards Packer(http://dean.edwards.name/packer/)
◆ JSMin(http://crockford.com/JavaScript/jsmin)
GZip壓縮:其背后的想法是,縮短在瀏覽器和服務(wù)器之間傳送數(shù)據(jù)的時(shí)間??s短時(shí)間后,你得到標(biāo)題是Accept-Encoding: gzip,deflate的一個(gè)文件。不過(guò)這種壓縮方法有一些缺點(diǎn)。它在服務(wù)器端和客戶端都要占用處理器資源(以便壓縮和解壓縮),還要占用磁盤空間。
避免eval():雖然有時(shí)eval()會(huì)在時(shí)間方面帶來(lái)一些效率,但使用它絕對(duì)是錯(cuò)誤的做法。eval()導(dǎo)致你的代碼看起來(lái)更臟,而且會(huì)逃過(guò)大多數(shù)壓縮工具的壓縮。
加快JavaScript裝入速度的工具:Lab.js
有許多出色的工具可以加快JavaScript裝入的速度。值得一提的一款工具是Lab.js。
借助LAB.js(裝入和阻止JavaScript),你就可以并行裝入JavaScript文件,加快總的裝入過(guò)程。此外,你還可以為需要裝入的腳本設(shè)置某個(gè)順序,那樣就能確保依賴關(guān)系的完整性。此外,開(kāi)發(fā)者聲稱其網(wǎng)站上的速度提升了2倍。
使用適當(dāng)?shù)腃DN
現(xiàn)在許多網(wǎng)頁(yè)使用內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)。它可以改進(jìn)你的緩存機(jī)制,因?yàn)槊總€(gè)人都可以使用它。它還能為你節(jié)省一些帶寬。你很容易使用ping檢測(cè)或使用Firebug調(diào)試那些服務(wù)器,以便搞清可以從哪些方面加快數(shù)據(jù)的速度。選擇CDN時(shí),要照顧到你網(wǎng)站那些訪客的位置。記得盡可能使用公共存儲(chǔ)庫(kù)。
面向jQuery的幾個(gè)CDN方案:
◆ http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js——谷歌Ajax,關(guān)于更多庫(kù)的信息請(qǐng)參閱http://code.google.com/apis/libraries/devguide.html#Libraries。
◆ http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js——微軟的CDN
•http://code.jquery.com/jquery-1.4.2.min.js——Edgecast (mt)。
網(wǎng)頁(yè)末尾裝入JavaScript
如果你關(guān)注用戶,用戶因互聯(lián)網(wǎng)連接速度慢而沒(méi)有離開(kāi)你的網(wǎng)頁(yè),這是一個(gè)非常好的做法。易用性和用戶放在首位,JavaScript放在末位。這也許很痛苦,但是你應(yīng)該有所準(zhǔn)備,有些用戶會(huì)禁用JavaScript。可以在頭部分放置需要裝入的一些JavaScript,但是前提是它以異步方式裝入。
異步裝入跟蹤代碼
這一點(diǎn)非常重要。我們大多數(shù)人使用谷歌分析工具(Google Analytics)來(lái)獲得統(tǒng)計(jì)數(shù)據(jù)。這很好?,F(xiàn)在看一下你把你的跟蹤代碼放在哪里。是放在頭部分?還是說(shuō)它使用document.write?然后,如果你沒(méi)有使用谷歌分析工具異步跟蹤代碼,那也只能怪你自己。
這就是谷歌分析工具異步跟蹤代碼的樣子。我們必須承認(rèn),它使用DOM,而不是使用document.write,這可能更適合你。它可以在網(wǎng)頁(yè)裝入之前檢測(cè)到其中一些事件,這非常重要?,F(xiàn)在想一想這種情況,你的網(wǎng)頁(yè)甚至還沒(méi)有裝入,所有用戶都關(guān)閉了網(wǎng)頁(yè)。已找到了解決頁(yè)面瀏覽量錯(cuò)失的辦法。
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-XX']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/JavaScript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
沒(méi)有使用谷歌分析工具?這不是問(wèn)題,今天的分析工具提供商大多允許你使用異步跟蹤。
Ajax優(yōu)化
Ajax請(qǐng)求對(duì)你網(wǎng)站的性能有重大影響。下面我介紹關(guān)于Ajax優(yōu)化的幾個(gè)要點(diǎn)。
緩存你的ajax
先看一下你的代碼。你的ajax可以緩存嗎?是的,它依賴數(shù)據(jù),但是你的ajax請(qǐng)求大多應(yīng)該可以緩存。在jQuery中,你的請(qǐng)求在默認(rèn)情況下已被緩存,不包括script和jsonp數(shù)據(jù)類型。
針對(duì)Ajax請(qǐng)求使用GET
POST類型請(qǐng)求要發(fā)送兩個(gè)TCP數(shù)據(jù)包(先發(fā)送標(biāo)題,然后發(fā)送數(shù)據(jù))。GET類型請(qǐng)求只需要發(fā)送一個(gè)數(shù)據(jù)包(這可能取決于你的cookie數(shù)量)。所以,當(dāng)你的URL長(zhǎng)度不到2K,你又想請(qǐng)求一些數(shù)據(jù)時(shí),不妨使用GET。
使用ySlow
說(shuō)到性能,ySlow既簡(jiǎn)單,又極其有效。它可以對(duì)你的網(wǎng)站進(jìn)行評(píng)分,顯示哪些方面需要改正,以及應(yīng)關(guān)注哪些方面。
另外支一招:把你的JavaScript打包成PNG文件
設(shè)想一下:把你的JS和CSS添加到圖片的末尾,然后用CSS來(lái)裁切,通過(guò)一次HTTP請(qǐng)求來(lái)獲得應(yīng)用程序中所需的所有信息。
我最近找到了這個(gè)方法。它基本上把你的JavaScript/css數(shù)據(jù)打包成PNG文件。之后,你可以拆包,只要使用畫(huà)布API的getImageData()。此外,它非常高效。你可以在不縮小數(shù)據(jù)的情況下,多壓縮35%左右。而且是無(wú)損壓縮!我得指出,對(duì)比較龐大的腳本來(lái)說(shuō),在圖片指向畫(huà)布、讀取像素的過(guò)程中,你會(huì)覺(jué)得有“一段”裝入時(shí)間。
英文原文:http://www.1stwebdesigner.com/design/load-JavaScript-faster/
- javascript教程:關(guān)于if簡(jiǎn)寫(xiě)語(yǔ)句優(yōu)化的方法
- js中if語(yǔ)句的幾種優(yōu)化代碼寫(xiě)法
- nodejs的10個(gè)性能優(yōu)化技巧
- JavaScript性能優(yōu)化之小知識(shí)總結(jié)
- JavaScript也談內(nèi)存優(yōu)化
- JavaScript定時(shí)器和優(yōu)化的取消定時(shí)器方法
- JS對(duì)img標(biāo)簽進(jìn)行優(yōu)化使用onerror顯示默認(rèn)圖像
- Uglifyjs(JS代碼優(yōu)化工具)入門 安裝使用
- 深入探究JavaScript中for循環(huán)的效率問(wèn)題及相關(guān)優(yōu)化
- js 優(yōu)化次數(shù)過(guò)多的循環(huán) 考慮到性能問(wèn)題
- javascript for循環(huán)從入門到偏門(效率優(yōu)化+奇特用法)
- 整理AngularJS框架使用過(guò)程當(dāng)中的一些性能優(yōu)化要點(diǎn)
- javascript定時(shí)器取消定時(shí)器及優(yōu)化方法
- JavaScript中對(duì)循環(huán)語(yǔ)句的優(yōu)化技巧深入探討
- JS代碼優(yōu)化技巧之通俗版(減少js體積)
- angularjs的一些優(yōu)化小技巧
- Extjs優(yōu)化(二)Form表單提交通用實(shí)現(xiàn)
- JS代碼優(yōu)化的8點(diǎn)建議
相關(guān)文章
移動(dòng)端點(diǎn)擊圖片放大特效PhotoSwipe.js插件實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了移動(dòng)端點(diǎn)擊圖片放大特效PhotoSwipe.js插件實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
javascript實(shí)現(xiàn)獲取圖片大小及圖片等比縮放的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)獲取圖片大小及圖片等比縮放的方法,涉及javascript針對(duì)圖形圖像相關(guān)屬性獲取與修改相關(guān)操作技巧,需要的朋友可以參考下2016-11-11
關(guān)于微信小程序使用echarts/數(shù)據(jù)刷新重新渲染/圖層遮擋問(wèn)題
這篇文章主要介紹了微信小程序使用echarts/數(shù)據(jù)刷新重新渲染/圖層遮擋問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
動(dòng)態(tài)載入/刪除/更新外部 JavaScript/Css 文件的代碼
動(dòng)態(tài)載入/刪除/更新外部 JavaScript/Css 文件的代碼2010-07-07
用XMLDOM和ADODB.Stream實(shí)現(xiàn)base64編碼解碼實(shí)現(xiàn)代碼
用 XMLDOM 和 ADODB.Stream 實(shí)現(xiàn)base64編碼解碼實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-11-11
js實(shí)現(xiàn)七夕表白彈幕效果 jQuery實(shí)現(xiàn)彈幕技術(shù)
這篇文章主要介紹了js實(shí)現(xiàn)七夕表白彈幕效果,jQuery實(shí)現(xiàn)彈幕技術(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Javascript 調(diào)試?yán)?Firebug使用詳解六
有時(shí)候,為了更清楚方便的查看輸出信息,我們可能需要將一些調(diào)試信息進(jìn)行分組輸出,那么可以使用console.group來(lái)對(duì)信息進(jìn)行分組,在組信息輸出完成后用console.groupEnd結(jié)束分組。2009-07-07

