js 延迟加载 改变JS的位置加快网页加载速度
需积分: 0 5 浏览量
更新于2020-10-27
收藏 35KB PDF 举报
在讨论如何通过延迟加载JavaScript代码来加快网页加载速度之前,首先需要了解JavaScript代码在页面加载过程中如何影响页面的渲染。JavaScript的执行会阻塞DOM的构建,也就是说,在浏览器解析HTML生成DOM树时,如果遇到JavaScript代码,会暂停HTML的解析,转而执行JavaScript代码。这意味着如果在页面的<head>标签中放置过多的JavaScript代码,将会导致页面加载时间变长,因为浏览器需要等待JavaScript代码执行完毕后才能继续解析HTML。理解了这个原理之后,我们可以总结以下几点重要的知识点:
1. 延迟加载JavaScript代码
延迟加载JavaScript代码是指将JavaScript的执行推迟到页面加载完毕之后。这可以通过JavaScript的内置函数setTimeout实现。例如,可以设置一个定时器,在页面加载3秒后执行某个JavaScript文件的加载。这样做的好处是页面能够先加载完成,给用户先看到页面内容,然后再加载那些不是立即需要的JavaScript代码。
2. 将JavaScript代码放在HTML文档底部
将JavaScript标签放置在<body>标签的底部是一个常用且有效的提升页面加载速度的方法。因为浏览器是从上到下解析HTML文档的,将JavaScript放置在底部可以确保浏览器在解析完页面的主体内容之后再加载JavaScript,这样可以减少浏览器解析HTML时被阻塞的时间。注意,在HTML4中,推荐在</body>标签之前放置JavaScript标签,而在HTML5中,则是推荐直接将JavaScript放在</body>标签内。
3. 动态创建JavaScript标签
动态创建JavaScript标签是一种在页面加载过程中,不是直接在HTML中写死JavaScript代码,而是通过JavaScript创建script标签并将其添加到DOM中。这样做的好处是可以在页面加载的任何时刻动态地加载JavaScript文件,而不会影响到页面的渲染。例如,可以先在页面上显示“加载中...”的文字或加载动画,等到实际的JavaScript代码加载完成后再替换显示内容。
4. 用“async”和“defer”属性加载外部JavaScript
HTML5为script标签新增了两个属性:async和defer,这两个属性都是用来改进脚本加载行为的。async属性告诉浏览器该脚本应异步加载,加载完即执行,不会阻塞HTML的解析。而defer属性则告诉浏览器在HTML解析完毕后立即执行脚本,但是会等待所有同步脚本执行完毕之后才开始执行。使用这些属性,可以更精细地控制JavaScript的加载时机,以提高页面的加载速度和用户体验。
5. 利用现代前端构建工具的代码分割功能
当代前端开发中,使用如Webpack、Rollup等构建工具已经是标准实践。这些工具提供了代码分割(code splitting)的功能,可以根据应用的不同模块,将JavaScript代码分割成多个包(chunks),并且按需加载。这样可以有效地减少首屏加载时需要加载的代码量,只有在用户实际需要使用到某个功能时,才会加载对应的代码。
6. 使用外部脚本文件
尽量使用外部的.js文件而不是内联JavaScript代码。因为外部的.js文件可以被浏览器缓存,当用户再次访问页面时,浏览器可以直接使用缓存中的脚本文件,不需要重新下载。内联JavaScript每次加载页面时都会重新下载,增加了不必要的带宽消耗和加载时间。
通过上述方法,可以有效地通过延迟加载JavaScript来加快网页的加载速度,从而改善用户体验。需要注意的是,不同场景下效果最好的延迟加载策略可能会有所不同,因此实际应用中需要根据具体情况进行适当的策略选择和调整。
weixin_38635996
- 粉丝: 3
- 资源: 851
最新资源
- C#源码 上位机 联合Visionpro 通用框架开发源码,已应用于多个项目,整套设备程序,可以根据需求编出来,具体Vpp功能自己编 程序包含功能 1.自动设置界面窗体个数及分布 2.照方式以命令触
- 程序名称:悬架设计计算程序 开发平台:基于matlab平台 计算内容:悬架偏频刚度挠度;螺旋弹簧,多片簧,少片簧,稳定杆,减震器的匹配计算;悬架垂向纵向侧向力学、纵倾、侧倾校核等;独立悬架杠杆比,等效
- 华为OD+真题及解析+智能驾驶
- jQuery信息提示插件
- 基于stm32的通信系统,sim800c与服务器通信,无线通信监测,远程定位,服务器通信系统,gps,sim800c,心率,温度,stm32 由STM32F103ZET6单片机核心板电路、DS18B2
- 充电器检测9-YOLO(v5至v11)、COCO、Create充电器检测9L、Paligemma、TFRecord、VOC数据集合集.rar
- 华为OD+考试真题+实现过程
- 保险箱检测51-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 五相电机邻近四矢量SVPWM模型-MATLAB-Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成; (2)输出部分仿
- 一对一MybatisProgram.zip