如何加速JavaScript 代码运行速度

如何加速JavaScript 代码运行速度

  • 前言
  • 减少DOM访问
  • 避免不必要的变量
  • 延迟script加载
  • 异步和同步
  • 使用异步编程
  • 避免使用With关键词

前言

本文主要通过五个方面来讲解如何使Js代码得到性能优化,从而实现加快Js代码运行速度的作用。那么好,本文正式开始。

减少DOM访问

减少DOM访问的意思就是如果说,我们要多次调用一个DOM节点使用,那么可以把这个DOM节点定义到一个变量中下次直接调用这个变量即可,这样就可以减少DOM节点的调用,多次调用DOM节点会影响性能,因为它会从HTML文档结构渲染树中找到对应的DOM节点,代码如下:

var obj;
obj = document.getElementById("demo");
obj.innerHTML = "Hello"; 

可以使用这种方式,只访问一次DOM节点,下次直接访问变量。

避免不必要的变量

能不定义全局变量就不定义全局变量,因为全局变量有内存冗余和内存泄漏的风险,全局变量只有等页面被关闭才会被释放。

<body><div id="a"></div><div id="b"></div><script>var a = document.getElementById('a')var b=document.getElementById('b')let hello='hello'let world='world'a.innerHTML=hello+''+worldlet hellos='hellos'let worlds='world'let ans=hellos+''+worldsb.innerHTML=ans</script>
</body>

在上述代码中,有一个DOMa和DOMb我们做了innerHTML操作,DOM用了ans变量作为中间值,但这个中间值不是必要的,而且这个中间值ans只用了一次,所以我们可以不通过中间值,直接赋值a的HTML结构中。

延迟script加载

把script放在页面底部,使得页面先于sript被加载,或者放在顶部,在script标签中加上defer或async标签,defer标签的意思是指在浏览器中先按HTML顺序下载,但是等页面加载完后才加载这些js,async也是类似,不同的是async是异步加载。
defer:同步属性,先下载js文件,然后渲染HTML,最后渲染js文件,按照顺序。
async:异步属性,先解析HTMl,但当js下载完成后会停止HTML解析,执行脚本,解析脚本后才继续渲染HTML。

异步和同步

同步是指按顺序加载,而异步是指不按顺序加载。两者都能加载完,只不过加载的方式不同,如果我们某个js文件需要依托另一个文件的内容调用,需要用同步,否则同步异步都可以。

使用异步编程

使用异步编程可以很好的解决js可能造成的阻塞问题,因为js是单线程的语言,所以它对于同步代码会按顺序处理,那同时因为它的运行机制,可以利用事件循环来进行解决,大体就是先执行同步任务,再执行异步任务。也就是说,当执行完所有的同步任务后,才会执行异步任务,异步任务又分为宏任务和微任务,先执行微任务,后执行宏任务,所以说,在特定情况下,多使用异步编程会解决页面阻塞问题。

避免使用With关键词

避免使用 with 关键词。它对速度有负面影响。它也将混淆 JavaScript 作用域。
严格模式中不允许 with 关键词。

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

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

相关文章

感染了后缀为.[bkpsvr@firemail.cc].EKING勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 在当前数字时代&#xff0c;勒索病毒成为网络威胁的一大隐患。本文将深入介绍一种名为[bkpsvrfiremail.cc].EKING的勒索病毒&#xff0c;以及如何应对遭受其攻击后&#xff0c;有效地恢复被加密的数据文件&#xff0c;并提供一些预防措施以减少感染的风险。数…

sqlserver==索引解析,执行计划,索引大小

1创建测试表 -- 创建大型表 CREATE TABLE LargeTableWithIndex (ID int IDENTITY(1,1) PRIMARY KEY,IndexedColumn int,NonIndexedColumn nvarchar(255),OtherData nvarchar(255) );2插入测试数据 -- 使用 T-SQL 插入大量数据 DECLARE @i int = 1; WHILE @i <= 100000 -- …

Mac中LaTex无法编译的问题

最近在使用TexStudio时&#xff0c;遇到一个棘手的问题&#xff1a; 无法编译&#xff0c;提示如下&#xff1a; kpathsea: Running mktexfmt xelatex.fmt /Library/TeX/texbin/mktexfmt: kpsewhich -var-valueTEXMFROOT failed, aborting early. BEGIN failed–compilation a…

[Linux] Network: IPv6 link-local 地址是否可用不自动生成

原来有一段时间在做扩充产品的VLAN个数&#xff0c;然后就遇到过一个问题&#xff1a;说这个Linux的默认配置里&#xff0c;会为每一个网络接口添加一个link-local的地址&#xff0c;就是FE80::开头的地址&#xff0c;在RFC-4291里有如下的定义&#xff1a; Link-Local unicas…

