当前位置:首页 > VUE

vue实现预渲染

2026-03-28 15:24:55VUE

预渲染的概念

预渲染(Prerendering)是指在构建阶段生成静态HTML文件,而非在客户端动态渲染页面。适用于内容变动较少、需要快速首屏加载的网站,如博客、产品展示页等。

Vue实现预渲染的两种方式

使用vue-prerender-spa-plugin

该插件基于Puppeteer,在构建时自动抓取路由并生成静态HTML。

安装依赖:

npm install vue-prerender-spa-plugin puppeteer --save-dev

配置vue.config.js:

const PrerenderSPAPlugin = require('vue-prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;

module.exports = {
  configureWebpack: {
    plugins: [
      new PrerenderSPAPlugin({
        staticDir: path.join(__dirname, 'dist'),
        routes: ['/', '/about', '/contact'],
        renderer: new Renderer({
          headless: true,
          renderAfterDocumentEvent: 'render-event'
        })
      })
    ]
  }
};

在main.js中触发渲染事件:

new Vue({
  router,
  render: h => h(App),
  mounted() {
    document.dispatchEvent(new Event('render-event'));
  }
}).$mount('#app');

使用SSR + 静态导出

通过Vue SSR结合静态导出工具实现更灵活的预渲染。

安装@vue/server-renderer:

npm install @vue/server-renderer --save-dev

创建渲染脚本(render.js):

vue实现预渲染

const fs = require('fs');
const { renderToString } = require('@vue/server-renderer');
const createApp = require('./src/main').default;

const routes = ['/', '/about'];
routes.forEach(async route => {
  const app = createApp({ url: route });
  const html = await renderToString(app);
  fs.writeFileSync(`dist${route === '/' ? '/index' : route}.html`, html);
});

注意事项

  • 动态路由需预先定义所有可能路径
  • 预渲染页面仍需要Vue hydrate交互功能
  • 避免在created/mounted中使用仅客户端的API
  • 使用process.client判断客户端环境

效果验证

构建后检查dist目录会生成about.html等静态文件,直接打开可查看预渲染效果。使用Lighthouse工具测试可观察到首屏性能提升。

标签: vue
分享给朋友:

相关文章

vue核心实现

vue核心实现

Vue 核心实现原理 Vue.js 的核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现原理的详细说明: 响应式系统 Vue 使用 Object.defineProper…

vue底部实现

vue底部实现

Vue 底部实现方法 在 Vue 项目中实现底部布局可以通过多种方式完成,以下是一些常见的方法: 使用固定定位 将底部元素固定在页面底部,适用于单页应用或需要始终显示的底部栏。 <temp…

vue实现监控

vue实现监控

Vue 实现监控功能的方法 在 Vue 中实现监控功能通常涉及数据变化监听、事件监听或第三方监控工具集成。以下是几种常见实现方式: 使用 Vue 的 watch 监听数据变化 通过 watch 可以…

vue 实现单点登录

vue 实现单点登录

单点登录(SSO)实现原理 单点登录允许用户通过一次身份验证访问多个系统。核心原理是用户首次登录后,认证中心颁发令牌(如Token),其他系统通过验证令牌实现免登录。 Vue中实现SSO的方案 基于…

vue实现选择框

vue实现选择框

Vue 实现选择框的方法 Vue 中可以通过多种方式实现选择框(下拉框),包括原生 HTML 的 <select> 元素结合 Vue 的数据绑定,或者使用第三方 UI 库如 Element…

vue实现转盘抽奖

vue实现转盘抽奖

Vue 实现转盘抽奖 基本思路 转盘抽奖的核心是通过 CSS 动画实现旋转效果,Vue 负责控制旋转逻辑和数据绑定。关键点包括转盘扇形区域的绘制、旋转动画的触发与停止、中奖结果的判定。 实现步骤 H…