Javascript学习笔记20 代码优化技巧

20 个超级有⽤的 JavaScript 技巧 Promise.allSettled() ⽅法接受⼀组 Promise 实例作为参数,包装到⼀个新的 Promise 实例中。当我们创建⼀个新变量时,有时我们想检查引⽤的变量是否是⼀个假值,例如 null 或 undefined 或空。在其他语⾔中,此功能被制成可以在数组上调⽤的⽅法或函数,但在 JavaScript 中,你必须⾃⼰做⼀。如果我们想根据不同的类型调⽤不同的⽅法,我们可以使⽤多个 else if 语句或开关,但是还有⽐这更。有时你需要⽣成随机数,但⼜希望数字在⼀定范围内,则可以使⽤此⼯具。 阅读详情

编写可维护性的代码:

  • 可理解性:其他人可以接手代码,而无需解释
  • 直观性:代码一看就明白,无论操作过程多么复杂
  • 可适应性:代码以一种数据上变化不要求完全重写的方法撰写
  • 可扩展性:在未来可对核心功能进行扩展

可读性:

  • 每个函数和方法都应该包含一个注释,描述其目的和用于完成任务所使用的算法
  • 大段代码需要在前面放置一个描述任务的注释
  • 复杂的算法,需要在注释中说明思路
  • Hack,需要注释说明

变量名应为名词,如car。函数名应该以动词开始,如getName()


松散耦合

应用的某个部分过于依赖于另一部分时,代码就是耦合过紧

解耦HTML/Javascript
直接写在HTML中的Javascript,使用包含内联代码的<script>元素或者使用HTML属性来分配事件处理程序。例如:

<script type="text/javascript">
    document.write("Hello world");
</script>

<input type="button" value="click me" onclick="doSomething()" />

或者javascript中包含HTML

container.innerHTML = "<div class='msg'><p class='post'>123</p></div>"

HTML应该尽可能与Javascript分离,当javascript用于插入标记时,尽量不要直接插入标记。一般可以在页面中包含标记并隐藏,等页面渲染后,再用javascript显示标记。或者进行Ajax请求获取要显示的HTML。

解耦CSS/Javascript
最常见的紧密耦合的例子是使用javascript来更改某些样式

element.style.color = "red";

应该尽可能地使用更改样式类而非特定的样式来实现

element.className = "edit";

解耦应用逻辑/事务处理程序
有些人将业务逻辑包含在事件处理程序中,例如

function handleKeyPress(event){
    if (event.keyCode == 13){
        var value = 5 * parseInt(event.target.value);
        if (value > 10){
            document.getElementById("error-msg").style.display = "block";
        }
    }
}

应该将两者分离,分别处理各自的东西

function validateValue(value){
    value = 5 * parseInt(value);
    if (value > 10){
        document.getElementById("error-msg").style.display = "block";
    }
}

function handleKeyPress(event){
    if (event.keyCode == 13){
         validateValue(event.target.value);
    }
}

编程实践

1 不要对不是你所有的对象有任何的修改

2 避免全局变量,最多创建一个全局变量吗,让其他对象和函数存在其中

var MyApplication = {
    name: "zjw",
    sayName: function(){
        alert(this.name);
    }
};

3 避免和null进行比较

  • 如果值为一个引用类型,使用 instanceof 操作符检查其构造函数
  • 如果值为一个基本类型,使用 typeof 检查类型
  • 如果是希望对象包含某个特定的方法名,则使用 typeof 操作符确保指定名字的方法存在于对象上

4 使用常量
可以通过将数据抽取出来变成单独定义的常量,这样方便后期修改数据

var Constant = {
    constant1:"value1",
    constant2:"value2",
    constant3:"value3"
};

定义为常量的数据类型常常包括以下几种:

  • 重复的值:在多处地方用到的值
  • 用户界面字符串:任何用于显示给用户的字符串,都应被抽取出来,方便国际化
  • URLs:Web应用中,资源位置很容易变更,应使用一个公共地方存放所有URL
  • 任意可能会更改的值

性能

1 避免全局查找
访问全局变量总要比访问局部变量慢,因为需要遍历作用域链

var doc = document;    //保存document对象,不必多次重复查找
var imgs = doc.getElementsByTagName("img");
for (var i=0, len=imgs.length; i<len;i++){
    imgs[i].title = doc.title + "image" + i;
}
var msg = doc.getElementById("msg");
msg.innerHTML = "update complete";

2 避免with语句
with语句会创建自己的作用域,增加其中执行代码的作用域长度

function updataBody(){
    with(document.body){
        alert(tagName);
        innerHTML = "Hello world";
    }
}

使用局部变量可以达到同样的效果,且代码更清晰

function updataBody(){
    var body = document.body;
    alert(body.tagName);
    body.innerHTML = "Hello world";
}

3 避免双重解释
将包含Javascript代码的字符串,用作参数,会造成新启动一个解析器,下面的代码会造成这种情况

eval("alert('hello')");

var sayHi = new Function("alert('hello')");

