当前位置:首页 > VUE

vue配合实现ssr

2026-02-17 16:30:12VUE

Vue 实现 SSR 的核心方法

Vue 的服务器端渲染 (SSR) 主要通过官方库 vue-server-renderer 实现。以下是关键实现步骤:

创建通用应用结构 需要将应用拆分为通用代码,避免客户端特有的操作(如 DOM 操作)。创建 app.js 作为入口文件:

import Vue from 'vue'
import App from './App.vue'

export function createApp() {
  const app = new Vue({
    render: h => h(App)
  })
  return { app }
}

服务器端入口 使用 createRenderer 生成 HTML:

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

server.get('*', (req, res) => {
  renderer.renderToString({ url: req.url }, (err, html) => {
    if (err) return handleError(err)
    res.end(html)
  })
})

客户端激活 创建客户端入口文件 client.js 进行混合:

import { createApp } from './app'

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

构建配置要点

Webpack 配置分离 需要分别配置服务器和客户端的 Webpack:

  • 服务器配置:target: 'node',输出 libraryTarget: 'commonjs2'
  • 客户端配置:正常生成静态资源

路由处理 使用 vue-router 的异步组件时需注意:

router.onReady(() => {
  const matchedComponents = router.getMatchedComponents()
  Promise.all(matchedComponents.map(component => {
    return component.asyncData && component.asyncData({ store, route: router.currentRoute })
  })).then(() => {
    // 渲染完成
  })
})

性能优化方案

数据预取 在路由组件中定义 asyncData 方法:

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

缓存策略 对渲染结果实施 LRU 缓存:

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

流式渲染 提升首屏性能:

const stream = renderer.renderToStream(context)
stream.pipe(res)

常见问题解决

跨平台 API 兼容 使用 isServer 环境变量:

created() {
  if (!this.$isServer) {
    window.addEventListener('resize', this.handleResize)
  }
}

状态管理注意 避免直接修改服务端的 store 状态:

if (typeof window !== 'undefined' && window.__INITIAL_STATE__) {
  store.replaceState(window.__INITIAL_STATE__)
}

静态资源处理 使用 vue-meta 管理头部信息:

vue配合实现ssr

export default {
  metaInfo: {
    title: 'SSR Page'
  }
}

以上方案适用于 Vue 2.x 项目,Vue 3 推荐使用 Vite 的 SSR 插件实现类似功能。实际部署时需配合 Node 服务器或无服务器架构。

标签: vuessr
分享给朋友:

相关文章

vue实现autocomplete

vue实现autocomplete

Vue 实现 Autocomplete 功能 Vue 中实现 Autocomplete(自动完成)功能可以通过自定义组件或使用现有库完成。以下是几种常见方法: 方法一:使用 Vue 原生实现 创建…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue 实现图钉

vue 实现图钉

实现图钉效果的步骤 在Vue中实现图钉(固定位置)效果,可以通过CSS的position: sticky属性或监听滚动事件动态修改元素样式。以下是两种常见方法: 方法一:使用CSS的position…

vue实现卡片

vue实现卡片

Vue 实现卡片组件的方法 使用 Vue 实现卡片组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 在 Vue 单文件组件中,可以通过模板和样式直接实现卡片效果…