旧问题,请参阅更新版本
我的开发环境不是最快的。每个PHP请求大约需要500毫秒。它开始成为Symfony2资源文件的问题,因为每个资源文件都是通过Symfony的内部控制器请求的:
http://localhost/myproj/app_dev.php/js/bb8690a_part_4_myJavaScriptFile_2.js
可以看出,文件是通过Symfony框架加载的,而不是直接加载的。由于我开始加载超过20个文件,因此将其与500毫秒相乘会使页面加载速度变慢。我想直接加载文件,但我不知道该怎么做。
这是config.yml
:
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: false
# java: /usr/bin/java
filters:
cssrewrite: ~
我认为将use_controller
设置为false
可以做到,但不是。
有没有办法直接处理这些资源的加载?
更新
这是它现在尝试使用的网址:
http://localhost/myproj/_controller/js/bb8690a_part_4_myJavaScriptFile_2.js
对于开发和一般配置,我已将use_controller
设置为false
。如何摆脱URL的_controller
部分?
编辑:如果我清除缓存,请运行assetic:dump
并将use_controller
作为false
,然后重新加载时我会Cannot load resource "."
。除非我暂时为一页加载启用use_controller
,否则我无法解决该问题。之后,我禁用它并重新加载,现在它从包含_controller
的无效网址发出请求。
它似乎也适用于刺激,但不适用于开发。奇怪。
模板代码:
{% 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(即在prod模式下),可以。仅在dev中它不会并且抛出“无法加载资源”。“”除非我首先为一个请求启用use_controller
,否则我可以禁用它并重新加载,但URL将包含_controller/
在他们的路上。
答案 0 :(得分:21)
当use_controller为false时,尝试删除routing_dev.yml中的这部分代码:
_assetic:
resource: .
type: assetic
答案 1 :(得分:6)
Symfony文档始终是第一个开始查看的地方:How to Use Assetic for Asset Management
在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)。如果您更新了任何资产,则需要再次运行此资产以重新生成文件。
答案 2 :(得分:6)
如果您使用assetic:dump
,则必须cache:clear -e dev
“...如果您在生产缓存上运行缓存:清除,它会在启用调试模式的情况下预热缓存。如果您之后尝试转储资产,可能会发生奇怪的事情。”
我在这里找到了:http://sftuts.com/using-assetic-in-symfony2-for-css-compression(4。段)
答案 3 :(得分:6)
修改 dev 配置以避免使用控制器。
# app/config/config_dev.yml
assetic:
use_controller: false
删除routing_dev.yml中的路由以避免副作用
# app/config/routing_dev.yml
_assetic:
resource: .
type: assetic
每次修改时自动转储css / less文件。
php app/console assetic:dump --watch
答案 4 :(得分:1)
我遇到同样的问题,工作配置是: 从routing_dev.yml注释掉:
_assetic:
resource: .
type: assetic
将use_controller设置为false。 执行此操作后,我可以使用assetic:dump并查看工作页面。