Como Minificar JavaScripts e Folhas de Estilo com o YUI Compressor
==================================================================
A Yahoo! oferece um excelente utilitário, chamado `YUI Compressor`_, para minificar
JavaScripts e folhas de estilo, assim, eles são carregados mais rapidamente.
Graças ao Assetic, você pode tirar proveito desta ferramenta de forma muito fácil.
Baixe o JAR do YUI Compressor
-----------------------------
O YUI Compressor é escrito em Java e distribuído como um JAR. `Faça o download do JAR`_
no site da Yahoo! e salve-o em ``app/Resources/java/yuicompressor.jar``.
Configure os Filtros do YUI
---------------------------
Agora você precisa configurar dois filtros Assetic em sua aplicação, um para
minificar os JavaScripts com o YUI Compressor e um para minificar as
folhas de estilo:
.. 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',
),
),
));
Você agora tem acesso a dois novos filtros Assetic em sua aplicação:
``yui_css`` e ``yui_js``. Eles utilizarão o YUI Compressor para minificar
as folhas de estilo e JavaScripts, respectivamente.
Minifique os seus Assets
------------------------
Você agora tem o YUI Compressor configurado, mas nada vai acontecer até
aplicar um desses filtros para um asset. Uma vez que os seus assets fazem
parte da camada de visão, este trabalho é feito em seus templates:
.. 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::
O exemplo acima assume que você tem um bundle chamado ``AcmeFooBundle``
e os seus arquivos JavaScript estão no diretório``Resources/public/js`` sob
o seu bundle. Entretante, isso não é importante - você pode incluir os seus arquivos
JavaScript, não importa onde eles estiverem.
Com a adição do filtro ``yui_js`` para as tags asset acima, você deve agora ver
os JavaScripts minificados sendo carregados muito mais rápido. O mesmo processo
pode ser repetido para minificar as suas folhas de estilo.
.. 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): ?>
Desative a minificação no modo de depuração
-------------------------------------------
Os JavaScripts e as folhas de estilo minificados são muito difíceis de ler, e muito menos
depurar. Devido a isso, o Assetic permite desabilitar um certo filtro quando a sua
aplicação está no modo de depuração. Você pode fazer isso prefixando o nome do filtro
em seu template com um ponto de interrogação: ``?``. Isto diz ao Assetic para apenas
aplicar esse filtro quando o modo de depuração está desligado.
.. 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/
.. _`Faça o download do JAR`: http://yuilibrary.com/downloads/#yuicompressor