## js載入優化
> * 加快JavaScript裝入速度的工具:
> * Lab.js
> * 借助LAB.js(裝入和阻止JavaScript),你就可以并行裝入JavaScript文件,加快總的裝入過程。此外,你還可以為需要裝入的腳本設置某個順序,那樣就能確保依賴關系的完整性。此外,開發者聲稱其網站上的速度提升了2倍。
> * 使用適當的CDN:
>
>
> * 現在許多網頁使用內容分發網絡(CDN)。它可以改進你的緩存機制,因為每個人都可以使用它。它還能為你節省一些帶寬。你很容易使用ping檢測或使用Firebug調試那些服務器,以便搞清可以從哪些方面加快數據的速度。選擇CDN時,要照顧到你網站那些訪客的位置。記得盡可能使用公共存儲庫。
> * 網頁末尾裝入JavaScript:
>
>
> * 也可以在頭部分放置需要裝入的一些JavaScript,但是前提是它以異步方式裝入。
> * 異步裝入跟蹤代碼:
>
>
>
> > 腳本加載與解析會阻塞HTML渲染,可以通過異步加載方式來避免渲染阻塞,步加載的方式很多,比較通用的方法如下。
>
>
>
> ~~~
> 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);
> })();
> ~~~
>
>
>
> 或者
>
>
>
> ~~~
> function loadjs (script_filename){
> var script = document.createElement( 'script' );
> script.setAttribute( 'type' , 'text/javascript' );
> script.setAttribute( 'src' , script_filename);
> script.setAttribute( 'id' , 'script-id' );
>
> scriptElement = document.getElementById( 'script-id' );
> if (scriptElement){
> document.getElementsByTagName( 'head' )[0].removeChild(scriptElement);
> }
> document.getElementsByTagName( 'head' )[0].appendChild(script);
> }
> var script = 'scripts/alert.js' ;
> loadjs(script);
> ~~~
>
>
> * 把你的JavaScript打包成PNG文件
>
>
> * 將JavaScript/css數據打包成PNG文件。之后進行拆包,只要使用畫布API的getImageData()。可以在不縮小數據的情況下,多壓縮35%左右。而且是無損壓縮,對比較龐大的腳本來說,在圖片指向畫布、讀取像素的過程中,你會覺得有“一段”裝入時間。
> * 設置Cache-Control和Expires頭
>
>
>
> 通過Cache-Control和Expires頭可以將腳本文件緩存在客戶端或者代理服務器上,可以減少腳本下載的時間。
>
>
>
> > Expires格式:
> >
> > ~~~
> > Expires = "Expires" ":" HTTP-date
> > Expires: Thu, 01 Dec 1994 16:00:00 GMT
> > Note: if a response includes a Cache-Control field with the max-age directive that directive overrides the
> > Expires field.
> > ~~~
> >
> > Cache-Control格式:
> >
> > ~~~
> > Cache-Control = "Cache-Control" ":" 1#cache-directive
> > Cache-Control: public
> > ~~~
>
>
>
> 具體的標準定義可以參考http1.1中的定義,簡單來說Expires控制過期時間是多久,Cache-Control控制什么地方可以緩存 。