前端性能优化:预渲染和服务端渲染

科技   2024-10-27 18:09   福建  

前言

要知道什么是预渲染和服务端渲染,咱首先得知道是用来干嘛的对吧。

应用场景

主要应用于SPA单页面应用

单页面web应用(SPA) 是目前前端主流框架使用的模式,我们知道任何一个东西有优势基本就有劣势,上帝给你开了门就不会给你留窗户。

  • spa的优点:更好前后端分离、内容改变不需要重新加载整个页面
  • spa的缺点:首屏加载慢、白屏、SEO优化不利
  • 问题的来源:SPA是客户端渲染,DOM节点要等JS文件加载完后才会生成
  • 怎么解决问题:就标题的两种方法;预渲染(prerender-spa-plugin)服务端渲染(SSR)

服务端渲染(SSR)

是什么:

  • 服务器收到请求后,把组件渲染成HTML字符串,然后返回给客户端,之后客户端再控制渲染

优点:

  • 更好的SEO优化,搜索引擎爬取时可以直接看到完全渲染的页面
  • 更快的内容请求时间,特别是网络比较缓慢的用户或设备比较友好

缺点:

  • 涉及到构建、部署更多的设置和要求
  • 更多的服务器负载

怎么用:

  • React:Next.js[1]框架
  • Vue:Nuxt.js[2]框架
  • 目前都比较成熟,且文档比较详细,比较容易上手

预渲染(prerender-spa-plugin)

是什么:

  • 当项目代码构建时(build time)简单地生成一些针对特定路由的静态HTML文件,使浏览器在请求服务器之前就能渲染一些文字或内容,以便于提高SEO优化和首页白屏的缺陷(至少用户可以看到东西不那么焦虑)

优点:

  • 包含SSR的所有优点,但请求时间优化可能没有SSR好
  • 操作极其简单,成本极其低廉,只需要安装一个plugin即可

缺点:

  • 预渲染不适合频繁变动的页面
  • 设置路由越多,构建时间也就越长

怎么用:

  1. 安装prerender-spa-plugin
  2. 配置plugin
// vue.config.js
const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer

function resolve (dir{
  return path.join(__dirname, dir)
}

module.exports = {
  publicPath'./',
  configureWebpack() => {
    if (process.env.NODE_ENV === 'production') {
      return {
        plugins: [
          new PrerenderSPAPlugin({
            staticDir: resolve('dist'),
            routes: ['/''/about'], // 你需要预渲染的路由
            renderernew Renderer({
              inject: {
                _m'prerender'
              },
              // 渲染时显示浏览器窗口,调试时有用
              headlesstrue,
              // 等待触发目标时间后,开始预渲染
              renderAfterDocumentEvent'render-event'
            })
          })
        ]
      }
    }
  }
}
  1. 如果有其他需求还是看看prerender-spa-plugin官方文档[3]
  2. 在生命周期中调用自定义事件
// main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

new Vue({
  router,
  renderh => h(App),
  mounted () {
    // 触发 renderAfterDocumentEvent
    document.dispatchEvent(new Event('render-event'))
  }
}).$mount('#app')

什么时候用预渲染什么时候用服务器渲染

  • 当项目对于内容请求到达时间需求特别高时用SSR渲染(对服务器性能有要求)
  • 当服务器性能一般且对于内容到达时间没有特别高要求时,用预渲染(成本低,配置简单)
本文转载于稀土掘金技术社区
作者:白境
原文链接:https://juejin.cn/post/7197608560602988601

前端自习课
每日清晨,享受一篇前端优秀文章。
 最新文章