常见问题
 
 http://www.zhihu.com/question/23101413
 
阻塞特性: 
       JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任何事情,无论其代码是内嵌的还是外部的。 
 
1、浏览器解析html时,是否解析到</html>后,dom树构造完成,触发DOMContentLoaded?
  答:Dom load事件不同的浏览器处理方式不同,你只需要认为在这个事件激发以后,整个html dom文档就是一个可用的状态,此时documen已经被关闭了,调用document.write会刷白整个页面。
2、经过测试,ie8+,ff,chrome,opera都是下载完html后,接着并行下载css和多个js,即使将script放在页面最后</body>之前也是如此,已经不再是以前说的js一个一个下载。我想问放在页面最后</body>之前的js,下载期间是否会阻塞页面渲染(应该不是异步的吧)?

  答:下载是异步的没问题,但是每个javascript执行的时候还是同步的,就是先出现的script标签一定是先执行,即使是并行下载它最后一个下载完成。除非标有defer的script标签,否则任何javascript在执行的时候都会中断当前html文档解析,自然会阻止页面 渲染。

3、浏览器并行下载js和异步下载js有什么性能上的区别?

  答:其实没什么性能上的区别,只是异步下载javascript可以尽快的让用户看到页面,比较安心罢了。

4、在《高性能javascript》中提到,使用JavaScript动态生成script节点,然后将其插入到文档中动态加载js,js加载是异步的,加载和执行不会影响页面渲染!特别不理解,不是说只要执行js就阻塞页面渲染吗?

  答:javascript加载是不会影响已经渲染的页面,但是会中断html文档解析,浏览器会在javascript执行以后决定当前文档是否需要进行重新渲染或者文档重排。所以即使javascript放到最后面也会使浏览器暂停,但不影响之前已经解析出来的dom文档,此时对于用户来说是可操作的,而在之前就加载javascript,浏览器会提早暂停,给用户看到的就是白色的页面,不友好。javascript有可能会修改dom,此时修改dom可能比较危险,因为正处于不稳定的状态,如果使用document.write甚至会迫使浏览器强制解析新出现的动态内容,如果是这种情况,javascript执行完成以后就会进行重排。如果javascript修改了css,影响了layout的话,也会进行重渲染或重排。

5、做一般的项目有没有必要使用LABjs,Require.js等加载库?

  答:项目大了重构起来很方便的,没必要在初期就引入复杂性。

最新文章

  1. c# 读取mck码
  2. cocos初认识
  3. js数组操作大全
  4. &lt;hr/&gt; 水平线样式
  5. 加密算法使用(一):用CRC32来压缩32uuid字符串
  6. jQuery 关于 end() 方法的详细解释
  7. Report_客制化Excel报表中的XLS标记(案例)
  8. 入门级的PHP验证码
  9. Java菜鸟学习笔记--面向对象篇(十八):对象转型&amp;多态
  10. ajax、PHP、session做购物车
  11. 【Android Developers Training】 34. 添加一个简单的分享行为(Action)
  12. JavaSE(一)之类与对象
  13. [codility] Lession1 - Iterations - BinaryGap
  14. 【BZOJ 3569】 DZY Loves Chinese II
  15. css给html添加效果
  16. python 子进程 subpocess 的使用方法简单介绍
  17. ORA-55617解决方法
  18. include_once与require_once的区别
  19. 不管你是否已经准备面试, 这45道Python面试题都对你非常有帮助!(mark!)
  20. go语言学习--go中闭包

热门文章

  1. Java中数组复制的几种方法
  2. Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
  3. CentOS安装tomcat
  4. 0bjective-c 之 NSString 使用详解
  5. T-SQL:SQL Server-数据库查询语句基本查询
  6. std::vector数据复制
  7. nginx 负载均衡相关知识
  8. 开源堡垒机GateOne的安装、配置笔记
  9. matlab 之基础使用
  10. VCS之Git