我正在寻找使Symfony 2 Assetic 1.0.2开发更容易的方法。我使用Assetic来转储/发布我的资产。
目前我一直在后台运行此命令:
php app/console assetic:dump --watch
它有很大帮助,我对JS或CSS文件所做的每一个更改都会自动转储到浏览器提取资源的公共目录。
但是,我对此有疑问:
如果我添加一个新的CSS / JS文件,由于某种原因它不会被转储。我需要停下手表,清除缓存并再次启动手表。
有点慢,不断吃掉5%-20%的CPU时间。
使用Assetic可以替代开发吗?我已经尝试过通过控制器(use_controller: true
for Assetic)提供资源的方法,但它甚至更慢(因为我们面对的事实是,PHP不是用于提供静态数据)。
答案 0 :(得分:4)
对我而言,这是我能找到Assetic
开发的最快方式。我试过,我试图找到一个更好的工作流程来提高资产生成速度,但没有找到。
在Symfony2
组件的ResourceWatcher
的主分支中有一些工作可能有助于解决此问题:
inotify
您可以在此PR中观看该组件的进度。
希望有人能提供一些技巧来加速使用资产或完全不同的工作流程进行开发。
问候,
马特
答案 1 :(得分:3)
如果速度较慢,您可以使用--no-debug
和--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
会消耗整个核心,因为PHP中的while (true)
。
答案 2 :(得分:1)
İndeveloppement使用这个:
php app/console assets:install web --symlink
答案 3 :(得分:1)
为开发和生产配置不同的过滤器。在制作中,你希望你的JS和CSS缩小和丑化,但这在开发过程中浪费时间。
确保assetic.debug
为false。这将确保连接JS和CSS文件,以便可以在每个HTTP请求中获取所有JS和CSS。
如果您正在使用控制器(assetic.use_controller
为真)并且您打开了浏览器的开发人员工具箱,请确保取消选中“禁用缓存”复选框(在Chrome中) ,复选框位于“网络”窗格中;在Firefox中,它位于“设置”窗格中)。这将允许您的浏览器发送If-Modified-Since请求 - 如果服务器上的文件没有更改,服务器将返回304 Not modified
而不重新编译您的资产,浏览器将使用浏览器缓存中的最新版本
请勿使用Assetic从CDN加载文件。将文件下载到您的服务器(手动,使用Bower或其他任何方式),或通过将<script src=…>
或<link rel=stylesheet href=…>
直接添加到HTML模板中从CDN加载文件。