浏览器的加载顺序与页面性能优化
详情参考:浏览器的加载与页面性能优化
例子:
一:DNS:在header中添加 <link rel="dns-prefetch" href="//HOSTNAME.com"> 帮助浏览器更好地进行DNS的预解析。
淘宝首页: 预先对页面中用到的所有域名进行dns与解析设置。
二:link prefetch:
由于Web页面加载是同步模型,这意味着浏览器在执行js操作时需要将后续html的加载和解析暂停,因为js中有可能会调用 document.write来改变dom节点,很多浏览器除了html之外还会将css的加载暂停,因为js可能会获取dom节点的样式信息,这个暂停 会导致页面展现速度变慢,为了应对这个问题,Mozilla等浏览器会在执行js的同时简单解析后面的html,提取出链接地址提前下载,注意这里仅是先 下载内容,并不会开始解析和执行
这一行为还可以通过在页面中加入以下标签来提示浏览器
<link rel="prefetch" href="http://">
但这种写法目前并没有成为正式的标准,也只有Mozilla真正实现了该功能,可以看看Link prefetching FAQ
WebKit也在尝试该功能,具体实现是在HTMLLinkElement的process成员函数中,它会调用ResourceHandle::prepareForURL()函数,目前从实现看它是仅仅用做DNS预解析的,和Mozilla对这个属性的处理不一致
对于不在当前页面中的链接,如果需要预下载后续内容可以用js来实现,请参考这篇文章Preload CSS/JavaScript without execution
预下载后续内容还能做很多细致的优化,如在Velocity China
2010中,来自腾讯的黄希彤介绍了腾讯产品中使用的交叉预下载方案,利用空闲时间段的流量来预加载,这样即提升了用户访问后续页面的速度,又不会影响到高峰期的流量,值得借鉴
三:http:
编码识别:
页面的编码可以在http header或meta标签中指明,对于没有指明编码的页面,浏览器会根据是否设置了auto detect来进行编码识别(如在chrome中的View-Encoding菜单)
关于编码识别,Mozilla开源了其中的Mozilla Charset Detectors模块,感兴趣的可以对其进行学习
建议在http
header中指定编码,如果是在meta中指定,浏览器在得到html页面后会首先读取一部分内容,进行简单的meta标签解析来获得页面编码,如WebKit代码中的HTMLMetaCharsetParser.cpp,可以看出它的实现是查找charset属性的值,除了WebKit以外的其它浏览器也是类似的做法,这就是为何HTML5中直接使用如下的写法浏览器都支持
<meta charset="utf-8">
需要注意不设定编码会导致不可预测的问题,应尽可能做到明确指定
如淘宝页面:
加载
对于html的script标签,如果是外链的情况,如:
<script src="a.js"></script>
浏览器对它的处理主要有2部分:下载和执行
下载在有些浏览器中是并行的,有些浏览器中是串行的,如IE8、Firefox3、Chrome2都是串行下载的
执行在所有浏览器中默认都是阻塞的,当js在执行时不会进行html解析等其它操作,所以页面顶部的js不宜过大,因为那样将导致页面长时间空白,对于这些外链js,有2个属性可以减少它们对页面加载的影响,分别是:
- async
- 标识js是否异步执行,当有这个属性时则不阻塞当前页面的加载,并在js下载完后立刻执行
- 不能保证多个script标签的执行顺序
- defer
- 标示js是否延迟执行,当有这个属性时js的执行会推迟到页面解析完成之后
- 可以保证多个script标签的执行顺序
下图来自Asynchronous and deferred JavaScript execution explained,清晰地解释了普通情况和这2种情况下的区别
需要注意的是这两个属性目前对于内嵌的js是无效的
而对于dom中创建的script标签在浏览器中则是异步的,如下所示:
var script = document.createElement('script'); script.src = 'a.js'; document.getElementsByTagName('head')[0].appendChild(script);
为了解决js阻塞页面的问题,可以利用浏览器不认识的属性来先下载js后再执行,如ControlJS就是这样做的,它能提高页面的相应速度,不过需要注意处理在js未加载完时的显示效果
转载于:https://www.cnblogs.com/Alight/p/3374668.html
浏览器的加载顺序与页面性能优化相关推荐
- 如何提高页面加载速度 || 前端的性能优化 || 浏览器渲染页面的过程是什么
1.降低请求量 ① 合并资源,减少http请求数量. ② lazyLoad,如图片懒加载.分批加载,每次只加载一部分. ③ 使用字体图标或CSS绘制,来代替部分图片. 2.加快请求速度 ...
- 如何减少页面加载时间(前端性能优化)
关于优化都会问到的问题,总结了以下几个方法: 减少重复的HTTP请求 (1)减少调用其他页面.文件的数量,将多个小文件合并为一个大文件 (2)精灵图(sprite) 将需要频繁加载的多个图片合成为1个 ...
- ajax预加载html seo,前端性能优化 — JS预加载和懒加载
JS预加载 需求:有时我们需要实现例如快速快速切换页面.图片之类的功能时,能尽快的加载出我们所需的图片会极大提升用户体验,这时用预加载将图片先缓存到浏览器,用户使用需显示图片时无疑会顺畅很多. 核心: ...
- Web前端教程分享:页面性能优化办法有哪些?
引子 互联网有一项著名的8秒原则.用户在访问Web网页时,如果时间超过8秒就会感到不耐烦,如果加载需要太长时间,他们就会放弃访问.大部分用户希望网页能在2秒之内就完成加载.事实上,加载时间每多1秒,你 ...
- 页面性能优化办法有哪些? 1
引子 互联网有一项著名的8秒原则.用户在访问Web网页时,如果时间超过8秒就会感到不耐烦,如果加载需要太长时间,他们就会放弃访问.大部分用户希望网页能在2秒之内就完成加载.事实上,加载时间每多1秒,你 ...
- 页面性能优化的五种办法
前言 大部分用户希望网页能在 2 秒之内就完成加载.事实上,加载时间每多 1 秒,你就会流失 7% 的用户.如果加载需要太长时间,他们就会放弃访问. 以下是我总结性能优化常见的办法: 一.资源压缩与合 ...
- [WebKit]浏览器的加载与页面性能优化
非常棒.非常系统的一份资料,值得阅读! 原文来自百度泛用户体验. 作者:nwind 本文将探讨浏览器渲染的loading过程,主要有2个目的: 了解浏览器在loading过程中的实现细节,具体都做了什 ...
- 转:浏览器加载页面的过程与页面性能优化
本文是转帖,原文:http://www.baiduux.com/blog/2011/02/15/browser-loading/ 发布日期:2011年2月15日 作者:nwind 类别:HTML/CS ...
- 浏览器的加载与页面性能优化
浏览器的加载与页面性能优化 Javascript 异步加载详解 HTML5 <script>元素async,defer异步加载 defer/async都是异步加载js,和HTML并行加载不 ...
最新文章
- php排版word文档试卷,word选择题选项排版
- tensorflow只用CPU运行
- 虚拟机中RedHat Linux系统安装
- iOS之仿QQ好友列表展开收缩效果的实现
- OpenOffice java api UNO 设置属性总结
- android 中 四舍五入的method */
- MySQL 创建联结
- python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
- 阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
- 基于bootstrap table配置的二次封装
- SGuard64.exe(SGuardwnd) ACE-Guard Client EXE:造成磁盘经常读写,游戏卡顿,及解决方案
- android apk加密技术,android apk 自我保护技术-加密apk
- 计算机网络 互联网使用的安全协议
- 发光学类毕业论文文献包含哪些?
- python语法简单吗_python基本语法练习实例 python好学吗? 语法简单吗? 举个例子?...
- 目标检测类mAP等衡量指标的含义和计算方法
- 电子计算机上面的mrc是什么意思,计算器中的M-键是什么功能?
- 2.4 人工智能项目开发与验收
- Conv2Former
- 阿里云IoT物模型-属性,服务,事件通信的topic和payload详解——设备管理运维类
热门文章
- php dw制作购物车,php – 以编程方式向WooCommerce购物车添加免税费用
- flir红外数据集_FLIR联合Foresight推广长波红外+可见光四摄视觉系统
- 基于yolo5工地安全帽和禁入危险区域识别系统,附数据集
- 中文问句匹配冠军团队的NLP读书会笔记分享
- chart控件支持鼠标滚轮放大缩小_强大的鼠标侧键功能设置工具:X-Mouse Button Control...
- python3生成随机数_python3实现随机数
- 数据结构排序系列详解之六 树形选择排序
- Team Foundation Server XXX 不存在,或者此时不可访问:解决方案
- Android数据存储之SQLite数据库存储
- 类型混淆漏洞实例浅析