返回顶部
首页 > 资讯 > 精选 >Vue中如何进行网页预渲染
  • 458
分享到

Vue中如何进行网页预渲染

2023-06-29 02:06:24 458人浏览 泡泡鱼
摘要

这篇文章主要介绍了Vue中如何进行网页预渲染,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。预渲染通常情况下,Vue项目是单页项目,也就是渲染出来的项目,只有一个index.h

这篇文章主要介绍了Vue中如何进行网页预渲染,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

预渲染

通常情况下,Vue项目是单页项目,也就是渲染出来的项目,只有一个index.html

这样的缺点很明显:

  • 部署到Nginx,需要做try_files $uri $uri/ /index.html内部重定向,才可以用通过路由访问页面。

  • SEO不友好,搜索引擎收录效果不佳。

而预渲染,就是把原来的单index.html,渲染成多个目录,每个目录又有一个index.html。这样就不需要内部重定向访问路由,也更利于搜索引擎收录。

Vue中如何进行网页预渲染

prerender-spa-plugin

本次预渲染使用prerender-spa-plugin进行预渲染。

它的主要原理是启动浏览器,渲染完成后抓取HTML,然后再创建目录,保存为index.html

注意:

  • 官网目前只有Vue2.x的Demo,实际上是支持vue3的(本次演示也是使用Vue3)

  • 虽然最近的一个发布版本是2018年(最近应该会发布新版本),但是一直有维护,可以使用。

安装

首先,我们用npm进行安装:

npm i prerender-spa-plugin

需要注意,因为prerender-spa-plugin会安装一个Chromium,所以安装会比较久。

Vue中如何进行网页预渲染

当然,这种依赖,只有在打包时候才使用。所以,更好的安装方式,应该是:

npm i prerender-spa-plugin -D

项目引用

现在,我们就来项目引用,使用方法很简单,方便在两个地方追加:

  • App.vue

  • vue.config.js

App.vue

首先,我们在App.vue内追加触发器事件:

mounted() {  document.dispatchEvent(new Event('render-event'))}

添加这个触发器,是后续打包时候,会自动触发,并完成渲染。

vue.config.js

根据prerender-spa-plugin项目文档:

const path = require('path')const PrerenderSPAPlugin = require('prerender-spa-plugin')module.exports = {  plugins: [    ...    new PrerenderSPAPlugin({      // Required - The path to the webpack-outputted app to prerender.      staticDir: path.join(__dirname, 'dist'),      // Required - Routes to render.      routes: [ '/', '/about', '/some/deep/nested/route' ],    })  ]}

同时一些高级使用需要引入PuppeteerRenderer进行自定义。所以,我自己的vue.config.js配置:

module.exports = {    ……    chainWEBpack: config => {        if (process.env.node_ENV == "development") {        ……        }        if (process.env.NODE_ENV == "production") {            config.plugin("PrerenderSPAPlugin").use('prerender-spa-plugin', [                {                    staticDir: path.join(__dirname, 'dist'),                    routes: [                        '/', '/processIMG', '/statisticsChars', '/generatePWD', '/calculateTheDate',                        '/randomNumber', '/textBase64', '/curl', '/mcstatus',                        '/gh', '/about', '/mdv'                    ],                    renderer: new PuppeteerRenderer({                        headless: false,                        executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',                        // 对应App.vue                         renderAfterDocumentEvent: 'render-event',                    }),                }])            ])        }    }

我使用的是链式函数。这样的好处,是方便我进行if-else等函数式判断。其中,renderer属性:

  • headless:这个就是Chrome的headless属性,常用于Debug。更多可以参考:Google Chrome

  • executablePath:重定向浏览器地址;我这里重定向使用我电脑自带的Chrome浏览器了。(可选,可以直接不加,默认调用Chromium)

  • renderAfterDocumentEvent:需要同App.vue中 document.dispatchEvent(new Event('render-event'))的事件名称要对应上。

routes数组,里面就是需要预渲染的路由地址。

Vue中如何进行网页预渲染

当然,更多的可选参数,你也可以参考官方的文档:

Vue中如何进行网页预渲染

staticDir需要指向编译后的输出文件夹。

打包项目

之后,我们就可以打包项目了:

npm run build

打包后的效果:

Vue中如何进行网页预渲染

看看预渲染的页面:

Vue中如何进行网页预渲染

因为我有使用Vue-meta的组件,所以预渲染的文件也就有meta属性了。

如果你也想用Vue-meta组件配合prerender-spa-plugin,可以参考文章:

https://juejin.cn/post/7056972997894094861

需要注意,如果出现什么错误,可以尝试:

# 删除项目node_modulesrm -rf node_modules# 重新安装npm install

这样的文件,就可以进行部署了。

部署效果

我们使用Nginx进行部署,上次到Nginx Web文件夹内,修改config文件,就不需要:

location / {  try_files $uri $uri/ /index.html;}

来实现内部重定向了。因为有真实的目录,可以去掉。

但是,数据代理,最好使用Nginx来实现。比如,开发环境,数据代理:

config.devServer.proxy({        '/dataapiJava': {            target: JavaBaseURL,            pathRewrite: {'^/dataApiJava': ""},            ws: true,            changeOrigin: true        },        '/dataApipython': {            target: PythonBaseURL,            pathRewrite: {'^/dataApiPython': ""},            ws: true,            changeOrigin: true        },        '/ghs': {            target: GitHubSpeedURL,            pathRewrite: {'^/ghs': ""},            ws: true,            changeOrigin: true        }    })

对应的Nginx配置,可以这样写:

location /dataApiPython/{      proxy_pass Http://127.0.0.1:8099/;      proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      proxy_set_header REMOTE-HOST $remote_addr;      add_header X-Cache $upstream_cache_status;}location /dataApiJava/ {      proxy_ssl_server_name on;      proxy_pass https://…….cn/;}location /ghs/ {      proxy_ssl_server_name on;      proxy_pass https://……/gh/;}

给大家展示三种配置,按需设置哦。

感谢你能够认真阅读完这篇文章,希望小编分享的“Vue中如何进行网页预渲染”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Vue中如何进行网页预渲染

本文链接: https://lsjlt.com/news/322013.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue中如何进行网页预渲染
    这篇文章主要介绍了Vue中如何进行网页预渲染,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。预渲染通常情况下,Vue项目是单页项目,也就是渲染出来的项目,只有一个index.h...
    99+
    2023-06-29
  • Android 应用中是如何进行渲染的
    Android 应用中是如何进行渲染的?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。基础知识CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理...
    99+
    2023-05-31
    android roi
  • 如何拦截vue渲染
    随着Vue的广泛应用和越来越多的前端工程师对Vue的了解和掌握,Vue的渲染机制也变得越来越重要。渲染是Vue应用程序的核心,它是将数据绑定到视图的过程。然而,在实际的开发过程中,我们可能需要进行拦截Vue渲染的操作,以优化性能或对数据进行...
    99+
    2023-05-18
  • vue-cli3.0如何使用prerender-spa-plugin插件预渲染
    目录如何使用prerender-spa-plugin插件预渲染预渲染 prerender-spa-plugin尝试先说一下效果吧不好用的地方使用坑点如何使用prerender-spa...
    99+
    2024-04-02
  • Vue单页面应用做预渲染的方法实例
    目录前言vue-cli2.0版本vue-cli3.0版本总结前言 使用vue-cli打包项目一般为spa项目,众所周知单页面应用不利于SEO,有ssr(服务端渲染)和预渲染两种解决方...
    99+
    2024-04-02
  • Thymeleaf渲染网页时中文乱码如何解决
    这篇文章主要讲解了“Thymeleaf渲染网页时中文乱码如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Thymeleaf渲染网页时中文乱码如何解决”吧!Thymeleaf渲染网页时中...
    99+
    2023-07-05
  • vue组件中如何重新渲染
    这篇文章主要讲解了“vue组件中如何重新渲染”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue组件中如何重新渲染”吧!改变key这个是最推荐的。因为vue是通过虚拟Dom算法来判断元素的变...
    99+
    2023-06-25
  • Vue中render如何实现渲染时间戳转时间以及渲染进度条效果
    这篇文章给大家分享的是有关Vue中render如何实现渲染时间戳转时间以及渲染进度条效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.格式化时间效果图:实现上述界面代码如下:...
    99+
    2024-04-02
  • 使用vue进行渲染的过程有哪些
    使用vue进行渲染的过程有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可...
    99+
    2023-06-14
  • 如何优化Next.js页面渲染
    这篇文章主要介绍如何优化Next.js页面渲染,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!第一个问题:宣称前后台同构的Next.js为何会出现卡顿现象?Next.js 中的特有生命...
    99+
    2024-04-02
  • 如何使用C++进行服务器端渲染?
    使用c++++实现服务器端渲染(ssr)具有以下优点:更快的初始页面加载时间更好的搜索引擎优化 (seo)访问服务器端资源和功能在c++中,可以使用poco库进行服务器端渲染:安装poc...
    99+
    2024-05-12
    c++ 服务器端渲染 搜索引擎优化
  • Vue服务端如何渲染SSR
    这篇文章主要介绍“Vue服务端如何渲染SSR”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue服务端如何渲染SSR”文章能帮助大家解决问题。手写Vue服务端渲染概念:放在浏览器进行就是浏览器渲染,...
    99+
    2023-07-02
  • 如何阻止vue组件渲染
    这篇文章主要介绍“如何阻止vue组件渲染”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何阻止vue组件渲染”文章能帮助大家解决问题。一、为什么要阻止Vue组件的渲染在某些情况下,我们可能需要阻止V...
    99+
    2023-07-05
  • vue中如何实现SSR服务端渲染
    本篇内容主要讲解“vue中如何实现SSR服务端渲染”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue中如何实现SSR服务端渲染”吧!一、SSR是什么Server-Side Rendering ...
    99+
    2023-06-29
  • Vue路由History mode模式中页面无法渲染如何解决
    本篇内容主要讲解“Vue路由History mode模式中页面无法渲染如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue路由History mode模式中页面无法渲染如何解决”吧!Vu...
    99+
    2023-07-04
  • 怎么使用Key对Vue组件进行重新渲染
    这篇文章主要介绍“怎么使用Key对Vue组件进行重新渲染”,在日常操作中,相信很多人在怎么使用Key对Vue组件进行重新渲染问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么...
    99+
    2024-04-02
  • vue如何有条件地渲染slot
    这篇文章主要为大家展示了“vue如何有条件地渲染slot”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何有条件地渲染slot”这篇文章吧。有条件地渲染slot每个 Vue&nb...
    99+
    2023-06-27
  • windows中keyshot如何渲染
    本篇内容介绍了“windows中keyshot如何渲染”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! k...
    99+
    2022-12-07
    windows keyshot
  • Vue在页面数据渲染完成之后如何调用
    这篇文章主要为大家展示了“Vue在页面数据渲染完成之后如何调用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue在页面数据渲染完成之后如何调用”这篇文章吧。在...
    99+
    2024-04-02
  • Vue列表渲染v-for如何使用
    这篇文章主要讲解了“Vue列表渲染v-for如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue列表渲染v-for如何使用”吧!列表渲染列表渲染的东西比较多,我们通过案例一步一步学习...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作