setTimeout("alert('hello')",500);

除此之外,使用原生方法,用Switch语句代替if-else,使用位运算符都会提升代码的性能


最小化语句数

多个变量声明
使用一个var语句声明多个变量,用逗号隔开

var count = 5,
    color = "blue",
    values = [1,2,3],
    now = new Date();

插入迭代值

var name = values[i++];

使用对象字面量
使用对象字面量的方式来创建对象及设置属性和方法,而不是创建对象后,再分别设置属性和方法的值

var person = {
    name:"zjw",
    age:29
};

优化DOM交互

使用文档片段
每一次DOM更改,都意味着性能的惩罚。因此要尽可能得减少DOM更新的次数

var list = document.getElementById("mylist"),
    fragment = document.createDocumentFragment(),   //创建文档片段
    item,
    i;

for (i=0;i<10;i++){
    item = document.createElement("li");
    fragment.appendChild(item);
    item.appendChild(document.createTextNode("Item" + i));
}

list.appendChild(fragment);  //插入文档片段

在这个例子中,只有一次DOM更新,就是在插入文档片段时,避免了多次插入列表项造成的性能损失。当给appendChild()方法传入文档片段时,片段本身不会被添加,只会添加片段中的子节点

使用innerHTML
在进行大的DOM更改时,使用innerHTML比基于Javascript的DOM调用速度更快

使用事件委托
减少事件处理程序的数量,使用方法见 https://blog.youkuaiyun.com/zjw_python/article/details/79773871

注意HTMLCollection
任何时候访问HTMLCollection,不管是属性还是方法,都是在文档上一个查询,开销很大。因此要最小化访问HTMLCollection的次数

var images = document.getElementsByTagName("img"),
    img,
    i,len;
for  (i=0; len = images.length; i < len; i++){
    image = images[i];  //保存数据,避免对images的多次访问
    //处理
}

发生以下情况会返回HTMLCollection

  • 调用了getElementsByTagName()
  • 获取元素的childNodes属性
  • 获取元素attributes属性
  • 访问了特殊的集合,例如document.images或者document.forms

部署

在部署前推荐将Javascript合并为较少文件,并使用压缩器将文件尽可能变小,和HTTP压缩一起使用可以使JS文件变得更小。

JS逆向学习笔记 JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可以去Hook一些内置的函数, 例如Debugger, setInterval,JSON.stringify等等 2.JSHook 检测与过检测 原理: 其实就是检测代码是否和原来的相等. 绕过手段: 修改Function的. 阅读详情

相关推荐

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 642

js最小化浏览器_JS之 代码优化

阅读本文约需要5分钟大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了JS之常用概念的知识,今天跟大家分享下JS之代码优化的知识。1JS之 代码优化参考文献:https://whyour.cn/post/36-javascript-concepts-you-need.html这篇文章列举了一些技巧,可帮助你写出更好...

weixin_39942492的博客 382

ADC(三)Guard ring的设计艺术:从单元到系统的隔离策略

本文深入探讨了ADC设计中Guard ring(保护环)从单元到系统的多层次隔离策略。文章分享了从新手到专家的认知升级过程,详细分析了在单元内部进行微隔离、在模块间建立噪声屏障以及在系统层面规划全局隔离带的实用方法与设计艺术,强调了Guard ring对于提升混合信号电路性能和可靠性的关键作用。

weixin_28312391的博客 151

14个 JavaScript 代码优化技巧

点击上方“逆锋起笔”,公众号回复PDF领取大佬们推荐的学习资料作者 | Mahdhi Rezvi译者 | 王强策划 | 李俊辰这篇文章列举了一些技巧,可帮助你写出更好的 JavaScr...

code小生 310

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。 目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构 一、代码整体结构 既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V

qq_36903625的博客 1万+

(ZOS-API)Matlab控制ZEMAX软件调整光学系统某镜面位姿

所用软件的版本:MatlabR2022a, Zemax OpticStudio2024R1交互扩展功能,Zemax和可以同时打开,操作会比较方便在ZEMAX软件中,调整次镜位置通常有两种方法:1.在次镜前后各添加一个坐标间断面,并修改其“偏心X”“偏心Y”等参数来调整次镜的位姿;2.或者直接在次镜属性选项中设置相关数值。这两种方法对Zernike系数的采集结果无显著影响。

ecilifurt的博客 911

< 每日技巧: JavaScript代码优化 >

无论在什么开发岗位中,代码都通过开发者书写出来,后续也将由开发者去进行维护!所以我们不难得出一个结论,如果要考虑代码优化的问题,无疑要从开发者视角去看!这里引入《计算机程序的构造和解释》中提到的概念:代码是写给人看的,不是写给机器看的,只是顺便计算机可以执行而已。如果代码是写给机器看的,那完全可以使用汇编语言或者机器语言(二进制),直接让机器执行。作者强调的是,代码是写给人看的,所以要做到良好的编程风格,方便其他程序员阅读,维护。

一个平平无奇的技术宅 909

