1

クライアント側の反応からサーバー側のレンダリングに切り替えることにしたので、コンポーネントを作成してアプリで使用し始めました。

しかし、私はこのエラーに遭遇しました:

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

したがって、このエラーの原因はわかりませんが、ループなどに入るコードだと思います。さらに、ページを更新するとこのエラーは消え、集中的に更新し続けると再び表示され、非常にイライラします。

4

2 に答える 2

3

同じエラー (Azure の Web アプリ) が発生し、いくつかの調査とテストの後、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;

このように、エラーの原因となっていたデフォルトの V8 ではなく、ChakraCore エンジンを使用しています。

これまでのところ、約 250 の同時リクエストでのパフォーマンス テスト中に、以前は同じ条件でこのエラーが確実に発生していたにもかかわらず、このエラーは発生しなくなりました。

于 2016-11-08T14:50:47.873 に答える
1

これは既知の問題です。https://github.com/reactjs/React.NET/issues/190を参照してください。

回避策は、レンダリングを行うために V8 を使用しないことです。

app.UseReact(config =>
        {
            config
                // ..other configuration settings
                .SetAllowMsieEngine(true);
        });
于 2016-07-29T00:49:23.180 に答える