【javascript】JSON

1、json 是一种传播数据的格式(以对象为样板,本质上就是对象。但用途有区别,对象就是本地用的,json是用来传输的

  {

    "name" : "deng",   //属性名最好加双引号

    "age" : 123

  }

2、JSON.parse();     String  --> JSON

     JSON.stringify();  JSON --> String

3、domTree + cssTree = randerTree

   reflow 重排: dom节点的删除添加dom节点的宽高变化位置变化display: none --> blockoffsetWidth offsetLeft

   repaint 重绘

4、异步加载JSON

      js加载的缺点: 加载工具方法没必要阻塞文档,js 加载会影响页面效率, 一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作,有些工具方法需要按需加载,用到在加载,不用不加载

  javascript 异步加载的三种方案

    1)defer 异步加载,但要等到dom文档全部解析完才会被执行。

              只有IE能用,也可以将代码写到内部

      <script type=”text/javascript” src=”js/index.js” defer=”defer”></script>

      <script type=”text/javascript” defer=”defer”>

        //代码体

      </script>

        2)async 异步加载,加载完就执行,async只能加载外部脚本,不能把js 写在script标签里

      <script type=”text/javascript” src=”js/index.js” async=”async”></script>

       3)创建script, 插入到DOM中,加载完毕后 callBack

function loadScript(url, callback) {
  var script = diciment.createElement('script');
  script.type = 'text/javascript';
  if(script.readyState){
    //IE
    script.onreadystatechange = function(){
      if(script.readyState == "complete"|| script.readyState == "loaded"){
        callback();
      }
    }
  } else {
    //safari chrome firefox opera
    script.onload = function() {    
      callback();     // 在这执行,兼容性很好  
    }
  }
  script.src =url;     
  document.head.appendChild(script); //到这里才执行 demo.js } loadScript('demo.js', function() {   test(); });

5、js加载时间线

  1、创建document对象,开始解析web页面,这个阶段 document.readyState = 'loading'

  2、遇到link外部css,创建线程加载,并继续解析文档

  3、遇到外部js,并且没有设置async、defer, 浏览器加载,并阻塞,等待js加载完成并执行js

  4、遇到外部js,并且设置async、defer, 浏览器创建线程加载,并继续解析文档, 对于async属性的脚本,脚本加载完成后立即执行(异步加载禁止使用document.write())会把整个文档替换

  5、遇到img等,先正常解析dom结构,然后浏览器异步加载src,并继续解析文档  

  6、当文档解析完成,document.readyState = 'interactive'

  7、文档解析完成后,所有设置有defer的脚本会按照顺序执行。  

  8、document对象触发DOMContentLoaded事件,这也标志着程序执行从同步脚本执行阶段,转化为事件驱动阶段

  9、当所有async的脚本加载完成并执行后,img等加载完成后,document.readyState = 'conplete' ,window对象触发load 事件

  10、从此,以异步响应方式处理用户输入,网络事件等。

  

如果要把js写在上面,应该这样写:

document.addEventListener('DOMContentLoaded', function() {

  var div = document.getElementsByTagName('div')[0];

  console.log(div);

},false)

猜你喜欢

转载自www.cnblogs.com/hjysunshine/p/12284874.html