利用 IP 中的集成调试功能来调试 PCI Express 链接训练问题

JTAG Debugger”和“In-system IBERT”功能结合在一起即可提供即时信息,用于判断链接训练问题的可能原因。“test_rd.tcl”文件可读取 BRAM 中存储的调试数据,并输出 *.dat 文件,如下所示。同样,您可能看到某一箭头旁的数字较大,表明可能存在不稳定的链接。要采集 PCIe 链接眼图,请在 IP 配置 GUI 的“Add. Debug Options”选项卡中选择“启用 In-System IBERT (Enable In-System IBERT)”选项。

qq_43416206的博客 535

20个常用的JavaScript简写技巧

关注公众号前端开发博客,回复“加群”加入我们一起学习,天天进步作者 | Amitav Mishra译者 | 清风依旧策划 | 田晓旭本文发布在 jscurious.com任何编程语言的...

前端开发博客 627

ESP32-C3蓝牙透传通信的BLE协议栈工程实践

蓝牙低功耗(BLE)透传是一种基于GATT服务模型的数据透明传输机制,其核心原理在于Peripheral设备通过广播建立连接,并在GATT Server层暴露可读写特征值实现双向数据通道。该技术具备低功耗、跨平台兼容性强、开发门槛适中等优势,广泛应用于智能硬件、工业传感器与嵌入式网关等场景。在实际工程中,透传稳定性高度依赖BLE协议栈的分层协同——Link Layer负责可靠连接建立,GATT Server则定义数据交互语义;而ESP32-C3的AT指令集正是对这两层能力的封装调度。本文聚焦BLE透传的关键

weixin_29859471的博客 124

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2353

JavaScript代码优化技巧总结

本文介绍了7个JavaScript代码优化技巧:1)用Array.fill()替代循环初始化数组;2)用对象映射代替冗长的switch语句;3)使用三元运算符简化条件判断;4)用includes()方法替换多个条件判断;5)采用ES6默认参数设置;6)使用+运算符快速字符串转数字;7)利用JSON.stringify格式化输出复杂对象。这些方法能显著提升代码简洁性和可读性,建议在实际开发中优先采用。

油墨香^-^的博客 807

越野换了逐飞的ips200pro的屏幕后代码烧录中报错: “Cannot initialize device connection” 和 “Flashing failed” ...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1150

【JS代码优化技巧】

@不可错过的JS代码优化技巧 JS代码优化技巧 1. 带有多个条件的 if 语句 把多个值放在一个数组中,然后调用数组的 includes 方法。 //longhand if (x === ‘abc’ || x === ‘def’ || x === ‘ghi’ || x ===‘jkl’) { //logic } //shorthand if ([‘abc’, ‘def’, ‘ghi’, ‘jkl’].includes(x)) { //logic } 2. 简化 if true…else 对于不包含大逻

小徐的博客 341

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

20个高级JavaScript 技巧

欢迎来到高级 JavaScript 的世界!无论你是希望提高技能的经验丰富的开发人员,还是渴望深入了解 JavaScript 复杂性的爱好者,此博客都旨在激发和教育。让我们探索 20 个高级 JavaScript 技巧,这些技巧不仅可以提高您的编码能力,还可以在您发现新的、令人兴奋的方法来优化代码

松阳的编程向导 6428

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

20个超级有用的 JavaScript 技巧

如果我们想删除一个数组的元素,可以使用delete来完成,但是删除后元素会变成undefined,不会消失,而且执行会消耗很多时间,所以大部分情况下不会满足我们的需求。当我们使用参数列表给函数传递参数的时候,参数少一点没问题,但如果参数多,问题就更大了,因为我们必须按照参数列表的顺序传递参数。如果返回数组的长度为 0,则该对象必须为空。

m0_61643133的博客 1096

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

5 个JavaScript代码优化技巧

通过收集这些编码小技巧,提高编写优雅且可维护代码的能力。作者:天行无忌链接:https://juejin.cn/post/7194393614175666237来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

fury的博客 705

5 个 JavaScript 代码优化技巧

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。

郊眠寺 459

14个JavaScript代码优化技巧

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! JavaScript 已经成为有史以来最受欢迎的编程语言之一。根据 W3Tech 的数据,全世界将近 96%的网站都在使用它。关于 Web 有一个关键的事实是,你无法控制访问网站的用户所用设备的硬件规格。最终用户访问你的网站时,使用的可能是高端设备也可能是低端设备,网络连接条件也有好有差。这意味着你必须尽可能优化自己的网站,以满足任何用户的需求。 这篇文章列举了一些技巧,可帮助你写出更好的 Java.

阿里云云栖号 1387

20 个超级有用的 JavaScript 技巧,让你的工作更轻松

在其他语言中,此功能被制成可以在数组上调用的方法或函数,但在 JavaScript 中,你必须自己做一些工作。

web全栈开发的博客 1206
上一篇: Javascript学习笔记19 离线应用和客户端存储
下一篇: Javascript学习笔记21 HTML5 API (requestAnimationFrame FileReader WebWoker)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值