如何使Symfony2直接加载CSS,JS文件而不是通过PHP?

2022-08-30 23:00:41

老问题,请参阅下面的更新版本

我的开发环境不是最快的。我每个PHP请求大约需要500ms。Symfony2 资源文件开始成为一个问题,因为每个资源文件都是通过 Symfony 的内部控制器请求的:

http://localhost/myproj/app_dev.php/js/bb8690a_part_4_myJavaScriptFile_2.js

可以看出,这些文件是通过Symfony框架加载的,而不是直接加载的。由于我开始加载超过20个文件,因此将其与500ms相乘会使页面加载速度非常慢。我想直接加载文件,但我不确定如何做到这一点。

这是以下部分的一部分:config.yml

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    # java: /usr/bin/java
    filters:
        cssrewrite: ~

我以为设置会这样做,但没有。use_controllerfalse

有没有办法直接处理这些资源的加载?

更新:

这是它现在尝试使用的 URL:

http://localhost/myproj/_controller/js/bb8690a_part_4_myJavaScriptFile_2.js

我已设置为用于开发和常规配置。如何删除 URL 的这一部分?use_controllerfalse_controller

编辑:如果我清除缓存,运行并拥有,然后在重新加载时,我得到.我无法解决这个问题,除非我暂时启用一个页面加载。之后,我禁用它并重新加载,现在它从包含的无效URL请求。assetic:dumpuse_controllerfalseCannot load resource "."use_controller_controller

它似乎也适用于 prod,但在 Dev. Strange 中不起作用。

模板代码:

{% stylesheets filter="cssrewrite"
            'bundles/outotecofil/css/reset.css'
            'bundles/outotecofil/css/*'

            output='css/dist/dist.css'
        %}
        <link rel="stylesheet" href="{{ asset_url }}" />
        {% endstylesheets %}

        {% javascripts
            '@OutotecCommonBundle/Resources/public/js/jquery-1.6.2.min.js'
            '@OutotecCommonBundle/Resources/public/js/jquery-ui-1.8.16.custom.min.js'
            '@OutotecCommonBundle/Resources/public/js/chosen.jquery.min.js'
            '@OutotecCommonBundle/Resources/public/js/widget/*'

            '@OutotecOFILBundle/Resources/public/js/OFILDependencyManager.js'
            '@OutotecOFILBundle/Resources/public/js/widget/*'
            '@OutotecOFILBundle/Resources/public/js/plant-scope.js'

            output='js/dist/dist.js'
        %}
        <script src="{{ asset_url }}"></script>
        {% endjavascripts %}

非常清楚:没有app_dev.php(即在生产模式下),它可以工作。只有在开发中,它不会并抛出此“无法加载资源”.“错误,除非我首先为一个请求启用,之后我可以禁用它并重新加载,尽管URL将包含在其路径中。use_controller_controller/


答案 1

当use_controller为 false 时,请尝试在 routing_dev.yml 中删除这部分代码:

_assetic:
    resource: .
    type:     assetic

答案 2

Symfony文档始终是开始查看的第一个地方:如何使用Assestic进行资产管理

在 prod 环境中,JS 和 CSS 文件分别由一个标记表示。换句话说,您不会看到源代码中包含的每个 JavaScript 文件,而只会看到如下内容:

<script src="/app_dev.php/js/abcd123.js"></script>

此外,该文件实际上并不存在,Symfony也不会动态呈现(因为资产文件位于开发环境中)。这是故意的 - 让Symfony在生产环境中动态生成这些文件太慢了。

相反,每次在 prod 环境中使用应用时(因此,每次部署时),都应运行以下任务:

php app/console assetic:dump --env=prod --no-debug

这将实际生成并写入您需要的每个文件(例如 /js/abcd123.js)。如果更新任何资产,则需要再次运行此命令以重新生成文件。


推荐