我正在尝试使用React.NET和SuperchargedReact实现从ASP.NET网站中对React组件进行服务器端渲染。
我的初始负载测试结果表明,单个请求可以相当快速地处理(约100ms),但在并发请求(>4秒)下,性能会迅速下降。详细信息如下。
可能是我没有充分利用这些工具的潜力,测试也很粗略,但我需要一些关于从哪里开始提高性能的建议。
问题
-
我大概应该期望什么级别的并发?例如,并发性是否限制为我可以在内存中保存的javascript引擎实例的数量。还是取决于IIS工作进程的数量。或者其他什么。
-
我应该从哪里开始寻求提高性能的技巧?技巧?资源?
-
当SuperchargedReact据称实现了许多性能改进时,它表现不佳的原因是什么。
测试详细信息
我通过browserify/babelify/gulp-minify从ES6源代码构建了一个js包。然后通过全局变量暴露反应组件。react路由器不包括在内,对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
增压反应的结果
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 差得多
这帮助了我们:
ReactSiteConfiguration.Configuration.AllowMsieEngine = false;
ReactSiteConfiguration.Configuration.ReuseJavaScriptEngines = false;
- 强制使用V8而不是IE的Javascript引擎。有时,如果没有安装VC++2013运行时,V8可能会自动加载失败
- 禁用JS引擎池,我们发现它有缺陷
- 我们有遗留的Razor视图,所以我们只在需要呈现React组件的页面上调用.ReactWithInit。这使我们可以避免在每个页面上调用.ReactInitJavascript,这大大减少了JS引擎的工作量
希望能有所帮助。