# 性能优化

# 减少服务端渲染DOM数

  1. 当页面特别长的时候,譬如我们的常见的首页、商品详情页,底部会有推荐商品流、评价、商品介绍等并不会出现在首屏的模块,也不需要在服务端的时候执行渲染,这个时候可以结合vue的插槽系统、内置component组件的is,利用vue ssr服务端只会执行beforeCreate和created生命周期的特性,封装自定义组件,被该组件在mounted的时候将包裹的组件挂载到component组件的is属性上;

  2. 通过vue高级异步组件封装延迟加载方法,只有当模块到达指定可视区域时再加载;

# 开启多进程

Node.js 是单进程,单线程模型,其基于事件驱动、异步非阻塞模式,可以应用于高并发场景,避免了线程创建、线程之间上下文切换所产生的资源开销。但是遇到大量计算,CPU 耗时的操作,则无法通过开启线程利用 CPU 多核资源,但是可以通过开启多进程的方式,来利用服务器的多核资源。

  1. 单个 Node.js 实例运行在单个线程中。 为了充分利用多核系统,有时需要启用一组 Node.js 进程去处理负载任务,cluster 管理多进程的方式为 主-从 模式,master 进程负责开启、调度 worker 进程,worker 进程负责处理请求和其他逻辑。

  2. 生产环境一般采用pm2来维护node项目 如果控制各进程之间的通信,让每个进程分别处理自己的逻辑,采用编写node脚本的方式启动cluster,从健壮性的角度上讲pm2的方式要好一些。

# 开启缓存

  1. 页面级缓存:在创建 render 实例时利用LRU-Cache来缓存当前请求的资源。

  2. 组件级缓存:可缓存组件必须定义一个唯一的 name 选项。通过使用唯一的名称,每个缓存键 (cache key) 对应一个组件。如果 renderer 在组件渲染过程中进行缓存命中,那么它将直接重新使用整个子树的缓存结果。

  3. 分布式缓存:SSR应用程序部署在多服务、多进程下,进程下的缓存并不是共享的,造成缓存命中效率低下,可以采用如Redis,用以实现多进程间对缓存的共享

# 降级方案

# Node 中间件降级

# Nginx 配置兜底

# 独立网关降级

# 分布式网关降级

# 推荐阅读

SSR同构降级策略 (opens new window)

SSR 服务稳定性优化:通用降级方案 (opens new window)