分析开发中的缓慢资产
Posted
技术标签:
【中文标题】分析开发中的缓慢资产【英文标题】:Profiling slow assets in development 【发布时间】:2014-04-06 17:58:42 【问题描述】:每次我在开发中对我的 SASS 进行更改时,我在加载 application.css
时都会获得 20 秒以上的加载时间。
我已经阅读了一些其他问题,并尝试过:
设置config.assets.debug = false
。
更改导入和要求(我使用 SASS 变量)
使用 Miniprof 及其 firegraph
使用rails-asset_profile
这是我读到的:
Rails Asset Pipeline/Compass/SASS extremely slow to compile in development mode Slow assets compilation in development mode rake assets:precompile taking extremely long to complete我在 Rails 3.2 和现在的 4.2 中都遇到过这个问题。
我快疯了。如何找到这个烂摊子的瓶颈?
我正在寻找一种解决方案,让我能够准确地确定时间花费在哪里,并提出减少编译时间的方法。
【问题讨论】:
你看过浏览器了吗?哪个资产是慢的? @phoet 哦,编译好的 CSS 文件。忘记提了。 一种简单的方法是使用.css.erb
文件和puts 语句。只是为了获得任何参考点
您的文件是如何组织的?如果你使用很多 if SASS @import
语句,如果你有很多 CSS 代码,你会严重减慢速度,因为每次更改 SASS 都必须重新编译 everything,而不仅仅是单个文件。本周早些时候我碰巧遇到了这种情况,使用require
而不是@import
解决了这个问题;我创建了一个单独的 variables.css.sass
文件来存储变量和 mixins(在每个 SASS 文件中都是 @import
ed)。
你试过 sassc-rails 吗?它加快了 x3 的预编译速度。但是,如果您使用指南针,它将无法正常工作
【参考方案1】:
有一个名为 quiet_assets 的 gem 可以禁止记录资产负载。在 rails 3.x 时代,它极大地加速了我的开发模式。让我知道这是否有帮助。
【讨论】:
【参考方案2】:在 Sprockets::Manifest 类中查看find method 中的sprockets
源。您可以将其更改为:
paths.each do |path|
start = Time.now
puts "Start #path"
environment.find_all_linked_assets(path) do |asset|
yield asset
end
puts "Finished: #Time.now - start"
end
因此它将打印编译每个资产所需的所有时间。希望它会有所帮助:)
编辑:这段代码来自master
分支。您可以使用
sprockets
bundle open sprockets
修改后的输出:
$ rake assets:precompile
Start admin.css
I, Ä2015-11-28T10:45:26.986231 #45492Ü INFO -- : Writing /Users/sky/projects/photo_school/public/assets/admin-0e445dcfdc3bd3029943b7d3621b4156c9838eed229c3628f8c558cbb3ce1a59.css
Finished: 10.165564
编辑:稍微更改了代码并更改了链接(昨天将链接放到了错误的分叉上:很着急,仅在赏金关闭前 15 分钟才发现您的问题 :))。我在我的项目中检查了这段代码,它工作正常(项目使用 3.3.3 版的 sprockets)。
【讨论】:
哦,错过了,抱歉。试试这个块:github.com/rails/sprockets/blob/master/lib/sprockets/…以上是关于分析开发中的缓慢资产的主要内容,如果未能解决你的问题,请参考以下文章