分析开发中的缓慢资产

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 文件中都是 @imported)。 你试过 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/…

以上是关于分析开发中的缓慢资产的主要内容,如果未能解决你的问题,请参考以下文章

HyperLeger Fabric开发——资产交易平台实例

专业人士解释杜邦分析法

数字资产量化交易软件_数字资产交易系统开发

资产监测设备中HCL190FLAS擦写问题分析——BOOT

数字资产交易平台量化交易软件开发

数字资产交易所量化交易系统开发