reactjs.net - '检测到潜在的堆栈溢出'错误

时间:2016-07-28 14:10:53

标签: asp.net-mvc reactjs reactjs.net

由于我决定从客户端反应切换到服务器端渲染,我开始创建我的组件并在应用程序中使用它们。

但是我遇到了这个错误:

Unknown error (RangeError); potential stack overflow detected

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: Microsoft.ClearScript.ScriptEngineException: Unknown error (RangeError); potential stack overflow detected

这是stack-trace

的一部分
[ScriptEngineException: Unknown error (RangeError); potential stack overflow detected]
   V8Exception.ThrowScriptEngineException(V8Exception* ) +169
   Microsoft.ClearScript.V8.V8ContextProxyImpl.Execute(String gcDocumentName, String gcCode, Boolean evaluate, Boolean discard) +462
   Microsoft.ClearScript.V8.<>c__DisplayClass1b.<Execute>b__19() +197
   Microsoft.ClearScript.ScriptEngine.ScriptInvoke(Func`1 func) +70
   Microsoft.ClearScript.V8.V8ScriptEngine.BaseScriptInvoke(Func`1 func) +49
   Microsoft.ClearScript.V8.<>c__DisplayClass25`1.<ScriptInvoke>b__24() +45
   Microsoft.ClearScript.V8.?A0x792c8756.LockCallback(Void* pvArg) +9
   Microsoft.ClearScript.V8.V8ContextProxyImpl.InvokeWithLock(Action gcAction) +176
   Microsoft.ClearScript.V8.V8ScriptEngine.ScriptInvoke(Func`1 func) +118
   Microsoft.ClearScript.V8.V8ScriptEngine.Execute(String documentName, String code, Boolean evaluate, Boolean discard) +118
   JavaScriptEngineSwitcher.V8.V8JsEngine.InnerEvaluate(String expression) +89

所以我不知道是什么导致了这个错误,但我认为这是一些循环或类似的代码。此外,如果我刷新页面,这个错误就会消失,如果我继续深入刷新,它会再次出现,这非常令人沮丧。

2 个答案:

答案 0 :(得分:3)

我得到了同样的错误(天蓝色的网络应用),经过一些调查和测试,将SetAllowMsieEngine设置为true确实也解决了这个问题。

正如Luke McGregor所说,这似乎是V8ScriptEngine的问题,并且使用SetAllowMsieEngine完成工作,但是这种方法是不推荐使用react.net的最新版本,建议“在JavaScriptEngineSwitcher配置中管理”。

所以到目前为止我找到的解决方案是通过直接在代码中设置来切换js引擎切换器:

JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance;
engineSwitcher.EngineFactories
    .AddChakraCore()
    .AddMsie( new MsieSettings() { EngineMode = JsEngineMode.Auto } );

engineSwitcher.DefaultEngineName = ChakraCoreJsEngine.EngineName;

像这样我使用的是ChakraCore引擎,而不是导致错误的默认V8。

到目前为止,在我们的大约250个并发请求的性能测试期间,我们之前在相同条件下不再出现此错误,以确保发生此错误。

答案 1 :(得分:1)

这是一个已知问题,请参阅https://github.com/reactjs/React.NET/issues/190

解决方法是不使用V8进行渲染,即:

app.UseReact(config =>
        {
            config
                // ..other configuration settings
                .SetAllowMsieEngine(true);
        });