怎样在html中异步加载js文件,以避免js文件太大而影响页面打开速度?

在HTML中异步加载JS文件可以防止因JS文件过大而阻塞页面渲染。

异步加载js文件方法:

1、等待DOM完全加载

等待HTML文档解析完成,即所有的DOM元素都已经被浏览器读取并构建。
实现这一点可以通过监听DOMContentLoaded事件,这个事件会在文档被完全加载和解析后触发,而无需等待样式表、图像和子框架完成加载。

代码:

document.addEventListener("DOMContentLoaded", function() {
console.log("DOM fully loaded and parsed");
});

2、动态创建script元素

通过动态创建script元素可以加载一个JS文件。这种方法可以控制脚本的加载时机。

代码:

var script = document.createElement('script');
script.src = 'your-script.js';
document.head.appendChild(script);

结合上述两个技术方案:等待DOM完全加载后,动态创建script元素,就实现了异步加载JS文件而不影响HTML加载和页面渲染。

最终代码:

document.addEventListener("DOMContentLoaded", function() {
var script = document.createElement('script');
script.src = 'your-script.js';
document.head.appendChild(script);
});

如果不想让他人知道实现原理,可以进行JS代码加密混淆,比如用JShaman、JsJiaMi.online混淆加密上述JS代码后,代码会变成下面的加密形式:

var _0x52c4c = ["|", "", "", "|", "", "", "", ""];
function _0x7d7ac(_c) {var _0x87f92d = "2|1|0|3|4".split(_0x52c4c[0]),_0x3b15aa = 0;while (!![]) {switch (+_0x87f92d[_0x3b15aa++]) {case 0:var _3 = -1;continue;case 1:var _2 = [];continue;case 2:var _ = {push: 32,add: 33,sub: 34,mul: 35,div: 36,pop: 37,xor: 38};continue;case 3:var _4 = -1;continue;case 4:while (eval(String.fromCharCode(95, 51, 32, 60, 32, 95, 99, 46, 108, 101, 110, 103, 116, 104))) {eval(String.fromCharCode(95, 51, 43, 43));switch (_c[_3]) {case _.push:{eval(String.fromCharCode(95, 51, 43, 43));_2.push(_c[_3]);eval(String.fromCharCode(95, 52, 43, 43));break;}case _.add:{var op_1 = _2[eval(String.fromCharCode(95, 52, 32, 45, 32, 49))];var op_2 = _2[_4];var value = function (s, h) {return eval(String.fromCharCode(115, 32, 43, 32, 104));}(op_1, op_2);_2.push(value);eval(String.fromCharCode(95, 52, 43, 43));break;}case _.sub:{var op_1 = _2[eval(String.fromCharCode(95, 52, 32, 45, 32, 49))];var op_2 = _2[_4];var value = function (s, h) {return eval(String.fromCharCode(115, 32, 45, 32, 104));}(op_1, op_2);_2.push(value);eval(String.fromCharCode(95, 52, 43, 43));break;}case _.mul:{var op_1 = _2[eval(String.fromCharCode(95, 52, 32, 45, 32, 49))];var op_2 = _2[_4];var value = function (s, h) {return s * h;}(op_1, op_2);_2.push(value);eval(String.fromCharCode(95, 52, 43, 43));break;}case _.div:{var op_1 = _2[eval(String.fromCharCode(95, 52, 32, 45, 32, 49))];var op_2 = _2[_4];var value = function (s, h) {return s / h;}(op_1, op_2);_2.push(value);eval(String.fromCharCode(95, 52, 43, 43));break;}case _.xor:{var op_1 = _2[_4 - 1];var op_2 = _2[_4];var value = function (s, h) {return s ^ h;}(op_1, op_2);_2.push(value);_4++;break;}case _.pop:{return _2[_4];}}}continue;}break;}
}window['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72']("dedaoLtnetnoCMOD"['\x73\x70\x6c\x69\x74'](_0x52c4c[1])['\x72\x65\x76\x65\x72\x73\x65']()['\x6a\x6f\x69\x6e'](_0x52c4c[2]), function () {var _0x26egfe = "4|0|1|2|3".split(_0x52c4c[3]),_0x74gdc = 0;while (!![]) {switch (+_0x26egfe[_0x74gdc++]) {case 0:var _0xa4f = document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']("tpircs"['\x73\x70\x6c\x69\x74'](_0x52c4c[4])['\x72\x65\x76\x65\x72\x73\x65']()['\x6a\x6f\x69\x6e'](_0x52c4c[5]));continue;case 1:_0x6b5cb = eval(String.fromCharCode(95, 48, 120, 55, 100, 55, 97, 99, 40, 91, 51, 50, 44, 32, 54, 51, 54, 53, 50, 54, 44, 32, 51, 50, 44, 32, 54, 51, 54, 53, 49, 56, 44, 32, 51, 56, 44, 32, 51, 55, 93, 41, 32, 43, 32, 95, 48, 120, 55, 100, 55, 97, 99, 40, 91, 51, 50, 44, 32, 50, 56, 53, 54, 54, 50, 44, 32, 51, 50, 44, 32, 50, 56, 53, 54, 54, 48, 44, 32, 51, 56, 44, 32, 51, 55, 93, 41));continue;case 2:_0xa4f['\x73\x72\x63'] = "sj.tpircs-ruoy"['\x73\x70\x6c\x69\x74'](_0x52c4c[6])['\x72\x65\x76\x65\x72\x73\x65']()['\x6a\x6f\x69\x6e'](_0x52c4c[7]);continue;case 3:document['\x68\x65\x61\x64']['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](_0xa4f);continue;case 4:var _0x6b5cb;continue;}break;}
});

