当前位置:首页 > 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 并处理路由:

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 预取数据:

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 缓存组件渲染结果:

vue配合实现ssr

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
分享给朋友:

相关文章

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…

vue 实现templateurl

vue 实现templateurl

在 Vue 中,templateUrl 是 Angular 中的一个概念,用于指定外部 HTML 文件作为模板。Vue 本身不直接支持 templateUrl,但可以通过以下方法实现类似功能: 使用…