1.js延迟加载
(1)js延迟加载是js性能优化的一种方式
(2)作用:为了提高网页的加载速度
(3)原理:等网页加载完成之后再加载js文件
··需要优化的原因:HTML元素是按照其在页面中出现的次序调用的,如果需要使用JavaScript来操作DOM元素,
比如:获取DOM对象;修改DOM元素的结构
结果JavaScript加载在其需要操作的DOM元素之前,则会引起代码出错,原因是HTML结构没有加载完成,需要操作的DOM元素无法获取,得到的是空对象
(4)js延迟加载有6种方式:
1.defer属性(只支持IE,不建议使用)
2.async属性
··H5为<script>标签新添的属性,执行的原理是异步加载
··存在的问题:无法控制脚本的执行顺序;在load事件前执行;可能在DOMContentLoader事件触发前/后执行
··应用场景:当前页面的脚本之间彼此独立,且不依赖当前页面的其他脚本
3.动态创建DOM方法
4.使用jQuery的getScript方法、
··getScript()是通过HTTP GET请求 载入并执行js文件
··getScript(url,success(response,status))
·url:请求地址
·success:成功的回调函数;response:请求的数据结果;status:返回的状态码
5.setTimeout方法
6.让js文件最后加载

2.js异步加载、js同步加载
(1)js异步加载
··非阻塞加载,在浏览器下载并执行js文件的同时,继续对后续页面的处理
(2)js同步加载
··阻塞加载,直接将<script>放进<head>里,同步加载是安全的
··阻塞加载会阻止浏览器继续解析,直到当前的加载完成,为了优化页面阻塞,最常用的方法是将<script>放到body的结束标签前

3.DOMContentLoaded 和 load 的区别
(1)当HTML文档解析完成就会触发DOMContentLoaded,而当所有资源解析完成才会触发load事件
··存在defer / async 的情况:
·存在defer的情况:等DOM构建完成后执行脚本,而JavaScript脚本需要等待CSSOM解析完成才执行,
所以等DOM、CSSOM、脚本执行完成,DOMContentLoaded才会被触发
·存在async的情况:等HTML文档解析完,DOMContentLoaded就会被触发,不需要等脚本、CSSOM加载等等
(2)如何衡量一个网页的加载速度?
··当网页从空白到出现内容的时间,这个时间就是HTML文档加载、解析后,DOMContentLoaded事件被触发的过程

4.浏览器渲染的原理
(1)浏览器向服务器请求到了HTML文档,然后开始解析,生成DOM(文档对象模型),到这里为止,HTML文档被加载、解析完成,
如果有css则生成CSSOM(css对象模型),然后DOM和CSSOM生成渲染树,有了渲染树就知道了所有节点的样式,
然后根据节点和样式计算它们在浏览器的大小和位置,然后就是绘制到浏览器
(2)其中存在一个问题:JavaScript可以阻塞DOM的生成
··如果在HTML中插入一个脚本,浏览器是默认先执行脚本再继续往下解析HTML,而JavaScript是可以查询任意对象的样式,
所以需要CSSOM生成才可以执行JavaScript
··其中存在同步脚本和异步脚本的区别:
·同步脚本:停止解析,先执行脚本再继续往下解析
·异步脚本:H5中<script>定义了defer 和 async 属性
defer:在后台加载脚本,文档解析不中断,等文档解析完成再执行脚本;defer的执行顺序与编写位置有关
async:在后台加载脚本,文档解析不中断,等脚本加载完成则停止文档的解析,先执行脚本完成,再继续解析文档

最新文章

  1. Android stdio Apktool源码编译
  2. 真核转录组(denovo/resequencing)及案例分析
  3. hdu 4223
  4. JSON 之 SuperObject(3): 访问
  5. VMware系统运维(七)vCenter Inventory Server安装
  6. MySQL 的 read_buffer_size 参数是如何影响写缓冲和写性能的?
  7. 【老鸟学算法】包含 min函数的栈设计——java实现
  8. Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式
  9. Ceph编译安装教程
  10. 2017-2018-1 1623 bug终结者 冲刺003
  11. SpringIOC学习二
  12. 【RevolC FaeLoN Uva 10972】
  13. 展开被 SpringBoot 玩的日子 《 二 》 WEB 开发
  14. Linux samba多用户挂载
  15. 步步为营-42-通过DataAdapter实现增删查改
  16. jquery 元素选择器
  17. singleInstance和singleTask导致startActivityForResult回调失败
  18. 函数对象与仿函数(function object and functor)
  19. 修复IE7浮动元素自动换行的bug
  20. 20165207 实验一 Java开发环境的熟悉

热门文章

  1. JS中有关闭包的相关内容及介绍
  2. 有符号数 无符号数 原码 补码 反码 java用补码表示
  3. spring注解SQL注意事项
  4. requests断点续传功能
  5. python 本地l离线安装whl文件
  6. redis in windows
  7. python_print 函数 (99乘法表)
  8. Miller-Rabin素性判定算法
  9. python机器学习——kmeans聚类算法
  10. sourceTree工具使用方法