From 005e26e0b4a88e5b4bec9b07d7630067774be32e Mon Sep 17 00:00:00 2001 From: Wyatt Ades Date: Mon, 17 Jul 2023 01:31:47 -0700 Subject: [PATCH] remove extra js eval call (#1544) * move try/finally internally --- CHANGELOG.md | 3 +++ .../ruby_embedded_java_script.rb | 4 +--- node_package/src/serverRenderReactComponent.ts | 13 ++++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) 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;