信大家都听过这么一句话,“脸蛋和身材决定了我是否愿意了解你的心灵,而你的心灵又决定了我是否会一票否决掉你的脸蛋和身材”。对于一个网站来说,这个道理也是同样适用的,即使你有着丰富而有价值的内容,但是客户却在外面半天进不去,也会慢慢地失去耐心。
尤其在如今这个信息爆炸的时代,人们的节奏总是快速的,对于一个网站的耐心毕竟是有限的可怜的,如果网站不进行优化必定会流失相当一部分的客户,带来不必要的损失。那么从Web前端的性能优化上来说有哪些常见、实用的方法呢?下面千锋武汉Web前端培训小编就列举6个常见且实用的Web前端性能优化方法。
1、使用CDN
CDN(内容分发网络)部署在各大运营商机房,当用户通过浏览器请求资源时可以直接反馈给用户,极大的减轻了服务器数据中心的压力。本质上CDN也是一种缓存,如果你的所在地距离某个CDN节点很近,那么网站响应的速度提升也是非常明显的。另外CDN所缓存的资源主要为静态资源,如静态页面、图片、css和js文件等。CDN加速对于一些遍布范围较大的网站来说效果最为明显,使用的话像阿里云CDN产品,其节点多达280多个,覆盖运营商也比较全面。
2、减少外部http协议
网页加载的时间与http请求密不可分,而外部资源的加载的速度则与主机服务提供商服务器架构和分布地点有关。我们可以通过检查自己的网站上多余的图片、css、JavaScript和一些组件,然后对应的去逐个完善,就可以减少一些http请求。
3、使用预获取
顾名思义预获取就是在真正有需要去请求之前就获取一些必要的数据和资源,以提升用户的浏览体验。预获取主要有三大方式:
1.链接预先获取
2.DNS预先获取
3.预先渲染
根据你想要使用的预先获取形式,你只需在网站 HTML 中的链接属性上增加 rel="prefetch",rel="dns-prefetch",或者 rel="prerender" 标记。
4、压缩HTML、CSS和JavaScript
在编写代码时候会有一些多余的空格,这会占用字节,使用一些压缩工具可以有效解决这个问题。值得注意的是,压缩后的文件,其可读性就会变差,后期想维护就会变得困难了。
5、优化图片
一张高清的图片大概几兆左右,而很多时候我们并不需要这样的画质,一般我们都会选择将其保存为高画质的就可以了,这样会有效减小加载图片带来的压力。像JPEG图片那样包含了时间、地点、相机型号的格式,更不是我们所需要的。
6、Ajax请求方式
POST的请求,是不可以在客户端缓存的,每次请求都需要发送给服务器进行处理,每次都会返回状态码200。(可以在服务器端对数据进行缓存,以便提高处理速度)
GET的请求,是可以(而且默认)在客户端进行缓存的,除非指定了不同的地址,否则同一个地址的AJAX请求,不会重复在服务器执行,而是返回304。所以在进行Ajax请求的时候,可以选择尽量使用get方法,这样可以使用客户端的缓存,提高请求速度。
以上就是千锋武汉Web前端培训小编整理的6个常见且实用的Web前端性能优化方法。进行Web前端优化似乎需要花费很大的精力,相信这篇应用指南中的一些小技巧能帮你极大改善网站加载速度。网站加载地越快,则用户体验越佳。因此,对Web前端进行优化能使给你和你的用户都带来益处。
其实还有很多Web前端性能的优化手段,以上只是列举了部分。如果大家有更好的建议的话,可以在下方留言。
起HTML标签,前端工程师会非常的有发言权,因为在平时开发中一定会用到,可以说是前端的入门必备知识。但往往在意更多的是页面的渲染效果及交互方式,也就是页面可见的部分,比如导航栏,菜单栏,列表,图文等。
其实还有一些页面上没有呈现出来却非常重要的标签,这些标签大部分在页面的头部head标签内,虽然在页面上看不见摸不着,但如果在特定的场景下,会产生意想不到的效果。下面我将从交互优化,性能优化,搜索优化三个方面并结合场景来聊聊被“忽视”的HTML标签。
交互优化
meta 标签:自动跳转/刷新
假设要实现一个类似自动播放的页面,首先我们第一反应会想到用js定时器控制页面跳转来完成。但是其实有更加简便的方法,通过meta标签的refresh功能来实现。
<meta http-equiv="refresh" content="10; url=view2.html">
上面的代码会在 10s 之后自动跳转到同域下的 view2.html 页面。我们要实现自动播放的功能,只需要在每个页面的 meta 标签内设置好下一个页面的地址即可。
如果要实现定时刷新的功能,只要去除后面url即可:
<meta http-equiv="refresh" content="10">
注意,用meta标签实现刷新/跳转的过程是不可取消的,所以需要手动取消的还是得老老实实使用js的定时器,但是对于简单的定时刷新或跳转,还是可以去亲自实践meta的用法。
title 标签:消息提醒
消息提醒功能实现在HTML5标准发布之前,浏览器还没有开放图标闪烁、音频播放,弹出系统消息之类的api,只能借助其他非常规的手段,比如修改title 标签来达到类似的效果。
下面的代码通过定时修改title标签的内容,实现了消息提醒的功能,可以让用户在浏览其他页面时候,及时发现服务端返回的消息。
let messageNum=1; // 消息条数
let count=0; // 计数器
const msgInterval=setInterval(()=> {
count=(count + 1) % 2;
if(messageNum===0) {
// 通过DOM修改title
document.title +=`当前页面`;
clearInterval(msgInterval);
return;
}
const pre=count % 2 ? `新消息(${msgNum})` : '';
document.title=`${pre}当前页面`;
}, 1000);
当然,动态修改title标签的用途不仅仅是消息提醒,还可以显示一些异步进行的任务,比如下载进度,上传进度等。
性能优化
script 标签:调整加载顺序提升渲染速度
不知道你们有没有过这样的体验:当在浏览器打开某个页面时,发现页面一直在loading转圈,或者等了好长的时间页面才有响应。这一现象,除了网络网速的原因外,大多数都是由于页面结构设计不合理导致加载时间过长。因此,如果想要提升页面的渲染速度,就需要了解浏览器页面的渲染过程是怎样的,从根本上来解决问题。
浏览器在加载页面的时候会用到 GUI 渲染线程和 JavaScript 引擎线程。其中,GUI 渲染线程负责渲染浏览器界面 HTML 元素,JavaScript 引擎线程主要负责处理 JavaScript 脚本程序。由于 JavaScript 在执行过程中还可能会改动界面结构和样式,因此它们之间被设计为互斥的关系。也就是说,当 JavaScript 引擎执行时,GUI 线程会被挂起,等执行完 JavaScript 的脚本程序后又会切换 GUI 线程继续渲染页面。
所以我们可以知道页面渲染过程中包含了请求脚本文件以及执行脚本文件的时间,但页面的首次渲染可能并不需要执行完全部的文件,这些请求和执行文件的动作反而延长了用户看到页面的时间,从而降低了用户体验。
为了快速将内容呈现给用户,减少用户等待时间,可以借助script标签的3个属性来实现:
async:表示立即请求脚本文件,但不阻塞 GUI 渲染引擎,而是文件加载完毕后阻塞 GUI 渲染引擎并立即执行文件内容。
defer。立即请求脚本脚本,但不阻塞 GUI 渲染引擎,等到解析完 HTML 之后再执行文件内容。
HTML5 标准 type,对应值为“module”。让浏览器按照 ECMA Script 6 标准将文件当作模块进行解析,默认阻塞效果同 defer,也可以配合 async 在请求完成后立即执行。
所以可以得知,采用defer 属性以及 type="module" 情况下能保证渲染引擎的优先执行,从而减少执行文件内容消耗的时间,让用户更快地看见页面(即使这些页面内容可能并没有完全地显示)。除此外还要知道,当渲染引擎解析 HTML 遇到 script 标签引入文件时,会立即进行一次渲染,这就是为什么会把引用JavaScript 代码的 script 标签放入到 body 标签底部。
link 标签:通过预处理提升渲染速度
在我们对中大型项目进行性能优化时,往往会对资源做减法(gzip压缩,缓存等)或除法(按需打包,按需加载),可是如果能想到 link 标签的 rel 属性值来进行预加载,也能加快页面的渲染速度。
dns-prefetch。当 link 标签的 rel 属性值为“dns-prefetch”时,浏览器会对某个域名预先进行 DNS 解析并缓存。这样,当浏览器在请求同域名资源的时候,能省去从域名查询 IP 的过程(DNS查询),从而减少时间损耗。(注意:这个属性还在实验阶段,部分浏览器的部分版本支持)
preconnect。让浏览器在一个 HTTP 请求正式发给服务器前预先执行一些操作,这包括 DNS 解析、TLS 协商、TCP 握手,通过消除往返延迟来为用户节省时间。(注意:这个属性还在实验阶段,部分浏览器的部分版本支持)
prefetch/preload。两个值都是让浏览器预先下载并缓存某个资源,但不同的是,prefetch 可能会在浏览器忙时被忽略,而 preload 则是一定会被预先下载。
prerender。浏览器不仅会加载资源,还会解析执行页面,进行预渲染。(注意:这个属性还在实验阶段,部分浏览器的部分版本支持)
搜索优化
你所写的前端代码,除了要让浏览器更好执行,有时候也要考虑更方便其他程序(如搜索引擎)理解。合理地使用 meta 标签和 link 标签,恰好能让搜索引擎更好地理解和收录我们的页面。
meta 标签:提取关键信息
通过 meta 标签可以设置页面的描述信息,从而让搜索引擎更好地展示搜索结果。
例如,在百度中搜索“淘宝”,就会发现网站的描述信息,这些描述信息就是通过 meta 标签专门为搜索引擎设置的,目的是方便用户预览搜索到的结果。
为了让搜索引擎更好地识别页面,除了描述信息description之外还可以使用关键字,这样即使页面其他地方没有包含搜索内容,也可以被搜索到(当然搜索引擎有自己的权重和算法,如果滥用关键字是会被降权的,比如 Google 引擎就会对堆砌大量相同关键词的网页进行惩罚,降低它被搜索到的权重)。
当我们搜索关键字“安全购物”的时候搜索结果会显示淘宝网的信息,虽然显示的搜索内容上并没有看到“安全购物”字样,这就是因为淘宝网页面中设置了这个关键字。
对应代码如下:
<meta content="淘宝,掏宝,网上购物,C2C,在线交易,交易市场,网上交易,交易市场,网上买,网上卖,购物网站,团购,网上贸易,安全购物,电子商务,放心买,供应,买卖信息,网店,一口价,拍卖,网上开店,网络购物,打折,免费开店,网购,频道,店铺" name="keywords">
在实际工作中,推荐使用一些关键字工具来挑选,比如
Google Trends
https://trends.google.com/trends
站长工具
https://data.chinaz.com/keyword/
link 标签:减少重复
有时候为了用户访问方便或者出于历史原因,对于同一个页面会有多个网址,又或者存在某些重定向页面,比如:
- https://baidu.com/a.html
- https://baidu.com/detail?id=abcd
那么在这些页面中可以这样设置:
<link href="https://baidu.com/a.html" rel="canonical">
这样可以让搜索引擎避免花费时间抓取重复网页。不过需要注意的是,它还有个限制条件,那就是指向的网站不允许跨域。
当然,要合并网址还有其他的方式,比如使用站点地图,或者在 HTTP 请求响应头部添加 rel="canonical"。
*请认真填写需求信息,我们会在24小时内与您取得联系。