Class: ReactOnRailsPro::ServerRenderingPool::ProRendering

Inherits:
Object
  • Object
show all
Defined in:
lib/react_on_rails_pro/server_rendering_pool/pro_rendering.rb

Constant Summary collapse

RENDERED_HTML_KEY =
"renderedHtml"

Class Method Summary collapse

Class Method Details

.exec_server_render_js(js_code, render_options) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/react_on_rails_pro/server_rendering_pool/pro_rendering.rb', line 19

def exec_server_render_js(js_code, render_options)
  ::ReactOnRailsPro::Utils.with_trace(render_options.react_component_name) do
    # See https://github.com/shakacode/react_on_rails_pro/issues/119 for why
    # the digest is on the render options.
    # TODO: the request digest should be removed unless prerender caching is used
    set_request_digest_on_render_options(js_code, render_options)

    # Cache non-streaming immediately. For streaming, optionally cache via write-through.
    if cache_enabled_for?(render_options)
      render_with_cache(js_code, render_options)
    else
      render_on_pool(js_code, render_options)
    end
  end
end

.poolObject



9
10
11
12
13
14
15
# File 'lib/react_on_rails_pro/server_rendering_pool/pro_rendering.rb', line 9

def pool
  @pool ||= if ReactOnRailsPro.configuration.node_renderer?
              ::ReactOnRailsPro::ServerRenderingPool::NodeRenderingPool
            else
              ::ReactOnRails::ServerRenderingPool::RubyEmbeddedJavaScript
            end
end

.set_request_digest_on_render_options(js_code, render_options) ⇒ Object

See github.com/shakacode/react_on_rails_pro/issues/119 for why the digest is on the render options.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/react_on_rails_pro/server_rendering_pool/pro_rendering.rb', line 37

def set_request_digest_on_render_options(js_code, render_options)
  return unless render_options.request_digest.blank?

  digest = if render_options.random_dom_id?
             Rails.logger.info do
               "[ReactOnRailsPro] Rendering #{render_options.react_component_name}. " \
                 "Suggest setting `id` on react_component or setting react_on_rails.rb initializer " \
                 "config.random_dom_id to false for BETTER performance."
             end
             Digest::MD5.hexdigest(without_random_values(js_code))
           else
             Digest::MD5.hexdigest(js_code)
           end
  render_options.request_digest = digest
end