网站首页 > 教程文章 正文
页面加载 JS 顺序或方式不同,可能会导致功能失效、错误的产生或加载解析时间过长,拖慢整个页面展示。
了解 JS 的加载顺序
了解页面元素的加载顺序,找到 JS 执行失败原因。有时明明没有问的代码,可就获取不到元素值或信息,这可能是JS执行时间过早或过晚,而导致的 JS 执行失败。我们来看一幅图,了解defer、async属性对JS下载、执行顺序的影响
- 默认情况下,浏览器解析到JS文件就会立即下载文件,并执行文件,JS提前执行,获取不到页面元素,并导致页面解析中断,拖慢整个页面的加载。
- 添加async属性后,就会异步下载JS文件并执行,执行时间不可控,JS执行时间过早或过晚,而导致的 JS 执行错误或失败。
- 添加defer属性后,就会异步下载JS文件,等页面解析完成后再执行JS
Ready方法的实现
很多时候我们不把JS放在head中,而把JS放到body的最后面也就很好解释了?
- 首先,JS的下载和执行会中断页面的解析,拖慢整个页面展示,
- 然后,放在head中,页面元素还没有加载,JS方法就无法获取或处理页面上的元素,这一点很容易忽视,
- 但是,我们还有ready方法。
jQuery中的ready方法会在页面解析后运行,语法如下:
//语法 1
$(document).ready(function)
//语法 2
$().ready(function)
//语法 3
$(function)
自定义方法,通过监听DOMContentLoaded实现ready方法
/**
* 页面解析后执行 fn
* https://ichochy.com
* /
function ready(fn) {
if (window.addEventListener) {
window.addEventListener('DOMContentLoaded', function () {
//注销时间,避免重复触发
document.removeEventListener('DOMContentLoaded', arguments.callee, false);
fn(); //运行函数
}, false);
} else if (document.attachEvent) { //IE浏览器
document.attachEvent('onreadystatechange', function () {
if (document.readyState == 'complete') {
document.detachEvent('onreadystatechange', arguments.callee);
fn(); //函数运行
}
});
}
}
当然还有我的onload方法,可以在页面完成所有加载后再执行
//window 的 onload
window.onload = function(){
//load https://ichochy.com
//some things ……
}
//body 的 onload
<body onload="load()">
总结
可以看到,JS的执行顺序决定着程序是否正常工作。加载过早,可能无法获取到页面元素,而太晚,页面元素无法交互。对于执行的顺序,要以当前的程序功能而定。
联系方式
网站:https://ichochy.com/
源文:https://ichochy.com/posts/20200807/
- 上一篇: Zabbix Agent安装部署
- 下一篇: 一文搞懂得物前端监控
猜你喜欢
- 2024-12-01 程序员-私活:修改网页元素,网页自动化处理
- 2024-12-01 6种移动端 1px 解决方案「干货」
- 2024-12-01 Web开发小技巧放送 - 如何使用包含运算符进行过滤
- 2024-12-01 JQuery实现页面点击产生文字和爱心效果
- 2024-12-01 文字来找茬(文本对比工具)
- 2024-12-01 第八十六天-背包问题,MarkDown, technical writing
- 2024-12-01 加速 Selenium 测试执行最佳实践
- 2024-12-01 用原生 JavaScript 实现十大 jQuery 函数
- 2024-12-01 12条专业的js规则
- 2024-12-01 Javascript应用-js事件的on与bind
- 06-18CentOS7安装Mongodb 4.x.x(centos7安装openstack)
- 06-18Window环境配置Mongodb(mongodb默认配置文件路径)
- 06-18FineReport如何连接和使用MongoDB数据库
- 06-18nosql之mongodb(nosql怎么读正确发音)
- 06-18Mongodb centos7安装(mongodb4.4.2安装教程)
- 06-18群晖(Synology)NAS 安装 MongoDB(群晖安装nat123)
- 06-18MongoDB 安装及实践(mongodb的安装过程和操作命令)
- 06-18MongoDB最全详解(万字图文总结)(mongodb lsm)
- 最近发表
-
- CentOS7安装Mongodb 4.x.x(centos7安装openstack)
- Window环境配置Mongodb(mongodb默认配置文件路径)
- FineReport如何连接和使用MongoDB数据库
- nosql之mongodb(nosql怎么读正确发音)
- Mongodb centos7安装(mongodb4.4.2安装教程)
- 群晖(Synology)NAS 安装 MongoDB(群晖安装nat123)
- MongoDB 安装及实践(mongodb的安装过程和操作命令)
- MongoDB最全详解(万字图文总结)(mongodb lsm)
- CentOS安装MongoDB教程(centos安装mpich)
- MongoDB入门指南:下载、安装和配置一款强大的NoSQL数据库
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)