cypher256's blog

Pleiades とか作った

サイト高速化のための JavaScript と CSS 圧縮スクリプト

 サイトパフォーマンス計測ツールの PageSpeed や YSlow を使うと、JavaScriptCSS を 1 つにして圧縮しろしろ、怒られ?ます。圧縮するには、Eclipse プラグインGUI ツールなどもありますが、ant のコマンドでお手軽にしたい場合はこんなのでいけます。呼び出している yuicompressor は Yahoo!Java 製圧縮ライブラリーです。

<?xml version="1.0" encoding="UTF-8"?>
<project default="build">

  <target name="build">

    <!-- JavaScript 連結 -->
    <concat destfile="httpdocs/all.js" encoding="UTF-8" fixlastline="yes" eol="lf">
      <filelist dir="httpdocs" files="jquery-1.4.2.js"/>
      <filelist dir="httpdocs/foo" files="bar.js"/>
      <filelist dir="httpdocs" files="common.js"/>
    </concat>

    <!-- JavaScript yui 圧縮、gzip 圧縮 -->
    <antcall target="yui.gzip"><param name="src" value="httpdocs/all.js"/></antcall>

    <!-- CSS 連結 -->
    <concat destfile="httpdocs/all.css" encoding="UTF-8" fixlastline="yes" eol="lf">
      <filelist dir="httpdocs" files="hoge.css"/>
      <filelist dir="httpdocs" files="fuga.css"/>
      <filelist dir="httpdocs" files="common.css"/>
    </concat>

    <!-- CSS yui 圧縮、gzip 圧縮 -->
    <antcall target="yui.gzip"><param name="src" value="httpdocs/all.css"/></antcall>

  </target>

  <target name="yui.gzip">

    <exec executable="java.exe" dir=".">
      <arg value="-jar"/>
      <arg value="yuicompressor-2.4.2.jar"/>
      <arg value="--charset"/>
      <arg value="UTF-8"/>
      <arg value="-o"/>
      <arg value="${src}.min"/>
      <arg value="${src}"/>
    </exec>

    <gzip src="${src}.min" destfile="${src}.gz" />
    <delete file="${src}.min" />

  </target>

</project>

 上記で、all.js.gz と all.css.gz が出来上がります。で、HTML ソースには all.js や all.css とそのまま書きたいので、.htaccess に下記みたいなのを書いとけば、gz 付きのファイルを見に行ってくれます。

#--------------------------------------
# GZIP Compression
#--------------------------------------
RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME} !\.gz$
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule .+ %{REQUEST_URI}.gz [L]

<FilesMatch "\.html\.gz$">
    ForceType text/html
    AddEncoding x-gzip .gz
</FilesMatch>

<FilesMatch "\.js\.gz$">
    ForceType application/x-javascript
    AddEncoding x-gzip .gz
</FilesMatch>

<FilesMatch "\.css\.gz$">
    ForceType text/css
    AddEncoding x-gzip .gz
</FilesMatch>

で、実際のところ、パフォーマンスアップに強力に効くのはキャッシュなので、以下のような設定を .htaccess に追加しておくと吉です。

#--------------------------------------
# Expires Settings
#--------------------------------------
ExpiresActive on
ExpiresDefault "access plus 1 month"

#--------------------------------------
# ETags None
#--------------------------------------
FileETag None

 JavaScript などの内容を変更してリリースするときは、キャッシュを見てしまわないように
src="all.js?v20100426"
のようにバージョンを付けると、ブラウザが再取得してくれます。