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

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现fadein

vue实现fadein

Vue 实现 FadeIn 效果 在 Vue 中实现淡入(FadeIn)效果可以通过 CSS 过渡、动画或第三方库实现。以下是几种常见方法: 使用 CSS 过渡 通过 Vue 的过渡系统结合 CSS…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现弹幕

vue实现弹幕

Vue 实现弹幕功能 弹幕功能通常包括动态生成、滚动显示、颜色和速度随机化等特性。以下是基于 Vue 3 的实现方法。 核心思路 使用 CSS 动画控制弹幕从右向左滚动。 动态生成弹幕数据,随机设置…