diff --git a/CHANGELOG.md b/CHANGELOG.md index 55b532e8f..9faa640b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,9 @@ Changes since last non-beta release. *Please add entries here for your pull requests that are not yet released.* +### Improved +- Improved performance by removing an unnecessary JS eval from Ruby. [PR 1544](https://github.com/shakacode/react_on_rails/pull/1544) by [wyattades](https://github.com/wyattades). + ### Removed - Removed a requirement for autoloaded pack files to be generated as part of CI or deployment separate from initial Shakapacker bundling. [PR 1545](https://github.com/shakacode/react_on_rails/pull/1545) by [judahmeek](https://github.com/judahmeek). diff --git a/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb b/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb index 034192c81..849777994 100644 --- a/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +++ b/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb @@ -113,9 +113,7 @@ def trace_js_code_used(msg, js_code, file_name = "tmp/server-generated.js", forc def eval_js(js_code, _render_options) @js_context_pool.with do |js_context| - result = js_context.eval(js_code) - js_context.eval("console.history = []") - result + js_context.eval(js_code) end end diff --git a/node_package/src/serverRenderReactComponent.ts b/node_package/src/serverRenderReactComponent.ts index 5477c0d19..b58ea87a5 100644 --- a/node_package/src/serverRenderReactComponent.ts +++ b/node_package/src/serverRenderReactComponent.ts @@ -9,7 +9,7 @@ import buildConsoleReplay from './buildConsoleReplay'; import handleError from './handleError'; import type { RenderParams, RenderResult, RenderingError } from './types/index'; -export default function serverRenderReactComponent(options: RenderParams): null | string | Promise { +function serverRenderReactComponentInternal(options: RenderParams): null | string | Promise { const { name, domNodeId, trace, props, railsContext, renderingReturnsPromises, throwJsErrors } = options; let renderResult: null | string | Promise = null; @@ -153,3 +153,14 @@ as a renderFunction and not a simple React Function Component.`); return JSON.stringify(result); } + +const serverRenderReactComponent: typeof serverRenderReactComponentInternal = (options) => { + try { + return serverRenderReactComponentInternal(options); + } finally { + // Reset console history after each render. + // See `RubyEmbeddedJavaScript.console_polyfill` for initialization. + console.history = []; + } +}; +export default serverRenderReactComponent;