GA源代码里的小技巧之preview和prerender 作者前段时间在做类似Google Analytics(以下简称GA)的第三方监控脚本。...W3C标准(WD)中有个prerender特性。...-- 预渲染 --> <a href="....如果页面是预渲染,那么页面渲染时document.visibilityState的值为<em>prerender</em>。然后监听visiableChange事件,当页面可见之后开始执行业务主逻辑。...综合preview和<em>prerender</em>两种情况,我们可以用如下代码来判断是否需要执行自己的业务主逻辑: function start(win, main) { if (isPreviewLoad
文主要是介绍使用prerender-spa-plugin插件在针对前端代码进行预渲染。 预渲染(SSG)和服务端 渲染有一定的区别。...方案 我们本次方案主要采用的是prerender-spa-plugin这个webpack的插件来实现的。 它的主要原理是启动浏览器,渲染完成后抓取HTML,然后再替换掉原有HTML。...插件引入和配置 首先,我们需要引入一个预渲染插件,执行命令: mnpm i prerender-spa-plugin -D 这个命令除了安装插件本身以外,依赖了puppeteer,然后puppeteer...下面我们以vue.config.js的修改为例: const PrerenderSPAPlugin = require('prerender-spa-plugin'); module.exports...= { ..., configureWebpack: { ..., chainWebpack: config => { config.plugin('prerender
概述 本文主要的内容是通过之前使用的prerender-spa-plugin插件的源码阅读,来看下我们应该如何编写一个webpack的插件,同时了解下预渲染插件到底是如何实现的。...如果大家还没有看之前的如何使用prerender-spa-plugin插件对页面进行预渲染这篇文章,可以先去看看,了解下这个插件到底是做什么的,我们的插件大概是什么样的。...插件源码浅析 prerender-spa-plugin是开源的,源码在GitHub上面可以看到,大家如果有兴趣的话,可以自己点击看下。...下面,我们就基于prerender-spa-plugin插件,来一个一个部分的看下。 初始化function函数 首先让我们来看下初始化的function函数。...] Unable to prerender all routes!"
执行中将按照如下顺序激活事件: Page.PreInit Page.Init Page.InitComplite Page.PreLoad Page.Load Page.LoadComplete Page.PreRender...Page.InitComplite UI.PreLoad Page.PreLoad UI.Load Page.Load UI.LoadComplete Page.LoadComplete UI.PreRender...Page.PreRender UI.PreRenderComplete Page.PreRenderComplete 如果使用了MasterPage,则MasterPage中的事件和ContentPage...Master.PreRender ContentPage.PreRenderComplete 更进一步,如果ContentPage继承BasePage,那么,各事件的执行顺序将变成: UI.PreInit...ContentPage.PreRender Master.PreRender UI.PreRenderComplete ContentPage.PreRenderComplete
prerender的工作原理:当搜索引擎爬虫请求一个单页应用或使用JavaScript渲染的页面时,Prerender 捕获这个请求。...如果是,则把请求转发给prerender服务Prerender 服务器会使用一个头less浏览器(通常是谷歌Chrome)来打开并渲染请求的页面,就像一个真实的浏览器会做的一样。...prerender中间件就是用来判断请求是否来自搜索引擎爬虫和转发请求的。...Prerender 的缺点:成本高:Prerender 需要额外的服务器资源和成本,不适合于大型网站。缓存管理:需要我们经常更新Prerender的缓存,以确保搜索引擎获取到最新的内容。...prerender-spa-plugin的工作原理:配置插件:首先我们需要配置 prerender-spa-plugin 插件。配置要预渲染的路由、设置输出目录等。
基于这个协议和phantomjs(headless的浏览器内核)我们的SPA SEO工具 prerender(http://prerender.io/)应运而生,在官方和社区的支持下,现在已经有node.js...prerender架构流程图如下: ?...prerender分为两个部分一部分为后端云服务和应用程序客户端,客户端主要拦截来自爬虫的请求在转发到后端云服务处理返回处理后并且去掉多余script/css的html在返回给爬虫。...有了prerender,因为SEO而放弃SPA不再是理由了,关于prerender的任何issue大家可以及时提出,让它更加完善。...具体关于如何使用和测试请转向主页和各个client程序页面,http://prerender.io/
参考 https://www.npmjs.com/package/prerender-spa-plugin https://www.npmjs.com/package/vue-meta-info 第一步...:安装prerender-spa-plugin,vue-meta-info npm install prerender-spa-plugin vue-meta-info --save 如果安装失败,使用淘宝镜像试试...cnpm install prerender-spa-plugin vue-meta-info --save 第二步: 2.1 main.js引入vue-meta-info import Vue from...} 2.2 在你的项目目录下找到该文件 build/webpack.prod.conf.js,添加如下代码 const PrerenderSPAPlugin = require('prerender-spa-plugin
为了解决以上问题,目前有两个比较主流的解决方案: 1、 服务端渲染(SSR) 2、 预渲染(Prerender) 服务器端渲染 vs 预渲染 (SSR vs Prerender) 什么是服务端渲染(SSR...什么是预渲染(Prerender)? 无需使用web 服务器实时动态编译 HTML,而是使用预渲染方式,在构建时 (build time) 简单地生成针对特定路由的静态HTML 文件。...如果项目中使用 webpack,你可以使用 prerender-spa-plugin 轻松地添加预渲染,后面将会具体实现。 是否需要?哪个更适合?...在项目中加入预渲染(Prerender) 用prerender-spa-plugin可以给现有项目加入预渲染,我们就以Vue为实例进行预渲染优化。...安装prerender-spa-plugin依赖 yarn add prerender-spa-plugin --dev 1.1 坑点 因为这个组件需要依赖Puppeteer,它是是 Google Chrome
可用的插件: prerender-spa-plugin Install yarn add -D prerender-spa-plugin Config // vue.config.js 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
主要的库:prerender-spa-plugin (注意必须要用history的路由模式) 先下载 : npm i prerender-spa-plugin -S 然后在vue.config.js添加配置..... const PrerenderSPAPlugin = require("prerender-spa-plugin"); const Renderer = PrerenderSPAPlugin.PuppeteerRenderer.../static 就可以了 好了到了这一步感觉大功告成了, 然后一个天坑来了: prerender-spa-plugin不支持动态路由 啥意思呢,举个例子 我们的博客文章 的url是动态的带id的:http...://biaoblog.run/#/bookInfo/1641975877316 那么使用prerender预加载是没办法动态打包了, 当然也有一个很极限的实现方法: 下面的内容是引用一个github主的...好在vue官网直接给了推荐:https://github.com/chrisvfritz/prerender-spa-plugin, 我看了文档才知道,固定的路由比如 /hot, /iot, /traffic
为了避免现有用法的复杂性,并且能够让预渲染技术的未来继续发展,新的预渲染机制将不使用 以及 NoState Prefetch 的保留的语法,未来也可能在某些节点禁用这些用法...这就取代了之前的 写法,它们可以是静态配置,也可以由 JavaScript 动态注入。 后面我们会详细介绍。...注意如果是非同源的情况,需要预渲染的页面必须包括一个 Supports-Loading-Mode: credentialed-prerender Header 。...: "list", "urls": ["数据预取17.html"] } ] } { "prerender...urls": ["预渲染17.html"] } ] } 同样的,一个推测规则也可以设置为数组: { "prerender
后来,陌溪在网上冲浪的时候,在 Github 上发现了 prender-alpine 这个开源项目 https://github.com/tvanro/prerender-alpine prerender...项目 prender-alpine 的原理,在 Alpine Linux 上构建的轻量级 Prerender 容器,带有 Node 和 Headless Chrome Prerender :可以当做是一个预渲染的容器...针对爬虫的预渲染 服务端对请求的 user-agent 进行判断,浏览器端直接给 SPA 页面,如果是爬虫,需要通过 Prerender 容器动态渲染的 html 页面进行返回 完整的流程图如下,我们需要通过...: prerender: restart: always image: registry.cn-shenzhen.aliyuncs.com/mogublog/prerender...的爬虫 如果识别成功,那么会跳转到刚刚搭建的 prerender 容器中进行预渲染,否则继续返回原来的 Vue 页面 下面是完整的 nginx 配置文件 vue_mogu_web.conf server
方式一:使用prerender-spa-plugin插件获得SSR的效果。 2.1 说明 插件地址:prerender-spa-plugin 严格上来说,此种实现方式并非叫做 SSR,而是预渲染。...prerender 主要是利用phantom js模拟浏览器环境,将指定的路由页面放在 phantom j s中运行,这样.vue便会在 phantom 中工作并完成渲染,prerender再去获取渲染后的...安装 prerender-spa-plugin, 因为依赖phantom js,phantom 的安装比较蛋疼,太耗时了~ npm install prerender-spa-plugin -D 2....开始 prerender 相关的配置: 修改 webpack.prod.conf.js,只在生产环境进行预渲染。...此方式实现的 demo 地址: vue-prerender-demo 3.
后的网页;build:ssr 构建 SSR 版本的网页;prerender 构建预渲染后的网页,与 build 不同,这里会根据提供的 routes 生成这些页面的 HTML 文件。...而 prerender(npm run prerender)会在构建时生成静态 HTML 文件。...预渲染路径配置需要进行预渲染(预编译 HTML)的网页路径,可以有几种方式进行提供:通过命令行的附加参数:ng run :prerender --routes /product/1...--routes-file routes.txt在项目的 angular.json 文件配置需要的路径: "prerender": {"builder": "@nguniversal/builders...", "/main/team", "/main/contact" ] },配置完成后,重新执行预渲染命令(npm run prerender
是因为ip6 下bind错误 ) 已经监听了 5.测试 发现上面虽然打开了我们的页面其实是爆了一个错误 需要修改 Views\Home\Index.cshtml 文件 Loading...... 去掉如下代码 asp-prerender-module="wwwroot/src/server" asp-prerender-webpack-config="webpack.config.js
它主要使用 prerender-spa-plugin 插件,其与SSR一样都可以加快页面的加载速度,并且侵入性更小,在已上线的项目稍加改动也可以轻松引入预渲染机制,而SSR方案则需要将整个项目结构推翻;...安装配置 首先来看看相关技术栈:vue^2.5.2、vue-router^3.0.1、vue-cli^2.9.6、webpack^3.6.0、prerender-spa-plugin^3.3.0 2.1...安装 安装跟其他库一样 # Yarn $ yarn add prerender-spa-plugin -D # or NPM $ npm install prerender-spa-plugin --.../config') const PrerenderSPAPlugin = require('prerender-spa-plugin') const Renderer = PrerenderSPAPlugin.PuppeteerRenderer...另外注意上面一个renderAfterDocumentEvent: 'render-event'了么,这个意思是在render-event事件触发之后执行prerender,这个事件我们在main.js
但是由于本例子的 Node Express 的服务程序是 TypeScript 应用(server.ts及prerender.ts),所以要使用 Webpack 来转译它。.../server.ts', // This is our Express server for Dynamic universal prerender: '....": "npm run build:prerender && npm run serve:prerender", "build": "ng build", "build:...": "npm run build:client-and-server-bundles && npm run webpack:server && npm run generate:prerender",...根据项目实际的路由信息并在根目录的 static.paths.ts 中配置,提供给 prerender.ts 解析使用。
document.visibilityState 属性,该属性返回一个字符串,表示页面当前的可见性状态,共有三个可能的值: 1、hidden:页面彻底不可见 2、visible:页面至少一部分可见 3、prerender...visible,只有以下四种情况,才会返回 hidden: 1、浏览器最小化 2、浏览器没有最小化,但是当前页面切换成了背景页 3、浏览器将要卸载(unload)页面 4、操作系统触发锁屏屏幕 关于 prerender..., prerender 状态只在支持"预渲染"的浏览器上才会出现,比如 Chrome,可以在用户不可见的状态下,预先把页面渲染出来,等到用户要浏览的时候,直接展示渲染好的网页 可以看到,上面四种场景涵盖了页面可能被卸载的所有情况
幸运的是,浏览器提供了preload、prefetch、preconnect和prerender等指令用来帮助网页优化资源的加载。...四、prerender prerender,也就是预渲染,将会下载完整的网页资源,然后在后台进行渲染,
领取专属 10元无门槛券
手把手带您无忧上云