Feed on
Posts
Comments
Email訂閱

有感於旅聯網和冬烘居以及相簿等網站執行效率太慢,終於下定決心想要改善一番。一開始只想要將JS與CSS檔壓縮,後來參考更多網站文章,乾脆做一個大調整,主要是參考這篇文章:http://www.bnw.com.tw/conference/viewtopic.php?f=30&t=3328&start=0&sid=a738bad93b79e6e6bd325c3e6119fe9b。
步驟是:

  1. 安裝網站效能回報工具-YSlow
  2. 壓縮網頁輸出內容,使用apache 內建的gzip即可,這一部分很久之前就已經實作了。在php 的程式中最前面加上 ob_start(“ob_gzhandler”)。注意:在gallery2.2版中的main.php 加上 ob_start(“ob_gzhandler”) ,會導致google chrome瀏覽器瀏覽影像時,影像出現然後過一會又自動消失,不知何故。
  3. 以gzip壓縮javascript與CSS,由於godaddy的限制,無法使用mod_deflate來處理,網路上有一些拐個彎的作法,請參考這一篇How to Compress and Cache with Godaddy hosting,果然有效,花了好幾天亂try,不如直接上網問google大神。注意:在.htaccess中指定compress-js.php等的位置時,應使用相對網站根目錄的位址較好,否則可能會倒IE或Firefox無法正確讀取。而在gallery的.htaccess更需特別注意,這是因為gallery獨立安裝於godaddy的root的gallery之下,所以gallery的檔案的url皆為http://www.donghong.info/gallery/…,而非http://gallery.dong.info/…(但在google chrome似乎又正常)。譬如:
    RewriteRule ^(.*\.(js))$ /gallery/compress-js.php?file=$1
  4. 再來是將過多的.js檔合併,意圖是減少http request,不過效能似乎還好。網站上也找到一個拐個彎的作法,不過該文章連結似乎有時候會有問題,可以用google查詢然後看他的庫存檔。Speed up Apache – how I went from F to A in YSlow

真正實作第4步驟時有些問題,而且會跟第3步驟parsing JS時產生衝突,因此我作了一些調整:

  1. 在 .htaccess中調整 regular expression,使得結尾判斷有 ” | ”
    RewriteRule ^(.*)\|$ /mergecompress.php?__args__=$1 [L,QSA]
  2. 在主程式中用 <script type=”text/javascript” src=”1.js|2.js|”>末端再自行加上 | 字元用來做區隔</script>
  3. 在mergecompress.php中的程式碼如下:

    <?
    ob_start('ob_gzhandler');
    ini_set('include_path', '.');
    header('content-type: text/javascript; charset: UTF-8');
    header ("expires: " . gmdate ("D, d M Y H:i:s", time() + 302400) . " GMT");
    header("Cache-Control: max-age=302400, private, must-revalidate", true);
    if(!empty($_GET['__args__']))
    {
    $files = (array)explode('|',$_GET['__args__']);
    foreach($files as $fname)
    {
    if(file_exists(dirname($_SERVER['SCRIPT_FILENAME']) .'/'     .$fname) && strstr($fname, '..') === false)
    echo file_get_contents($fname);
    }
    }
    ?>

 

留言區