2016-07-28 2 views
1

Поскольку я решил переключиться на серверный рендеринг с клиентской стороны, я начал создавать свои компоненты и использовать их в приложении.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 

Так что я не знаю, что вызывает эту ошибку, но я думаю, что это какой-то код что идет в петле или что-то подобное. Кроме того, если я обновляю страницу, эта ошибка исчезает, и если я продолжу интенсивно обновляться, она снова появляется, что очень расстраивает.

+1

Хорошо, если у вас есть потенциальное переполнение стека, вы пришли в нужное место – kinakuta

+0

, что было хорошим –

ответ

1

Это известная проблема, см https://github.com/reactjs/React.NET/issues/190

Обходной не использовать V8, чтобы сделать рендер, а именно:

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

Да, я видел эту проблему github, когда искал эту ошибку и, по-видимому, это был единственный соответствующий пост по теме так далеко. В любом случае, где я должен вставить код, который вы предоставили? Я подозреваю, что это должно быть в файле 'Startup.cs', но мое' приложение' не имеет метода 'UseReact()' ... –

+0

@MartinShishkov По умолчанию он находится в App_Start \ ReactConfig.cs (on ReactSiteConfiguration. Конфигурация), но запуск - лучшее место. –

+0

Вы имеете в виду, что я должен выполнить 'ReactSiteConfiguration.Configuration.SetAllowMsieEngine (true);' в 'Configure()' метод в 'ReactConfig.cs'? –

3

я получаю ту же ошибку (веб-приложение в лазури) и после некоторых исследований и испытаний установка SetAllowMsieEngine в true действительно устранила проблему и для меня.

Как сказал Люк МакГрегор, это проблема с V8ScriptEngine, и использование SetAllowMsieEngine выполняет эту работу, однако этот метод является последней версией response.net, устарел и рекомендуется «управляться в конфигурации JavaScriptEngineSwitcher».

Так что решение я нашел до сих пор является для переключения Js переключатель двигателя, установив его непосредственно в коде:

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

engineSwitcher.DefaultEngineName = ChakraCoreJsEngine.EngineName; 

Как это я использую двигатель ChakraCore, а не по умолчанию V8, который вызывает ошибку.

До сих пор во время наших тестов производительности с примерно 250 одновременными запросами мы больше не имеем эту ошибку, если ранее в тех же условиях, если бы эта ошибка не возникла.

Смежные вопросы