我有一个用 Symfony 2 编写的单页 webapp,其中所有的 css 和 javascript 资产都位于 web/static/all.js 和 web/static/all.js 中。这些以标准方式从 intex.html.twig 模板链接:
{% javascripts output='static/all.js' filter="?closure"
'@MyBundle/Resources/assets/vendor/jquery/jquery.js'
'@MyBundle/Resources/assets/...'
'@MyBundle/Resources/assets/...'
%}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% stylesheets output='staic/all.css' filter="?yui_css" combine=true
'@MyBundle/Resources/assets/css/reset.css'
'@MyBundle/Resources/assets/css/...'
'@MyBundle/Resources/assets/css/...'
%}
<link rel="stylesheet" href="{{ asset_url }}" type="text/css" media="all" />
{% endstylesheets %}
这已经很酷了,因为浏览器在第一次启动时只需要执行 3 个请求,之后执行 1 个或 0 个请求(all.css 和 all.js 使用 .htaccess 缓存)。
但我想更进一步,将所有 css 和 js 转储到 index.html 中,类似于谷歌在其主页上所做的。这将在第一次运行期间只产生一个 http 请求,这将稍微加快应用程序的速度。最好有一个我传递给模板的标志或保留在 twig 全局变量中,这样可以按需在两种模式之间切换。
{%if dumpAssetsIntoTemplate %}
{# all js and css here #}
{% else %}
{# asset urls #}
{% endif %}
怎样才能以最小的痛苦做到这一点?