超30倍 QPS 性能提升(相对于NextJS)

前言

因访问速度慢被吐槽前端性能差。

前端说: 明明就是接口慢 关前端啥关系
后端说: 单个接口的qps 都在200以上为什么到前端这边就不行了

实际情况(每个pod 2核4G)

POD 个数 QPS
13 55

原因分析

  • SSR: 页面需要保证需要seo 的数据都返回才能填充数据生成静态HTML字符串
  • 接口分层: 那些并行 那些串行 保证服务端尽量暂用最少时间
  • 实际测试,单个pod 只能在 12以下徘徊

猜测

markdown 复制代码
1. Node 对JSON 的处理慢接口执行效率不行
2. Node 操作大量字符串性能不好

SSR 实验:相同html 字符串不同框架在服务端执行效率(不调用接口直接修改一个随机数)

方案 QPS 结论
纯Node 200 由于没有引入任何第三方框架,代码路径最短,减少了中间层的开销,因此在性能上表现最佳。这符合预期,因为原生Node.js可以提供最高的运行效率,但开发复杂度相对较高
KOA 150~170 Koa是一个轻量级、高度可定制化的Node.js Web框架,其设计哲学是简洁、灵活和高效。相较于纯Node.js,虽然引入了一些额外的抽象和中间件机制,但整体开销仍然较小,故性能接近原生Node.js,略逊于纯Node但优于其他两个框架。
Express 120~140 Express是Node.js生态中最流行、功能丰富的Web框架之一,提供了大量的中间件和便利工具。然而,这种丰富性与便捷性是以牺牲部分性能为代价的。相比Koa,Express的API层级更深,可能包含更多内部逻辑和间接调用,导致其处理相同任务的效率低于Koa
Nextjs 100 Next.js是专为React应用设计的静态站点生成器和服务器端渲染框架,内置了很多高级特性如自动代码分割、路由管理、优化等。它的目标是简化全栈React应用的开发流程,而非极致性能优化。因此,在这个简单的SSR任务中,Next.js需要加载更多依赖、执行更复杂的生命周期方法,性能最低是可以理解的

分析: 代码路径越少执行效率越高,既然node 已经极致不能再提升有没有其他方案能解决这些问题

思考

  • 为什么老早的 JSP PHP 携带的html 没有说性能问题
  • 市面上为什么那么多 自定义 模板库

语言优势加上模板生成Html 快于Node 生成Html

语言 优势
Node 开发方便,性能差
JAVA 框架成熟, 比不上Go 的性能
Go 没有对应的框架,性能接近C++,天然支持高并发,多平台支持

使用Go 来生成 Html

graph TD Vue --> SSR-Node --> DSL--> GO模版HTML+TYPE --> SSR-GO --> SSR-Node

保证GO 生成的Html 和 Node 生成的Html 一致

关键技术

  1. 代码注入(AST 转换 注入自定义渲染方法) 复写这些使用的方法
javaScript 复制代码
import { Fragment, createVNode, mergeProps, renderList, toDisplayString } from "vue";
import { ssrInterpolate, ssrRenderAttrs, ssrRenderClass, ssrRenderComponent, ssrRenderList, ssrRenderStyle } from "vue/server-renderer";

2.Proxy 数据(数据依赖关系判断那些是动态的那些是静态的 对于生成 Html 中的模版)

上图看效果 (1 个Pod 的情况)

相关推荐
Nian.Baikal3 分钟前
从零搭建离线地图服务:Nginx + Cesium/Leaflet 实战指南
运维·前端·nginx
前端毕业班6 分钟前
uniapp web 灵活控制 style scoped
前端·javascript·vue.js
lichenyang45310 分钟前
鸿蒙业务需求实战:AI 问题走马灯卡片实现复盘
前端
ZTStory24 分钟前
mise 一款可以在项目中独立管理语言、环境变量和任务的工具
前端·rust·命令行
雁北向25 分钟前
骨架屏 巴飞特 测试
前端
吴佳浩26 分钟前
用 Stitch 实现 AI 前端工程化:找回消失的UI美学(别再 Vibe 瞎Coding 了)
前端·人工智能·llm
lichenyang45338 分钟前
鸿蒙业务 UI 实战复盘:AI 问题走马灯卡片与 ArkTS 基础语法
前端
张元清43 分钟前
在 React 里写动画又不跟渲染周期较劲:useRafFn、useRafState、useFps、useDevicePixelRatio、useUpdate
前端·javascript·面试
阿隅1 小时前
从 #xxx 私有属性到 WeakMap:彻底搞懂 JS 私有属性的前世今生与编译原理
前端
光影少年2 小时前
Redux 核心流程:Action、Reducer、Store、Dispatch
前端·react.js·掘金·金石计划