当前位置:首页 > VUE

vue配合实现ssr

2026-03-09 05:01:36VUE

Vue 实现 SSR 的核心方法

Vue 的服务器端渲染(SSR)通过将组件在服务端生成 HTML 字符串,再发送给客户端激活,实现更好的首屏性能和 SEO。以下是关键实现方式:

基础配置与项目结构

使用官方库 vue-server-rendererexpress 搭建基础服务:

// 服务端入口 server-entry.js
import { createApp } from './app'

export default context => {
  const { app } = createApp()
  return app
}
// 客户端入口 client-entry.js
import { createApp } from './app'

const { app } = createApp()
app.$mount('#app')

服务端渲染处理

通过 createRenderer 生成 HTML 并处理路由:

vue配合实现ssr

const renderer = require('vue-server-renderer').createRenderer({
  template: require('fs').readFileSync('./index.template.html', 'utf-8')
})

server.get('*', (req, res) => {
  const context = { url: req.url }
  renderer.renderToString(app, context, (err, html) => {
    if (err) res.status(500).end('Internal Server Error')
    res.end(html)
  })
})

客户端激活与数据预取

使用 vuex 同步服务端与客户端状态:

// 共享状态管理
export function createStore() {
  return new Vuex.Store({
    state: { items: [] },
    actions: {
      fetchData({ commit }) {
        return api.fetchItems().then(items => commit('setItems', items))
      }
    }
  })
}

在组件中定义静态方法 asyncData 预取数据:

vue配合实现ssr

export default {
  asyncData({ store }) {
    return store.dispatch('fetchData')
  }
}

构建配置分离

通过 Webpack 分别打包服务端和客户端代码:

// webpack.server.config.js
module.exports = {
  target: 'node',
  output: {
    libraryTarget: 'commonjs2'
  }
}

// webpack.client.config.js
module.exports = {
  entry: { app: './client-entry.js' }
}

生产环境优化

使用 LRU 缓存组件渲染结果:

const microCache = new LRU({
  max: 100,
  maxAge: 1000 * 60 // 1分钟缓存
})

server.get('*', (req, res) => {
  const hit = microCache.get(req.url)
  if (hit) return res.end(hit)

  renderToString(app, (err, html) => {
    microCache.set(req.url, html)
    res.end(html)
  })
})

常见问题处理

  • 客户端激活警告:确保服务端与客户端生成的 DOM 结构完全一致
  • 生命周期限制:避免在服务端渲染阶段使用 beforeMount/mounted 钩子
  • 第三方库兼容:检查库是否支持 SSR,必要时使用 process.client 条件引入

通过以上方法可实现完整的 Vue SSR 方案,需注意服务端与客户端的环境差异处理。

标签: vuessr
分享给朋友:

相关文章

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue toast实现

vue toast实现

Vue Toast 实现方法 使用第三方库(推荐) 安装 vue-toastification 库,这是一个功能丰富且轻量级的 Vue Toast 插件。 npm install vue-toast…

vue实现列表

vue实现列表

Vue 实现列表的方法 在 Vue 中实现列表渲染通常使用 v-for 指令,可以动态生成多个元素。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 遍历数组,生成列表项。v-for 需要…

vue实现反馈

vue实现反馈

Vue 实现反馈功能的方法 在 Vue 中实现反馈功能可以通过多种方式,包括弹窗提示、Toast 消息、表单提交等。以下是几种常见的实现方法。 弹窗反馈 使用 Vue 的组件化特性创建一个弹窗组件,…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过动态绑定数据和 CSS 动画来实现。以下是具体实现方法: 1. 基础字幕组件 创建一个字幕组件,通过 v-model 或 props 接收字…

vue实现截屏怎么实现

vue实现截屏怎么实现

Vue实现截屏的方法 使用html2canvas库 html2canvas是一个流行的JavaScript库,可以将网页元素转换为Canvas图像。在Vue项目中安装html2canvas: npm…