我知道缩小资产是件好事,因为这样做可以减少文件大小,从而减少页面加载所需的时间。我也知道合并资产是件好事,因为这样做可以减少 HTTP 请求的数量,这又一次减少了页面加载所需的时间。这很重要,因为仍然有人在拨号,而移动设备通常没有快速连接。
我正在努力解决的问题是如何轻松地将资产缩小并合并到我的工作流程中。我使用 CakePHP 进行本地开发,并使用 Git 进行版本控制。当需要上线时,我会通过 ssh 进入托管实时站点的服务器并合并到最新的提交中。
以下是我将如何推出自己的解决方案(仅考虑缩小且未经测试!):
1.) 我的开发环境的“app/Config/core.php”文件将始终将其“调试”级别设置为大于0 的值,而生产环境的将始终为0。
2.) 在文件系统上,所有 CSS 和 JavaScript 都将存储在外部文件中,如下所示:
- 应用程序/webroot/css/used-site-wide.css
- 应用程序/webroot/css/used-on-a-few-pages.css
- app/webroot/css/used-on-one-page.css
- 应用程序/webroot/js/used-site-wide.js
- 应用程序/webroot/js/used-on-a-few-pages.js
- app/webroot/js/used-on-one-page.js
3.)而不是echo $this->Html->script(array('used-on-a-few-pages', 'used-on-one-page'), array('inline' => false));
在视图文件中使用,我会使用这个:
Configure::write('external_js', array('used-on-a-few-pages'));
Configure::write('inline_js', array('used-on-one-page'));
4.)而不是echo $this->fetch('script');
在布局文件中使用,我会使用这个:
if (Configure::read('external_js') !== null) {
$external_js = Configure::read('external_js');
if (Configure::read('debug') == 0) {
foreach ($external_js as &$external_js_filename) {
$external_js_filename .= '-min';
}
}
echo $this->Html->script($external_js);
}
if (Configure::read('inline_js') !== null) {
$inline_js = Configure::read('inline_js');
if (Configure::read('debug') == 0) {
foreach ($inline_js as &$inline_js_filename) {
$inline_js_filename .= '-min';
}
}
echo "\n<script type=\"text/javascript\">\n\t/* <![CDATA[ */";
foreach ($inline_js as $inline_js_filename) {
echo file_get_contents(JS . Configure::read('inline_js') . '.js');
}
echo "\n\t/* ]]> */\n</script>";
}
5.) 最后,我会设置 Git 以在提交时创建缩小资产。
使用此设置,我将使用开发中的未缩小资产和生产中的缩小资产。问题是,如果我不需要,我不想重新发明轮子。我认为,只有在解决一个既重要又不常见的问题时,才应该重新发明轮子。
大家都是怎么处理的?
谢谢!