• 高性能JavaScript之——加载和执行


    加载和执行

    浏览器 单一进程 处理ui渲染和脚本执行

    1. 脚本位置

    1. 与样式行为有关的脚本优先加载,保证页面渲染交互正确性;

    2. js文件可并行下载但页面需等待所有js代码下载执行完成才会继续其他资源下载;

    3. 雅虎特别性能小组提出的优化 Javascript 的首要规则:将脚本放在底部

    1. 组织脚本
      1. 减少页面包含的script标签数
      2. 内嵌脚本放在引用外链样式表的link标签之后会导致页面阻塞去等待样式表的下载,永远不要把内嵌脚本紧跟在 link 标签后面
      3. 考虑到 HTTP 请求会带来额外的性能开销,下载单个 100KB 的文件将比下载 4 个 25KB 的文件更快。减少页面中外链脚本文件的数量将会改善性能。
    2. 无阻塞的脚本
      1. 减少 Javascript 文件大小限制 HTTP 请求数仅仅是创建响应迅速的 Web 应用的第一步。无阻塞脚本的秘诀在于,在页面加载完成后オ加载 Javascript 代码。
      2. 延迟的脚本:HTML4 为script标签定义了一个扩展属性:defer——指明本元素所含的脚本不会修改 DOM,因此代码能安全地延退执行。带有 defer 属性的 script标签可以放置在文档的任何位置。对应的 Javascript 文件将在页面解析到 script 标签时开始下载,但并不会执行,直到 DOM 加载完成(onload 事件被触发前)。当一个带有 defer 属性的 Javascript 文件下载时,它不会阻塞浏览器的其他进程,因此这类文件可以与页面中的其他资源并行下载。HTML5 规范中引入了 async 属性,用于异步加载脚本。async 与 defer 的相同点是采用并行下载,在下载过程中不会产生阻塞。区别在于执行时机,async 是加载完成后自动执行,而 defer 需要等页面完成后执行。defer 属性仅当 src 属性声明时才生效。
      3. 动态脚本元素:文件在该元素被添加到页面时开始下载。这种技术的重点在于:无论在何时启动下载,文件的下载和执行过程不会阻塞页面其他进程。你甚至可以将代码放到页面head区域而不会影响页面其他部分(用于下载该文件的 HTTP 链接本身的影响除外)。
      4. Xmlhttprequest 脚本注入 : 优点1: 代码是在 script 标签之外返回的,因此它下载后不会自动执行,这使得你可以把脚本的执行推迟到你准备好的时候。优点2:同样的代码在所有主流浏览器中都能正常工作。 这种方法的主要局限性是 Javascript 文件必须与所请求的页面处于相同的域,这意味着  JS 文件不能从 CDN 下载。
      5. 推荐的无阻塞模式:向页面中添加大量 Javascript 的推荐做法只需两步:先添加动态加载所需的代码,然后加载初始化页面所需的剩下的代码。因为第一部分的代码尽量精简,甚至可能只包含load函数,它下载执行都很快,所以不会对页面有太多影响。一旦初始代码就位,就用它来加载剩余的 Javascript。
    3. 总结
      1. </body>闭合标签之前,将所有的 script 标签放到页面底部。这能确保在脚本执行前面已经完成了渲染。
      2. 合并脚本。页面中的 script 标签越少,加载也就越快,响应也更迅速。无论外链文件还是内嵌脚本都是如此。
      3. 有多种无阻塞下载 Javascript 的方法:使用script标签的 defer 属性; 使用动态创建的script元素来下载并执行代码; 使用 XHR 对象下载 Javascript 代码并注入页面中;
  • 相关阅读:
    C语言内存调试技巧—C语言最大难点揭秘
    include .h 以及.cpp的记录
    VS2010中<无法打开包括文件:“iostream.h”:>错误解决方法
    #include<iostream>与#include<iostream.h>的区别
    VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
    【Oracle】Oracle日期格式详解
    【EasyUI】 日期格式化
    【TortoiseGit】TortoiseGit将本地库push到远端
    【Tomcat】解决Eclipse无法添加Tomcat Service问题
    【Tomcat】配置Tomcat
  • 原文地址:https://www.cnblogs.com/thinkingthigh/p/13866191.html
Copyright © 2020-2023  润新知