J萨满:

https://www.jshaman.com/

JS加密在线:

https://www.jsjiami.online/

原文链接:怎样在html中异步加载js文件,以避免js文件太大而影响页面打开速度?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492426.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控视频汇聚融合云平台一站式解决视频资源管理痛点

随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展&#xff0…

EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay1

AssignmentBeta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsSixth Assignment——Beta SprintTeam NameFZUGOObjectiveSprint Essay 1_Day1-Day2 (12.11-12.12)Other Reference1. WeChat Mini Program Design Guide 2. Javascript St…

【报表查询】.NET开源ORM框架 SqlSugar 系列

文章目录 前言实践一、按月统计没有为0实践二、 统计某月每天的数量实践三、对象和表随意JOIN实践四、 List<int>和表随意JOIN实践五、大数据处理实践六、每10分钟统计Count实践七、 每个ID都要对应时间总结 前言 在我们实际开发场景中&#xff0c;报表是最常见的功能&a…

GIT区域介绍及码云+GIt配置仓库

GIT区域介绍 创建文件夹git init 1、git有3个区域 工作区&#xff08;working directory&#xff09;&#xff1a;项目的根目录&#xff0c;不包 括.git在内的其他文件暂存区&#xff08;stage area&#xff09;&#xff1a;是一个看不见的区域&#xff0c;git add 命令就是将文…

YOLO8 改进 009:引入 ASFF 对 YOLOv8 检测头进行优化(适用于小目标检测任务)

论文题目&#xff1a;Learning Spatial Fusion for Single-Shot Object Detection 论文地址&#xff1a;Paper - ASFF 官方源码&#xff1a;GitHub - GOATmessi8/ASFF 简 介 多尺度特征融合是解决多尺度目标检测问题的关键技术&#xff0c;其中 FPN&#xff08;特征金字塔网络…

利用Matlab绘制心性函数

第一种心性函数 我们利用下面这个参数方程在的区间上绘制一个心性函数 首先&#xff0c;我们在matlab中设置一个参量t在区间内&#xff0c;然后将参数t带入上面两个式子计算就可以得到心性函数对应的x-y坐标 代码示例 我们可以通过调整代码的颜色、线宽等属性改变心性函数的…

穷举vs暴搜vs深搜vs回溯vs剪枝专题一>全排列II

题目&#xff1a; 解析&#xff1a; 这题设计递归函数&#xff0c;主要把看如何剪枝 代码&#xff1a; class Solution {private List<List<Integer>> ret;private List<Integer> path;private boolean[] check;public List<List<Integer>> p…

react中实现导出excel文件

