9

我正在寻找使 Symfony 2 Assetic 1.0.2 开发更容易的方法。我使用 Assetic 倾销/发布我的资产。

目前我一直在后台运行这个命令:

php app/console assetic:dump --watch

它有很大帮助,我对 JS 或 CSS 文件所做的每一次更改都会自动转储到浏览器从中获取资源的公共目录中。

但是,我对此有疑问:

  1. 如果我添加一个新的 CSS/JS 文件,由于某种原因它不会被转储。我需要停止手表,清除缓存并再次启动手表。

  2. 它有点慢,不断消耗 5%-20% 的 CPU 时间。

与 Assetic 一起开发是否有替代方案?我已经尝试过通过控制器(use_controller: true用于 Assetic)提供资源的方法,但它甚至更慢(因为让我们面对一个事实,PHP 不用于提供静态数据)。

4

4 回答 4

4

对我来说,这是Assetic我能找到的最快的开发方式。我尝试并尝试找到更好的工作流程来提高资产生成速度,但没有找到。

Symfony2在组件的主分支中有一些工作ResourceWatcher可能有助于解决这个问题:

  1. 通过依赖原生资源观察器来加速观察过程inotify
  2. 修复添加/删除资源时的问题,以便正确转储它们。

您可以在此PR中查看组件的进度。

希望有人能提供一些技巧来加快使用资产或完全不同的工作流程的开发。

问候,
马特

于 2012-05-25T13:17:51.287 回答
3

对于缓慢,您可以使用--no-debugand运行--forks=4。通过 composer 安装 Spork 依赖,然后运行app/console assetic:dump --no-debug --forks=4​​.

如果您有更多核心,请添加更多分叉。如果您想保持核心空闲,请降低该数字。不知道为什么它没有快 4 倍——毫无疑问,将不同的资产作业分配给不同的内核并不是很聪明——但这是一个开始。

我只是简单地尝试了一些事情:

time app/console assetic:dump

real    1m53.511s
user    0m52.874s
sys     0m4.989s

time app/console assetic:dump --forks=4

real    1m14.272s
user    1m12.716s
sys     0m5.752s

time app/console assetic:dump --forks=4 --no-debug

real    1m9.569s
user    1m6.948s
sys     0m5.844s

我不确定这是否会有所帮助--watch--watch因为它本身会消耗整个核心,因为while (true)在 PHP 中。

于 2015-02-04T16:41:00.220 回答
1

在开发中使用这个:

php app/console assets:install web --symlink
于 2012-08-22T10:53:59.233 回答
1
  1. 为开发和生产配置不同的过滤器。在生产中,你希望你的 JS 和 CSS 被缩小和丑化,但这在开发过程中是浪费时间。

  2. 确保这assetic.debug是错误的。这将确保您的 JS 和 CSS 文件连接在一起,以便可以在一个 HTTP 请求中分别获取所有 JS 和 CSS。

  3. 如果您正在使用控制器(assetic.use_controller为 true)并且您打开了浏览器的开发人员工具箱,请确保取消选中“禁用缓存”复选框(在 Chrome 中,该复选框位于网络窗格中;在 Firefox 中,它位于设置窗格中) . 这将允许您的浏览器发送 If-Modified-Since 请求——如果服务器上的文件没有更改,服务器将返回304 Not modified而不重新编译您的资产,并且浏览器将使用浏览器缓存中的最新版本。

  4. 不要使用 Assetic 从 CDN 加载文件。将文件下载到您的服务器(手动、使用 Bower 或其他方式),或者通过添加<script src=…&gt;<link rel=stylesheet href=…&gt;直接添加到 HTML 模板从 CDN 加载它们。

于 2016-01-15T17:27:36.993 回答