在 d24d0b7187b6568d76972d61ce91eea698503797 之后,使用 ViewComponents 的 Web UI 分配量大幅增加
require "bundler/inline"
gemfile(true) do source "https://rubygems.org/"
gem "view_component"
gem "rails", GitHub: "rails/rails", ref: "343fe92bd24c9660c90e5107ea34c72915bda865"
D, [2026-06-19T07:23:50.690103 #71282] DEBUG -- : Rendering /var/folders/b1/zsr0hbcn19xcqy26gq0blks80000gn/T/d20260619-71282-3r0n44/index.html.erb
I, [2026-06-19T07:23:50.692031 #71282] INFO -- : Rendered /var/folders/b1/zsr0hbcn19xcqy26gq0blks80000gn/T/d20260619-71282-3r0n44/index.html.erb (Duration: 1.7ms | GC: 0.0ms)
gem "rails", GitHub: "rails/rails", ref: "f26f56ed4e19dea9119fcfe067eff36b7f0b5dc5"
D, [2026-06-19T07:24:41.672509 #71907] DEBUG -- : Rendering /var/folders/b1/zsr0hbcn19xcqy26gq0blks80000gn/T/d20260619-71907-9ozdat/index.html.erb
D, [2026-06-19T07:24:41.677087 #71907] DEBUG -- : Rendering MyComponent
I, [2026-06-19T07:24:41.677900 #71907] INFO -- : Rendered MyComponent (Duration: 0.7ms | GC: 0.0ms)
D, [2026-06-19T07:24:41.677961 #71907] DEBUG -- : Rendering MyComponent
I, [2026-06-19T07:24:41.678011 #71907] INFO -- : Rendered MyComponent (Duration: 0.0ms | GC: 0.0ms)
D, [2026-06-19T07:24:41.678056 #71907] DEBUG -- : Rendering MyComponent
I, [2026-06-19T07:24:41.678097 #71907] INFO -- : Rendered MyComponent (Duration: 0.0ms | GC: 0.0ms)
I, [2026-06-19T07:24:41.678130 #71907] INFO -- : Rendered /var/folders/b1/zsr0hbcn19xcqy26gq0blks80000gn/T/d20260619-71907-9ozdat/index.html.erb (Duration: 5.6ms | GC: 0.0ms)
Note the extra logging for rendering MyComponent. (Those logs aren't enabled
in production, but I think we're still subscribed to render_template.action_view
via the structured event subscriber and our view component usage is heavy
enough that it's causing a large increase in allocations on some pages.)
end require "action_controller/railtie" require "action_view/railtie" require "view_component" require "minitest/autorun"
class TestApp < Rails::Application config.load_defaults Rails::VERSION::STRING.to_f config.eager_load = false config.logger = Logger.new($stdout) config.secret_key_base = "secret_key_base" end Rails.application.initialize! class MyComponent < ViewComponent::Base erb_template <<~ERB
HELLO WORLD<\p> ERB end class BugTest < ActionView::TestCase setup do @view_path = Pathname.new(Dir.mktmpdir) ActionController::Base.prepend_view_path @view_path end teardown do @view_path.rmtree end def test_action_view_render_template view_file "index.html.erb", <<~ERB <%= …
内容来源: rails/rails