zoukankan      html  css  js  c++  java
  • JS阻塞的问题

    常见问题
     
     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等加载库?

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

  • 相关阅读:
    Powershell数据处理
    Powershell About Active Directory Group Membership of a domain user
    Powershell About Active Directory Server
    Oracle Schema Objects——Tables——TableStorage
    Oracle Schema Objects——Tables——TableType
    English Grammar
    Oracle Database Documentation
    Oracle Schema Objects——Tables——Oracle Data Types
    Oracle Schema Objects——Tables——Overview of Tables
    What is Grammar?
  • 原文地址:https://www.cnblogs.com/darr/p/4484742.html
Copyright © 2011-2022 走看看