CakePHP:处理资产缩小/合并的最佳方式?

时间:2012-05-26 00:12:00

标签: cakephp minify assets

我知道缩小资产很好,因为这样可以减少文件大小,从而减少页面加载所需的时间。我也知道组合资产是好事,因为这样做会减少HTTP请求的数量,这再次减少了页面加载所需的时间。这很重要,因为 仍然是拨号上线的人,而移动设备通常没有快速连接。

我正在努力解决的问题是如何轻松添加资产缩小并将其合并到我的工作流程中。我使用CakePHP在本地开发,我使用Git进行版本控制。什么时候上线,我进入托管实时网站的服务器并合并到最新的提交中。

以下是我将如何推广自己的解决方案(仅考虑缩小并未经过测试!):

1。)我的开发环境的“app / Config / core.php”文件的“调试”级别总是设置为大于 0的值,生产环境总是 0。

2.。)在文件系统上,所有CSS和JavaScript都将存储在外部文件中,如下所示:

  • 应用程序/根目录/ CSS /使用现场-wide.css
  • 应用程序/根目录/ CSS /使用上-A-几个-pages.css
  • 应用程序/根目录/ CSS /使用对单-page.css
  • 应用程序/根目录/ JS /使用现场-wide.js
  • 应用程序/根目录/ JS /使用上-A-几个-pages.js
  • 应用程序/根目录/ JS /使用对单-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,以便在提交时创建缩小的资产。

使用此设置,我将处理开发中的未受限制的资产和生产中的缩小资产。问题是,如果我不需要,我不想重新发明轮子。我相信只有在你解决一个既重要又不常见的问题时,才能重新发明轮子。

你们如何处理这个问题?

谢谢!

3 个答案:

答案 0 :(得分:2)

如果您正在使用比Mark Story的AssetCompress插件更简单的东西,请查看以下内容: https://github.com/joshuapaling/CakePHP-Combinator-Plugin

它将组合和缩小JS和CSS文件,当调试模式为0时,您可以轻松地将其组合/缩小(在GitHub上的.markdown中有一个示例)。它使用包含的JS / CSS文件的修改日期来决定何时需要创建一个新的缓存文件。

它不像Mark Story的插件那么全功能,但它很简单,完成工作,而且只需要10或15分钟即可完成设置。

答案 1 :(得分:1)

我最近偶然发现了这种情况,我尝试了(现已弃用)Combinator插件,该插件使用的jsmin不太可靠。那么我尝试了Mark Story的插件,这是一种复杂的方式,当文件发生变化时,它甚至不会自动进行构建,每次你想要创建合并和缩小的文件时,你都必须做一些蛋糕烘焙。

因此我编写了自己的简单助手,你可以在这里查看:https://github.com/Highstrike/cakephp-compressor。所有内容都在自述文件中进行了解释,它非常易于使用,利用谷歌闭包进行js缩小。它还处理HTML缩小。

它比maurymmarques的解决方案更容易,因为它只是一个辅助文件,不需要控制器或配置。

我希望它会帮助别人。

答案 2 :(得分:0)

您还可以查看此插件https://github.com/maurymmarques/minify-cakephp 它非常易于安装和配置。