项目使用了 nuxt 框架,但是 QA 反馈性能很差(通过压力测试)
我本地分别用了 next 和 nuxt 跑了压力测试,采用 helloworld 级别的最小仓库,next 的压测结果吞吐量是 nuxt 的五倍左右
我想问下在用 nuxt 的兄弟,nuxt 性能怎么样?怎么优化呢?
试试 https://github.com/ykfe/egg-react-ssr 这个。4核8g单机150以上
是这样的,一般用 nuxt ssr 只是给搜索引擎用。 用户通过DNS 解析到 CDN 节点,nuxt SPA。 爬虫通过DNS解析到渲染服务器,nuxt SSR
@i5ting 谢谢狼叔回复,目前的疑问是,nuxt 是否真的如我测试的性能这么差?还是我测试有误?如果确定后,再转其他方案
@zuohuadong 谢谢回复,所以 nuxt 真的如我测试的性能这么差吗?那如果这样,纯的 nuxt 应用是否很难应用于并发量高的场景,都需要做两套方案吗(爬虫 ssr,普通用户 spa)?
2018年见过vue ssr,很少突破50 qps的。今年没关注。
@i5ting 目前测试的是 nuxt 的 helloworld 代码,本地测试结果吞吐量比 next 差好多倍,是否能说明 vue ssr 确实不太行?
@hanzichi ssr 渲染也比较局限。某些组件不支持。 nuxt 减少了首屏页面的大小,通过 云存储和 CDN 实际算下来要比 ssr 快不少。
@zuohuadong >通过 云存储和 CDN 实际算下来要比 ssr 快不少 说的是 spa 实际比 ssr 快不少的意思吗?
我觉得可以参考一下,总的来说react的生态圈总是比vue繁荣一些,虽然我用的是vue… https://segmentfault.com/a/1190000019067086?utm_source=tuicool&utm_medium=referral
去年用过 nuxt 现在已经基本弃坑了,性能太差
@hanzichi 没看过nuxt源码,不过之前试了一下直接用vue提供的api来做ssr性能还可以,建议你可以自己用最简单方式直接用vue的api来做ssr压测一下。官方的benchmark的数据vuessr的性能是比react好一丢丢的
@hanzichi 不是~ SPA 首屏渲染还是要比 SSR 的慢。 只是综合下来,网络、缓存。
nuxt 慢好久了
用pm2起过多个端口给nuxt,并发高的时候有端口直接被kill
即使用了组件缓存,优化效果也并不理想
目前正在用nuxt,4c4g 单机 200TPS,跟原来的 java web 持平,没跟 next 对比过 ~ 生态确实不理想,加上会报一些迷之bug
@mosaic101 tps是每秒事务个数吧?
发一下监控截图看看。如果是200qps还是很不错的。
@i5ting 200qps 就算不错了嘛?我加了页面缓存,然后qps勉强 300 多。。。正常嘛?
@i5ting 只有一个 request,压得一个首屏页面(SEO+首屏数据)~ 截图没了,下次再压一次看看
@hanzichi 建议你跑一个 nuxt-hackernews 试试,这个是官方极致优化过的,看看能快点不
另外注意下是跑在dev模式下还是production模式下?要用 npm run build && npm run start
来测试而不是 npm run dev
我在本机用两个框架跑helloworld实测数据给你参考下: nuxt:
Server Software:
Server Hostname: 127.0.0.1
Server Port: 3000
Document Path: /
Document Length: 1395 bytes
Concurrency Level: 200
Time taken for tests: 7.438 seconds
Complete requests: 3000
Failed requests: 0
Total transferred: 4851000 bytes
HTML transferred: 4185000 bytes
Requests per second: 403.32 [#/sec] (mean)
Time per request: 495.885 [ms] (mean)
Time per request: 2.479 [ms] (mean, across all concurrent requests)
Transfer rate: 636.88 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 1
Processing: 94 477 70.1 470 697
Waiting: 43 442 66.9 441 609
Total: 94 477 70.1 470 697
next:
Server Software:
Server Hostname: 127.0.0.1
Server Port: 3000
Document Path: /
Document Length: 1383 bytes
Concurrency Level: 200
Time taken for tests: 4.105 seconds
Complete requests: 3000
Failed requests: 0
Total transferred: 4947000 bytes
HTML transferred: 4149000 bytes
Requests per second: 730.73 [#/sec] (mean)
Time per request: 273.699 [ms] (mean)
Time per request: 1.368 [ms] (mean, across all concurrent requests)
Transfer rate: 1176.73 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 1
Processing: 65 266 32.2 264 385
Waiting: 7 249 31.8 245 373
Total: 66 266 32.2 265 385
Percentage of the requests served within a certain time (ms)
50% 265
66% 271
75% 277
80% 288
90% 310
95% 322
98% 343
99% 363
100% 385 (longest request)
谢谢,确实我本地没有用 production 但是我有个应用,开了 production,吞吐量 50,再开 cache 也才 300,会是什么原因呢? 我看哪个 nuxt-hackernews 好像并没有使用缓存,它的核心优化点是什么呢?
@hanzichi 有很多优化,比如 component cache,这个是一个很有优势的缓存,另外还有 pwa,以及还有一些优化是图片懒加载,还有链接预读取。这些都是优化的地方。但是我其实也不是特别懂。我主要是没遇到过严重的性能问题,Nuxt 肯定是要比 Next 慢一点,严重情况下可能会慢一倍,但也不至于特别离谱。Vue 3 出来以后应该会有所改观
@zuohuadong 老哥,这样的操作有什么相关资料吗?
@andyhu 谢谢你的回复给我打开了新的思路,感谢
不过图片懒加载应该不会影响吞吐量数据吧,另外 nuxt-hackernews 也没用 component cache,得好好研究下它优化了啥提升了性能,兄弟有什么思路吗
@andyhu 另外还有 pwa,以及还有一些优化是图片懒加载,还有链接预读取
这些如果不是用浏览器来测试,而是用工具测对结果应该没什么影响吧
@andyhu 我测试了下 nuxt-hackernews,你测的应该是首页,它会重定向到 /news,我猜测可能就是个重定向,页面源码只是个 redirect,所以比较快?我 curl / 拿不到任何数据
我试了其他页面,比如直接压 /news,Requests per second 这项都不会超过 100
@AcerFeng 组件缓存,为啥不直接上页面缓存呢?
@i5ting 对于狼叔提的两个优化点,想再跟进请教下
控制好首屏模块个数,对返回的结果进行精简,保证吐出到浏览器的内容足够小,这意思是不是首屏内容做 ssr 服务端渲染,非首屏内容走浏览器请求客户端渲染?如果是这样的话,对于 seo 的需求如何满足呢?
@hanzichi 核心内容是啥,比如视频,核心肯定是视频信息,如果必要把播放相关的信息聚合进来。保证rt在20到50ms以内。那么你的首屏是足够满足seo和性能的。如果不能可能你ui设计有问题,核心内容不在首屏
@hanzichi 页面有些数据是动态获取要更新的
@i5ting 弱弱问下rt是啥意思?
@AcerFeng 是指这些数据需要实时的吗,每秒看到的都要不一样?还是说缓存几秒钟几分钟没啥意义?
@hanzichi 响应时长
@hanzichi 类似资讯平台门户网站的数据
@zuohuadong 谢谢大佬
@zuohuadong 你这样和prerenderio那种有什么区别呢?
@andyhu 假如我使用了koa-router-cache 是不是 component cache就没什么用了?
@lww555 我个人认为不是一个层级的cache,应该作用不一样,建议你自己可以测试下看看
其实,为啥你不直接接入 alinode 等 APM 软件,分析下压测时的瓶颈和热点在哪里,然后针对性优化就行了,没必要乱猜是哪里的问题。
这玩意,写静态页面还是比较舒服的,
@andyhu 使用了一下确实有效果。但是还是理解不了,假如页面缓存和组件缓存设置时间相同, 1.第一访问,走代码,同时页面和组件同时缓存 2.第二次访问走页面缓存。 缓存时间过了,重复1,这组件缓存不就是没生效
看下 CPU 火焰图叫知道了,MVVM 框架的 SSR 函数调用链太深了以至于一分钟的 CPU Profiler 能到几百M(正常抓五分钟也就几兆到几十兆),性能比模板字符串差 100 倍以上,如果是对 QPS 有要求的页面还是得用模板字符串做