redis运维(十二) 位图

一 位图 ① 概念 1、说明&#xff1a;位图还是在操作字符串2、位图玩字符串在内存中存储的二进制3、ASCII字符通过映射转化为二进制4、操作的是字符串value ② ASCII字符铺垫 1、控制ASCII字符 2、ASCII可显示字符 ③ SETBIT 细节&#xff1a; setbit 命令的返回值是之…

git常用命令(git github ssh)

目录 1、语法说明2、本地仓库相关操作建立一个git文件(git init)把工作区的文件添加到暂存区(git add)把暂存区的文件添加到本地仓库(git commit)查看暂存区和本地仓库中的文件(git ls-files)查看文件夹下所有文件的状态(git status)查看版本库中的提交记录(git log)恢复的文件…

如何解决msvcp110.dll丢失问题,分享5个有效的解决方法

最近&#xff0c;我在使用电脑时遇到了一个令人头疼的问题——msvcp110.dll丢失。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些有效的方法来修复丢失的msvcp110.dll文件。那么&#xff0c;msvcp110.dll到底是什么呢&#xff1f;…

代码随想录 10.14 || 二叉树 LeetCode 669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.将二叉搜索树转为累加树

669.修剪二叉搜索树 根据给定的最小边界 left 和最大边界 right 修剪二叉搜索树&#xff0c;保留值在 left ~ right 的节点&#xff0c;删除不满足此条件的节点。修剪树不应该改变保留在树中的元素的相对结构&#xff0c;即父子关系。 设 cur 为当前访问的二叉树节点&#xff0…

LeetCode(32)串联所有单词的子串【滑动窗口】【困难】(含图解)

目录 1.题目2.答案3.提交结果截图4.图解 链接&#xff1a; 串联所有单词的子串 1.题目 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 w…

Flutter的Event Loop

Flutter 的事件循环机制是其框架的核心部分&#xff0c;它负责管理事件的处理和UI的渲染。了解这个机制对于开发高效且响应迅速的Flutter应用非常重要。以下是Flutter事件循环的主要组成部分和工作原理&#xff1a; 1. 主事件循环&#xff08;Main Event Loop&#xff09; 当…

利用ros实现单片机通讯(转载)

我觉得如果使用这个人的micro_ros通信协议&#xff0c;就不用再去Ubuntu或者Windows上面自己写驱动程序了&#xff0c; 利用micro_ros实现esp32与ros2的通讯 Tianci ​ 天津大学 工学博士 参考&#xff1a;https://github.com/micro-ROS/micro_ros_arduino https://blog.cs…

B站app作品列表sign

之前写过一篇pc的:B站pc端w_rid逆向 最近pc端老是作妖,更新的太频繁了, 于是决定干一下app, pc端有个w_rid加密,app端也有个类似的sign 人狠话不多,直接上成果吧: # -*- coding: UTF-8 -*- import hashlib import time import requests import json from urllib.parse…

C语言好好题(一维数组)

两天没有更新了&#xff0c;贴纸们&#xff0c;有没有想我呀。&#x1f604;&#x1f604;&#x1f604; 好了&#xff0c;就寒暄到这里吧&#xff0c;下面请看题&#xff1a; 有序序列判断 输入一个整数序列&#xff0c;判断是否是有序序列&#xff0c;有序&#xff0c;指序列…

腾讯云轻量4核8G12M带宽服务器租用价格和S5实例报价

腾讯云4核8G服务器优惠价格表&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;阿腾云atengyun.com分享腾讯云4核8G服务器详细配置、优惠价格及限制条件&…

C++(模板进阶)

目录 前言&#xff1a; 本章学习目标&#xff1a; 1.非类型模版参数 1.1使用方法 1.2注意事项 1.3 实际引用 2.模版特化 2.1概念 2.2函数模板特化 2.3类模板特化 2.3.1全特化 2.3.2偏特化 3.模版分离编译 ​编辑 3.1失败原因 ​编辑 3.2解决方案 4 总结 前言&…

【C++】类和对象——构造函数和析构函数

今天要学习两个特殊的函数&#xff0c;分别是构造函数和析构函数&#xff0c;它们究竟有什么用呢&#xff1f; 比如说&#xff0c;我们先写一个简单的日期的类 class Date { public:void Init() {_year 1;_month 1;_day 1;}void Print() {cout << _year << &qu…

Sentinel 分布式系统

Sentinel 是一种分布式系统的流量防卫兵和熔断器&#xff0c;由阿里巴巴开发并开源。它的主要目标是保护分布式系统中的稳定性和可用性&#xff0c;防止因高并发或异常流量而导致的系统崩溃。下面是 Sentinel 的原理和使用教程的概要&#xff1a; Sentinel 的原理&#xff1a;…