当前位置:首页 > 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:

vue配合实现ssr

  • 服务器配置: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 缓存:

vue配合实现ssr

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 管理头部信息:

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

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

标签: vuessr
分享给朋友:

相关文章

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue实现单点

vue实现单点

Vue 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理…