Minify
在Google Code上有一個PHP的開源項目叫Minify,它可以合併、精簡、Gzip壓縮和緩存JavaScript和CSS文件。其文件合併功能就非常類似Combo Handler,只不過URL的語法稍微有點不同。如果Yahoo! CDN安裝了Minify,那麼上面Rich Text Editor的代碼用Minify的默認格式來寫就是:
<script src=""></script>
本地使用Minify很簡單,只需要Apache + PHP環境就OK了:
- 安裝好Apache + PHP (Windows、Mac)。
- 下載Minify源碼,解壓,然後把min文件夾複製到指定的根目錄下,比如localhost。這時URL的寫法大概是
http://localhost/min/f=...
- 啓用Apache的Mod Rewrite模塊,然後在min文件夾下新建.htaccess文件,並添加如下Rewrite規則:
<IfModule mod_rewrite.c> RewriteEngine on # You may need RewriteBase on some servers # 如果做了所有的開啓Mod Rewrite的設置依舊無效,請城市嘗試啓用下面這句 #RewriteBase /min # rewrite URLs like "/min/f=..." to "/min/?f=..." RewriteRule ^([bfg]=.*) index.php?$1 [L,NE] </IfModule>
如果不啓用Mod Rewrite功能,則Minify的URL會類似http://localhost/min/index.php?f=…,這對客戶端和中間服務器的緩存不利,而啓用了Mod Rewrite之後的URL類似http://localhost/min/f=…,不僅解決前面問題且更短。
- 配置Minify,即編輯min/config.php文件
$min_enableBuilder = true; //本地使用時可以通過http://localhost/min/builder/來進行配置,外部使用時請設置爲false //$min_cachePath = 'c:WINDOWSTemp'; //$min_cachePath = '/tmp'; //$min_cachePath = preg_replace('/^d+;/', '', session_save_path()); //選擇其一,去掉註釋設置臨時緩存目錄,這樣可以減少程序運算提高性能 $min_serveOptions['maxAge'] = 1800; //設置瀏覽器緩存的時間,爲了提升性能建議這個時間設置儘可能的長,比如315360000 //如果需要在不改變URL的情況下更新靜態文件,可以採用類似時間戳的方式, //如http://localhost/min/f=example/example.css&20100601.css //建議靜態文件採用版本號管理,每次修改都需要升級版本號,這樣就無需時間戳了, //如http://localhost/min/f=example/example_1_0_1.css $min_serveOptions['minApp']['maxFiles'] = 10; //參數f獲取參數的個數,即合併的文件個數,這個數量完全可以增大,比如50, //當然可能會遇到URL最大值問題,後會有解釋 $min_documentRoot = ''; //$min_documentRoot = substr(__FILE__, 0, strlen(__FILE__) - 15); //$min_documentRoot = $_SERVER['SUBDOMAIN_DOCUMENT_ROOT']; //當$min_documentRoot爲空時,其值就是$_SERVER['DOCUMENT_ROOT'], //但合併的文件不在$_SERVER['DOCUMENT_ROOT']下,會導致400錯誤, //這個時候可以啓用第2行或第3行
- 使用Minify比如,有兩個JavaScript文件,
http://localhost/example/a.js,http://localhost/example/b.js
,那麼使用Minify合併的URL是http://localhost/min/f=/example/a.js,/example/b.js
,直接把這個URL放到頁面中就可以使用了。
實際上Minify不僅僅實現了合併功能,同時默認在合併的同時還會對文件進行精簡壓縮,如果你在本地本身就對文件進行壓縮了,比如使用YUI Compressor,那麼可以在config.php中進行如下設置取消Minify的壓縮以提升性能:
$min_serveOptions['minifiers']['application/x-javascript'] = '';
$min_serveOptions['minifiers']['text/css'] = '';
如果服務端支持Java,那麼也可以對Minify進行簡單配置而實現利用YUI Compressor壓縮JavaScript和CSS文件。
直接在服務端進行合併和壓縮,這非常的靈活,也極大的減輕了前端開發成果的部署過程,真使事半功倍。更多配置請看Minify CookBook和Wiki
小提示:Minify使用的New BSD License,這就意味着使用者可以幾乎自由的使用該代碼。BSD協議鼓勵代碼共享,但需要尊重代碼作者的著作權。BSD由於允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發佈和銷售,因此是對商業集成很友好的協議。而很多的公司企業在選用開源產品的時候都首選BSD協議,因爲可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發