2

我知道缩小资产是件好事,因为这样做可以减少文件大小,从而减少页面加载所需的时间。我也知道合并资产是件好事,因为这样做可以减少 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 以在提交时创建缩小资产。

使用此设置,我将使用开发中的未缩小资产和生产中的缩小资产。问题是,如果我不需要,我不想重新发明轮子。我认为,只有在解决一个既重要又不常见的问题时,才应该重新发明轮子。

大家都是怎么处理的?

谢谢!

4

3 回答 3

2

如果您想要比 Mark Story 的 AssetCompress 插件更简单的东西,请查看: https ://github.com/joshuapaling/CakePHP-Combinator-Plugin

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

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

于 2012-06-24T01:17:14.617 回答
1

我最近自己偶然发现了这种情况,并且我尝试了(现已弃用)Combinator 插件,它使用不太可靠的 jsmin。因此,我尝试了 Mark Story 的插件,该插件非常复杂,它甚至不会在文件更改时自动进行构建,每次您希望创建组合和缩小的文件时都必须做一些蛋糕烘焙。

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

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

我希望它会帮助某人。

于 2015-05-28T15:55:18.727 回答
0

你也可以查看这个插件https://github.com/maurymmarques/minify-cakephp 它很容易安装和配置。

于 2014-05-05T17:59:59.743 回答