公司动态
Wiki.js 性能优化指南:首屏 2.8 秒到 0.9 秒的会诊报告
Wiki.js 性能优化指南首屏 2.8 秒到 0.9 秒的会诊报告【免费下载链接】wiki-Wiki.js | A modern and powerful wiki app built on Node.js项目地址: https://gitcode.com/GitHub_Trending/wiki78/wiki-Wiki.js 是一款基于 Node.js 的现代知识库应用功能强但部署后首屏慢很常见。这轮 Wiki.js 性能优化走了一条会诊路线先看症状再依次排查前端、数据库、缓存、构建、进程五个部位平均首屏从 2.8 秒降到 0.9 秒保存后的等待基本消失。卡在哪Network 面板最重的是 JS/CSS且每次访问都重新下载。判断静态资源没有长缓存策略浏览器在反复拉取没变过的版本。服务端日志每个匿名请求都完整走一遍 Markdown 渲染管线渲染耗时稳定偏高。判断大量 HTML 在重复现算属于重复劳动。SQL 日志高峰期同类慢语句排队连接等待时间拉长。判断数据库连接池用了保守默认值并发一来就开始排队。排查路线静态资源开一年缓存前端资源文件名自带时间戳名字不变即内容不变天然适合长缓存。反向代理层只对文本类资源开 Gzip并给/_assets/路径设置一年缓存gzip on; gzip_types text/css application/javascript application/json image/svgxml; location /_assets/ { expires 1y; add_header Cache-Control public, immutable; }效果资源传输体积降约七成老用户再次访问时资源请求基本归零。连接池 min/max 怎么定config.sample.yml 中pool项默认被注释Knex 会退回保守默认值并发一来请求就排队。min/max 按实例数与内存定取中间值即可pool: min: 2 max: 8重启后高峰期接口等待明显下降。顺手在 config.yml 的flags下开启sqllog: true跑一天N1 查询和缺索引的慢语句会自己冒出来定位完记得关闭这个日志很吵。给内存缓存设过期时间server/core/cache.js 里的new NodeCache()没传任何参数key 永不过期内存只进不出。补上默认 TTL 和定期清理return new NodeCache({ stdTTL: 600, checkperiod: 120 })讲究一点再分层配置类字典用长 TTL热点页面用短 TTL避免用户长时间看到旧内容。另外在反向代理层给匿名 GET 加页面缓存只缓存 200 响应五分钟命中后直接返回 HTML渲染管线完全不进。务必只缓存匿名请求登录态页面绝不能进缓存。主包拆分与编辑器懒加载默认 splitChunks 参数偏保守编辑器这类重型组件被打进首屏包时区数据还是全量。用chunks: all把第三方依赖拆成独立 vendor编辑器改为按需加载const Editor () import(/* webpackChunkName: editor */ ./components/editor.vue)vendor 包几乎不变长缓存命中率极高。同时收紧 webpack.prod.js 里 MomentTimezoneDataPlugin 的 startYear/endYear 区间裁掉用不到的时区表保留.webpack-cache/目录增量构建会快很多。渲染交给 worker堆内存设上限页面渲染是 CPU 重活和 Web 请求挤在同一个事件循环里会互相拖累。生产环境把这类 job 交给独立 worker 进程用多实例吃满多核并把堆内存上限设为物理内存的四分之一左右减少 GC 抖动。处方验证指标优化前优化后对应动作平均首屏2.8 秒0.9 秒静态长缓存 匿名页面缓存资源传输体积基准降约七成Gzip 一年缓存主包体积基准降约四成主包拆分 路由懒加载高并发接口 p95排队明显大幅下降连接池 min/max 调整构建耗时基准约减半构建缓存 产物裁剪验证手段用四个浏览器 Performance 面板录一次完整加载看瀑布图与主线程Lighthouse 跑一次性能分服务端开响应耗时日志观察 p95最后用压测打 300 并发持续 60 秒观察吞吐与错误率。长期保养Gzip 不要压图片只压缩文本类资源全量压缩只会让 CPU 飙升、收益为零。TTL 别拉太长短 TTL 加内容发布时主动失效比一味拉长缓存更稳。登录态页面不进缓存内容随权限变化缓存串了就是安全事故缓存键必须只覆盖匿名请求。多实例注意缓存一致性各实例的内存缓存各管各的要配合发布流程做统一失效。持续监控建议保留响应耗时日志定期复跑一次压测并对比 p95 走势每次发新版后对照上表把指标重新过一遍。今晚就能做的最小动作在反向代理给/_assets/加 Gzip 和一年缓存十分钟完成。再把 server/core/cache.js 补上stdTTL与checkperiod重启服务。报告已开好后面只需要按改一处、看一组数字的节奏执行。【免费下载链接】wiki-Wiki.js | A modern and powerful wiki app built on Node.js项目地址: https://gitcode.com/GitHub_Trending/wiki78/wiki-创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考