2

我正在尝试使用 React.Net 和 SuperchargedReact 实现从 ASP.NET 网站内对 React 组件进行服务器端渲染。

我的初始负载测试结果表明,可以相当快地处理单个请求(大约 100 毫秒),但在并发请求(> 4 秒)下性能会迅速下降。详情如下。

可能我没有充分利用这些工具的潜力,并且测试很粗略,但我需要一些关于从哪里开始提高性能的建议。

问题

  1. 我应该大致期望什么级别的并发?例如,并发性是否仅限于我可以在内存中保存的 javascript 引擎实例的数量。还是取决于 IIS 工作进程的数量。或者是其他东西。

  2. 我应该从哪里开始寻求提高性能 - 提示?技巧?资源?

  3. 当 SuperchargedReact 据称实现了许多性能改进时,什么可以解释其性能不如 React.Net。

测试细节

我通过 browserify/babelify/gulp-minify 从 ES6 源代码构建了一个 js 包。然后反应组件通过全局变量暴露出来。不包括 react-router,并且对 SuperchargedReact 进行了一些小的修改,以使其在没有路由器的情况下工作。

我从另一台服务器上的 JMeter 请求了一个大约 5kb 的服务器端渲染页面,具有不同的线程数和每分钟请求限制。

React.Net 的结果

10 个线程

req/min | avg ms | min ms | max ms

    100 |    138 |     90 |  1,161

    500 |    256 |      4 |  2,049

   1000 |    566 |     31 |  4,969

20 个线程

req/min | avg ms | min ms | max ms

    100 |    284 |     88 |  1,964

    500 |    432 |     52 |  3,649

   1000 |  1,557 |     75 |  4,405

50 个线程

req/min | avg ms | min ms | max ms

    100 |  1,393 |     91 |  4,693

    500 |  1,723 |     19 | 10,523

   1000 |  4,418 |     97 | 32,769

SuperchargedReact 的结果

10 个线程

req/min | avg ms | min ms | max ms

    100 |    763 |      7 |  2,194

    500 |  2,149 |    263 |  5,160

   1000 |  2,270 |    149 |  4,865

我现在停止测试 SuperchagedReact,因为它看起来比 React.Net 差得多

4

1 回答 1

1

这帮助了我们:

ReactSiteConfiguration.Configuration.AllowMsieEngine = false;
ReactSiteConfiguration.Configuration.ReuseJavaScriptEngines = false;
  • 强制使用 V8 而不是 IE 的 Javascript 引擎。如果您没有安装 VC++ 2013 运行时,有时 V8 可能会静默加载失败。
  • 禁用 JS 引擎池,我们发现它有问题。
  • 我们有旧版 Razor 视图,因此我们仅在需要渲染 React 组件的页面上调用 .ReactWithInit。这让我们可以避免在每个页面上调用 .ReactInitJavascript,从而显着减少 JS 引擎的工作量。

希望有帮助。

于 2016-01-21T19:58:36.833 回答