Nuxt.js(二、解决首屏速度与SEO)
Nuxt.js(二、解决首屏速度与SEO)
1.普通的Vue SPA初始化加载速度很慢
在传统的web应用中,当用户请求一个页面时,服务器直接返回一个html文件,浏览器直接渲染出来。但是,在vue应用中,这个过程则可能比您所希望的要慢,特别是在网速较慢的情况下。它的步骤如下:
- 当用户初始请求任何的页面时,服务端都会返回引索页index.html
- 第二步浏览器需要下载vue相关的Javascript文件
- vue引擎初始化并运行
- vue路由到相应的页面并加载相关的组件
- 执行组件内的javascript,获取api数据
- 浏览器渲染模板到用户端,用户看到首屏
- 之后用户在切换到应用的其他页面中时,浏览器只会下载该页面相关的javascript,然后直接渲染

一旦vue初始化之后,web应用后续的运行就会非常快,但是初始化加载可能会很慢
2.nuxt的解决方案:universal mode
让我们来看看nuxt的universal mode是怎么初始化的,它的步骤如下:
- 当用户初始请求某个页面时,服务端会在服务端直接渲染好这个页面,然后直接返回page.html
- 浏览器渲染page.html模板到用户端,用户可以很快的看到首屏进入应用
- 然后浏览器需要下载vue相关的Javascript文件
- vue引擎初始化并运行
- vue将接管初始化的page.html,并与之耦合,使得应用接下来的运行回到正常的步骤上
- 之后用户在切换到应用的其他页面中时,浏览器只会下载该页面相关的javascript,然后直接渲染,这样就回到了原始的应用中

如您所见,在初始化任何JavaScript之前都会先渲染新页面(首屏)。一旦下载JavaScript并运行Vue,页面就会“耦合”,这基本上意味着它会变成一个普通的SPA(单页应用程序)。
3.nuxt的智能预读取
Nuxt 2.4中发布了Nuxt.js的一个新特性,称为智能预读取,它与universal mode相结合,提供了更好的用户体验。
使用此功能(默认情况下已启用),当nuxt-link路由在视口中可见时(即页面滚动到路由入口元素时),Nuxt.js将自动下载链接目标页面所需要的javascript。当单击路由调整时,JavaScript已经将目标组件准备好了,目标页几乎立刻渲染呈现,而不是等待组件下载。

4.vue-meta
vue SPA应用对SEO不友好,我们都知道,vue构建的页面依赖于加载要呈现的JavaScript。因此我们的SPA应用会有以下的一些问题:
- 搜索爬虫程序可能不支持抓取JavaScript的功能。
- Google是唯一一个尝试渲染JavaScript的引擎。
- 一个JavaScript错误可能导致整个站点没有被索引。
- 如果你的页面太慢,可能根本就没有索引。
- 客户端渲染的JS网站历史排名并不高。
一张网页相对于搜索引擎最重要的两个标签
1<title> the Title </title>
2<meta name='description' content='the description'>
3//当你搜索某一关键词时,页面显示方式如下图

为了管理页面的这些头部信息,nuxt引入了vue-meta来完成这一功能,这个是一个独立的插件,它也可以在nuxt外使用,而且vue meta支持ssr,在nuxt universal mode中可以直接在服务端渲染中完成header信息的更新,你的页面组件上vue-meta配置看起来将会是这样:
1head() {
2 return {
3 title: 'the about page',
4 meta: [
5 {
6 hid: 'description',
7 name: 'description',
8 content: 'the about description'
9 }
10 ]
11 }
12}

Nuxt.js(二、解决首屏速度与SEO)的更多相关文章
- ssr 之Nuxt.js
ssr:server side rendering(服务端渲染),目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容 ...
- 从壹开始 [ Nuxt.js ] 之一 || 为开源收录Bug之 TiBug项目 开篇讲
缘起 哈喽大家周二好呀,刚刚经历过了几天火车抢票,整个人都不好了,不知道小伙伴对今年的春节是否还一如既往的期待呢,眼看都要春节了,本来也想写篇2018总结篇,但是怕不免会出现鸡汤文的窠臼嫌疑,想想还是 ...
- vue目首屏添加skeleton骨架屏
1. 安装插件:npm install vue-skeleton-webpack-plugin 2. 在src目录下创建 Skeleton.vue <template> <div c ...
- Vue项目优化首屏加载速度
Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...
- 【Vuejs】317- 提升90%加载速度——Vuecli下的首屏性能优化
点击上方"前端自习课"关注,学习起来~,所以接下来还会介绍一些它们在优化上的异同 的话,先安装插件 cnpm intall webpack-bundle-analyzer –sav ...
- 【Vuejs】269- 提升90%加载速度——vuecli下的首屏性能优化
前言 之前用 ,所以接下来还会介绍一些它们在优化上的异同 分析 vuecli 2.x自带了分析工具只要运行 npm run build --report 如果是 vuecli 3的话,先安装插件 cn ...
- 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API
前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...
- 解决React首屏加载白屏的问题
众所周知,在项目中如果在资源加载请求还未完成的时候,由于阻塞机制,会出现首页白屏的问题,产生很差的用户体验.本文以react为例,提供一个解决方法. 解决原理:使用 onreadystatechang ...
- Vue(三十二)SSR服务端渲染Nuxt.js
初始化Nuxt.js项目步骤 1.使用脚手架工具 create-nuxt-app 创建Nuxt项目 使用yarn或者npm $ yarn create nuxt-app <项目名> 注:根 ...
随机推荐
- Intel Quartus Prime Pro Edition 权限提升漏洞
受影响系统:Intel Quartus Prime Pro Edition < 19.3描述:CVE(CAN) ID: CVE-2019-14603 Intel Quartus Prime Pr ...
- Ubuntu下Linux配置内核各种常见错误和解决办法
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 这篇把Ubuntu下Linux配置内核各种常见错误和解决办法给大家讲解一下,希望可以帮助到大家. 一.Ubuntu系统中缺少各种依赖包导致的问题 1 ...
- Linux-timedatectl使用
Linux下使用timedatectl命令时间时区操作详解 timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系 ...
- 域渗透 | kerberos认证及过程中产生的攻击
文章首发于公众号<Z2O安全攻防> 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...
- Java如何实现定时任务?
我是3y,一年CRUD经验用十年的markdown程序员常年被誉为优质八股文选手 挺早就规划了要引入分布式定时任务框架了,在年前austin就已经接入了,但代码过年一直都没写,文章也就一直拖到今天了 ...
- CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) A ~ D
A. 给定一个序列,对于任意1<=k<=n 都满足|ai−ak|+|ak−aj|=|ai−aj|, 找满足条件的i和j并输出 思路: 观察样例,发现输出的是最大值和最小值,那么猜答案是最大 ...
- Java思考——HashSet集合如何保证元素的唯一性也就是不包含重复元素?
首先将源码逐级找出来1.HashSet<String> hs=new HashSet<String>(); hs.add("hello"); ...
- tea加密算法及其变种的研究
tea 介绍 "TEA" 的全称为"Tiny Encryption Algorithm" 是1994年由英国剑桥大学的David j.wheeler发明的. T ...
- vue自定义指令?
除核心指令之外的指令, 使用directive进行注册. 指令自定义钩子函数: bind, inserted, update, componentUpdated, unbind
- Java的HashMap是如何工作的?
HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值. HashMap 基于 hashing 原理,我们通过 put ()和 get ()方法储存和获取对象.当我们将键值对 ...