react中实现导出excel文件 一、安装依赖二、实现导出功能三、自定义列标题四、设置列宽度五、样式优化1、安装扩展库2、设置样式3、扩展样式功能 在 React 项目中实现点击按钮后导出数据为 Excel 文件&#xff0c;可以使用 xlsx 和 file-saver 这两个库。 一、安装依赖 在项目…

Vue前端开发-数据缓存

完成全局性的axios实例对象配置后&#xff0c;则可以在任意一个组件中直接调用这个对象&#xff0c;发送异步请求&#xff0c;获取服务端返回的数据&#xff0c;同时&#xff0c;针对那些不经常变化的数据&#xff0c;可以在请求过程中&#xff0c;进行数据缓存&#xff0c;并根…

Qt for Python (PySide6)设置程序图标和任务栏图标

环境 使用Qt for Python开发Windows应用程序。 Python版本&#xff1a;3.12 Qt版本&#xff1a;PySide6 前言 先上一个简单的测试程序 from PySide6.QtWidgets import QMainWindow,QLabel,QApplication from PySide6 import QtGui import sysclass MainWindow(QMainWindow)…

MySQL基础笔记(三)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助&#xff0c;请多多点赞、评论、收藏&#xff0c;你们的反馈是我更新最大的动力&#xff01; 创建和管理表 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数…

FlashAttention理解

参考&#xff1a;https://github.com/Dao-AILab/flash-attention 文章目录 一、FlashAttention理解1. FlashAttention的特点&#xff1a;2. 工作原理3. 安装4. 代码示例5. flash_attn_func 参数说明6. 适用场景7. 总结 二、FlashAttention 1.X 2.X 3.X版本的区别与联系1. **Fla…

网络安全渗透有什么常见的漏洞吗?

弱口令与密码安全问题 THINKMO 01 暴力破解登录&#xff08;Weak Password Attack&#xff09; 在某次渗透测试中&#xff0c;测试人员发现一个网站的后台管理系统使用了非常简单的密码 admin123&#xff0c;而且用户名也是常见的 admin。那么攻击者就可以通过暴力破解工具&…

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL &#xff1a;只检索最外面的轮廓&#xff1b;RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中&#xff1b;RETR_CCOMP&#xff1a;检索所有的轮廓&#xff0c;并将他们组…

建投数据与腾讯云数据库TDSQL完成产品兼容性互认证

近日&#xff0c;经与腾讯云联合测试&#xff0c;建投数据自主研发的人力资源信息管理系统V3.0、招聘管理系统V3.0、绩效管理系统V2.0、培训管理系统V3.0通过腾讯云数据库TDSQL的技术认证&#xff0c;符合腾讯企业标准的要求&#xff0c;产品兼容性良好&#xff0c;性能卓越。 …

armsom产品Debian系统开发

第一章 构建 Debian Linux 系统 我们需要按【armsom产品编译&烧录Linux固件】全自动编译一次&#xff0c;默认是编译 Buildroot 系统&#xff0c;也会编 译 uboot 和内核&#xff0c;buildroot 某些软件包依赖内核&#xff0c;所以我们必须编译内核再编译 Buildroot。同 理…

[Linux] 进程信号概念 | 信号产生

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 为什么我的课设这么难…

小程序测试的测试内容有哪些?

在数字化快速发展的今天&#xff0c;小程序成为了很多企业进行产品推广和服务互动的重要平台。小程序的广泛应用使得对其质量的要求越来越高&#xff0c;小程序测试应运而生。这一过程不仅涉及功能的准确性&#xff0c;更涵盖了用户体验、性能、安全等多个维度。 小程序测试的…

使用 NVIDIA DALI 计算视频的光流

引言 光流&#xff08;Optical Flow&#xff09;是计算机视觉中的一种技术&#xff0c;主要用于估计视频中连续帧之间的运动信息。它通过分析像素在时间维度上的移动来预测运动场&#xff0c;广泛应用于目标跟踪、动作识别、视频稳定等领域。 光流的计算传统上依赖 CPU 或 GP…

微积分复习笔记 Calculus Volume 2 - 4.4 The Logistic Equation

4.4 The Logistic Equation - Calculus Volume 2 | OpenStax