.. translation finished: 30th July 2011
id: chobie
hash: c12fa7ea5bdf82b809ea0eba55fdb19a2aa67637
YUI Compressorを使ってJavascriptやStylesheetのサイズを圧縮するには?
===================================================================
Yahoo! が提供する`YUI Compressor`_ というとびきり優れたツールを使う事でJavascriptやStyleSheetのサイズを圧縮することが可能となります。
彼らはこれで素早くAssetデータを転送しているのです。Symfony2に付属しているAsseticを使うことでこのツールを簡単に扱うことが出来ます。
YUI CompressorのJARファイルのダウンロード
-----------------------------------------
YUI CompressorはJARファイルとして配布されています。 Yahooのサイトからから `Download the JAR`_ して
``app/Resources/java/yuicompressor.jar`` に配置しましょう。
YUI Filterの設定
----------------
それではJavascriptのサイズを小さくするためのフィルタと、Stylesheetのサイズを
小さくするための二つのAsseticフィルタを設定しましょう。
.. configuration-block::
.. code-block:: yaml
# app/config/config.yml
assetic:
filters:
yui_css:
jar: "%kernel.root_dir%/Resources/java/yuicompressor.jar"
yui_js:
jar: "%kernel.root_dir%/Resources/java/yuicompressor.jar"
.. code-block:: xml
.. code-block:: php
// app/config/config.php
$container->loadFromExtension('assetic', array(
'filters' => array(
'yui_css' => array(
'jar' => '%kernel.root_dir%/Resources/java/yuicompressor.jar',
),
'yui_js' => array(
'jar' => '%kernel.root_dir%/Resources/java/yuicompressor.jar',
),
),
));
これで新しく追加した二つのAsseticフィルタに``yui_css`` と ``yui_js`` という名称で
アプリケーションでフィルタを適用できるようになりました。
これら二つの設定はそれぞれYUI CompressorでJavascriptとStylesheetのデータサイズを圧縮する際に使われます。
実際にAseetsファイルのデータを圧縮する
--------------------------------------
YUI Compressorの設定は終わりました。しかし、これらのフィルタを適用しない限り実際には何の処理も行われません。
あなたのAssetsファイルがViewレイヤにあるならば下記のサンプルのようににテンプレートファイルに記述することでフィルタが適用されます。
.. configuration-block::
.. code-block:: html+jinja
{% javascripts '@AcmeFooBundle/Resources/public/js/*' filter='yui_js' %}
{% endjavascripts %}
.. code-block:: html+php
javascripts(
array('@AcmeFooBundle/Resources/public/js/*'),
array('yui_js')) as $url): ?>
.. note::
上述の例はあなたが既に ``AcmeFooBundle`` というBundleを設定しており、Javascript
ファイルが ``Resources/public/js`` に保存されていると仮定しています。
しかし、これは特別重要な事ではありません。Javascirptファイルはどこからでも参照することが出来るからです。
assetタグに追記された ``yui_js`` というフィルタをつけることで、サイズを削減したJavascriptが転送されるようになり、
これでAssetファイルの転送時間が短くなります。これはstylesheetに関しても同様です。
.. configuration-block::
.. code-block:: html+jinja
{% stylesheets '@AcmeFooBundle/Resources/public/css/*' filter='yui_css' %}
{% endstylesheets %}
.. code-block:: html+php
stylesheets(
array('@AcmeFooBundle/Resources/public/css/*'),
array('yui_css')) as $url): ?>
デバッグ時にサイズ圧縮機能を無効にする
--------------------------------------
サイズ圧縮されたJavascriptやStylesheetは非常に読みづらく、言うまでもなくデバッグ時には無効にしたいと思います。
Asseticはデバッグモード時にフィルタを無効にできる機能も備えています。デバッグ時にフィルタを無効
にするにはテンプレートに記述するフィルタ名の前に ``?`` をつけます。これはAsseticにデバッグモードが
無効な時にだけフィルタを適用するように指示します。
.. configuration-block::
.. code-block:: html+jinja
{% javascripts '@AcmeFooBundle/Resources/public/js/*' filter='?yui_js' %}
{% endjavascripts %}
.. code-block:: html+php
javascripts(
array('@AcmeFooBundle/Resources/public/js/*'),
array('?yui_js')) as $url): ?>
.. _`YUI Compressor`: http://developer.yahoo.com/yui/compressor/
.. _`Download the JAR`: http://yuilibrary.com/downloads/#yuicompressor