【问题标题】:Making Symfony 2 Assetic development comfortable让 Symfony 2 Assetic 开发变得舒适
【发布时间】:2012-05-31 19:21:56
【问题描述】:

我正在寻找使 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 不用于提供静态数据)。

【问题讨论】:

    标签: php symfony assetic


    【解决方案1】:

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

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

    1. 依靠像inotify这样的原生资源观察器来加速观察过程
    2. 修复了添加/删除资源时出现的问题,以便正确转储。

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

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

    问候,
    马特

    【讨论】:

      【解决方案2】:

      对于缓慢,您可以使用--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 自己消耗了整个核心,因为while (true) 在PHP 中。

      【讨论】:

        【解决方案3】:

        在开发中使用这个:

        php app/console assets:install web --symlink
        

        【讨论】:

        • 我用过它,但它仍然缓慢地获取源文件,我想我需要指定/bundles/js/... 的路径才能工作,但是这对于生产来说并不理想。
        • assets:install 和 assets:dump 完全是两个不同的东西
        【解决方案4】:
        1. 为开发和生产配置不同的过滤器。在生产中,你希望你的 JS 和 CSS 被缩小和丑化,但这在开发过程中是浪费时间。

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

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

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

        【讨论】:

        • 奇怪,虽然服务器给出了 304,但在我的情况下它还是发送了有效负载。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 2013-05-15
        • 2015-03-06
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多