说起HTML标签,前端工程师会非常的有发言权,因为在平时开发中一定会用到,可以说是前端的入门必备知识。但往往在意更多的是页面的渲染效果及交互方式,也就是页面可见的部分,比如导航栏,菜单栏,列表,图文等。 其实还有一些页面上没有呈现出来却非常重要的标签,这些标签大部分在页面的头部head标签内,虽然在页面上看不见摸不着,但如果在特定的场景下,会产生意想不到的效果。下面我将从交互优化,性能优化,搜索优化三个方面并结合场景来聊聊被忽视的HTML标签。 交互优化 meta标签:自动跳转刷新 假设要实现一个类似自动播放的页面,首先我们第一反应会想到用js定时器控制页面跳转来完成。但是其实有更加简便的方法,通过meta标签的refresh功能来实现。metahttpequivrefreshcontent10;urlview2。html 上面的代码会在10s之后自动跳转到同域下的view2。html页面。我们要实现自动播放的功能,只需要在每个页面的meta标签内设置好下一个页面的地址即可。 如果要实现定时刷新的功能,只要去除后面url即可:metahttpequivrefreshcontent10 注意,用meta标签实现刷新跳转的过程是不可取消的,所以需要手动取消的还是得老老实实使用js的定时器,但是对于简单的定时刷新或跳转,还是可以去亲自实践meta的用法。 title标签:消息提醒 消息提醒功能实现在HTML5标准发布之前,浏览器还没有开放图标闪烁、音频播放,弹出系统消息之类的api,只能借助其他非常规的手段,比如修改title标签来达到类似的效果。 下面的代码通过定时修改title标签的内容,实现了消息提醒的功能,可以让用户在浏览其他页面时候,及时发现服务端返回的消息。letmessageNum1;消息条数letcount0;计数器constmsgIntervalsetInterval((){count(count1)2;if(messageNum0){通过DOM修改titledocument。title当前页面;clearInterval(msgInterval);return;}constprecount2?新消息({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。让浏览器按照ECMAScript6标准将文件当作模块进行解析,默认阻塞效果同defer,也可以配合async在请求完成后立即执行。 所以可以得知,采用defer属性以及typemodule情况下能保证渲染引擎的优先执行,从而减少执行文件内容消耗的时间,让用户更快地看见页面(即使这些页面内容可能并没有完全地显示)。除此外还要知道,当渲染引擎解析HTML遇到script标签引入文件时,会立即进行一次渲染,这就是为什么会把引用JavaScript代码的script标签放入到body标签底部。 link标签:通过预处理提升渲染速度 在我们对中大型项目进行性能优化时,往往会对资源做减法(gzip压缩,缓存等)或除法(按需打包,按需加载),可是如果能想到link标签的rel属性值来进行预加载,也能加快页面的渲染速度。 dnsprefetch。当link标签的rel属性值为dnsprefetch时,浏览器会对某个域名预先进行DNS解析并缓存。这样,当浏览器在请求同域名资源的时候,能省去从域名查询IP的过程(DNS查询),从而减少时间损耗。(注意:这个属性还在实验阶段,部分浏览器的部分版本支持) preconnect。让浏览器在一个HTTP请求正式发给服务器前预先执行一些操作,这包括DNS解析、TLS协商、TCP握手,通过消除往返延迟来为用户节省时间。(注意:这个属性还在实验阶段,部分浏览器的部分版本支持) prefetchpreload。两个值都是让浏览器预先下载并缓存某个资源,但不同的是,prefetch可能会在浏览器忙时被忽略,而preload则是一定会被预先下载。 prerender。浏览器不仅会加载资源,还会解析执行页面,进行预渲染。(注意:这个属性还在实验阶段,部分浏览器的部分版本支持) 搜索优化 你所写的前端代码,除了要让浏览器更好执行,有时候也要考虑更方便其他程序(如搜索引擎)理解。合理地使用meta标签和link标签,恰好能让搜索引擎更好地理解和收录我们的页面。 meta标签:提取关键信息 通过meta标签可以设置页面的描述信息,从而让搜索引擎更好地展示搜索结果。 例如,在百度中搜索淘宝,就会发现网站的描述信息,这些描述信息就是通过meta标签专门为搜索引擎设置的,目的是方便用户预览搜索到的结果。 为了让搜索引擎更好地识别页面,除了描述信息description之外还可以使用关键字,这样即使页面其他地方没有包含搜索内容,也可以被搜索到(当然搜索引擎有自己的权重和算法,如果滥用关键字是会被降权的,比如Google引擎就会对堆砌大量相同关键词的网页进行惩罚,降低它被搜索到的权重)。 当我们搜索关键字安全购物的时候搜索结果会显示淘宝网的信息,虽然显示的搜索内容上并没有看到安全购物字样,这就是因为淘宝网页面中设置了这个关键字。 对应代码如下:metacontent淘宝,掏宝,网上购物,C2C,在线交易,交易市场,网上交易,交易市场,网上买,网上卖,购物网站,团购,网上贸易,安全购物,电子商务,放心买,供应,买卖信息,网店,一口价,拍卖,网上开店,网络购物,打折,免费开店,网购,频道,店铺namekeywords 在实际工作中,推荐使用一些关键字工具来挑选,比如GoogleTrends https:trends。google。comtrends 站长工具 https:data。chinaz。comkeyword link标签:减少重复 有时候为了用户访问方便或者出于历史原因,对于同一个页面会有多个网址,又或者存在某些重定向页面,比如: https:baidu。coma。html https:baidu。comdetail?idabcd 那么在这些页面中可以这样设置:linkhrefhttps:baidu。coma。htmlrelcanonical 这样可以让搜索引擎避免花费时间抓取重复网页。不过需要注意的是,它还有个限制条件,那就是指向的网站不允许跨域。 当然,要合并网址还有其他的方式,比如使用站点地图,或者在HTTP请求响应头部添加relcanonical。