分享10个值得推荐的技巧,提升JavaScript 的性能

news2024/11/16 11:43:46

d8b37667e602783919945af1a28279a5.jpeg

JavaScript 在网页开发中非常重要,它控制了大部分网页上的活动和动画效果。但是,如果代码编写不当,JavaScript 可能会导致网站速度变慢。代码的不足可能导致网页加载缓慢,渲染速度也会变慢。

按照以下策略来提高您网站的速度和性能:

  1. 理解变量的作用域

  2. 异步加载JavaScript

  3. 避免不必要的循环

  4. 最小化JavaScript代码

  5. 使用Gzip压缩大文件

  6. 减少DOM操作

  7. 延迟不必要的JavaScript加载

  8. 使用CDN加载JavaScript

  9. 减少内存泄漏

  10. 利用问题检测工具

遵循这些策略,您可以提高网站的速度和性能,从而获得更好的用户体验和更高的搜索引擎排名。

1、理解变量的作用域

75c688d8158fa6c39401004da83b197b.jpeg

作为一名程序员,您必须了解作用域的工作原理。JavaScript中的变量分为两类:局部变量和全局变量。在函数块内定义的变量称为局部变量。它们的作用域限定在定义它们的函数内部。全局变量是可以在整个脚本中使用的变量。全局变量的作用域在整个程序中都是恒定的。当您尝试访问变量时,浏览器会进行作用域查询。它会在最近的作用域中搜索该变量,并继续查找,直到找到它为止。因此,访问当前作用域外的变量所需的作用域链越长,代码中的作用域链就越多。因此,最好将变量定义在更接近执行上下文的位置。仅在极少数情况下使用全局变量,例如存储在整个脚本中使用的数据。这样可以减少代码中的作用域数量,从而提高性能。

2、异步加载JavaScript

ec4691d4edd3d352d35e08969d4ce14c.jpeg

JavaScript是一种单线程编程语言。这意味着一旦一个函数被执行,它必须完成后才能执行另一个函数。这种结构可能会导致代码阻塞线程,导致程序挂起。为了使线程顺畅运行,您应该异步执行耗时的活动。当任务异步运行时,它不会使用线程的整个处理能力。相反,该函数被添加到一个事件循环中,在执行所有其他代码后被调用。由于API请求需要时间来解决,它们非常适合异步模式。使用基于Promise的库(例如fetch API)来异步获取信息,而不是冻结线程。这样,浏览器获取API数据时,其他代码可以同时运行。异步编程的复杂性可以帮助您提高应用程序的速度。

3、避免不必要的循环

993056cac02f64a97b75275016e747ca.jpeg

如果不小心使用循环,JavaScript中的循环可能会导致性能问题。循环遍历各种对象可能会对浏览器产生负担。在您的代码中,无法避免使用循环,因此应尽可能少地使用它们。可以使用一些策略来避免必须循环遍历集合。例如,可以将数组的长度存储在不同的变量中,而不是在每个循环迭代中读取它。如果从循环中获取所需内容,请尽快退出循环,减少循环次数。

4、最小化JavaScript代码

16f2e26c391af2ac5f4325f19c35b70d.jpeg

代码最小化是优化JavaScript代码的一种强大技术。最小化器是将您的原始源代码转换为较小的生产文件的程序。它们删除不必要的注释,缩短过长的变量名称,并切掉不必要的语法。它们还删除不必要的代码,并改进现有的例程以使用更少的代码行。Google Closure Compiler、UglifyJS和Microsoft AJAX minified都是最小化器的示例。您还可以通过查看和寻找改进方法来自行最小化代码。例如,您可以简化代码中的if语句。

5、使用Gzip压缩大文件

dccb6cbf0a4e91a6b67b7283473caa85.jpeg

Gzip通常由客户端用于压缩和解压大型JavaScript文件当浏览器请求资源时,服务器可以将其压缩以在响应中传递更小的文件。客户端接收文件后会进行解码。总的来说,这种策略可以节省数据并减少延迟,从而提高应用程序的性能。

6、减少DOM操作

1685cf866cb61774076ea2a4c4a4e4fd.jpeg

因为浏览器每次更新DOM都需要刷新,访问DOM可能会影响应用程序的性能。最好将DOM访问限制在一定范围内。一种方法是保存对浏览器对象的引用。您还可以使用像React这样的库,在将更改推送到真正的DOM之前对虚拟DOM进行更改。因此,浏览器刷新需要更新的程序元素,而不是刷新整个页面。

7、延迟不必要的JavaScript加载

003eb9098f41c09a0bccc3f813342218.jpeg

虽然您的网站加载速度很重要,但并不是所有功能都必须在第一次加载时运行。假设您有一个可点击的按钮和一个选项卡菜单,两者都引用JavaScript代码;可以将两者都延迟到页面加载时。这种策略释放了计算资源,使您能够及时呈现所需的页面元素。您可以推迟生成可能会阻塞页面首次显示的代码。当网站加载完成后,您可以开始加载这些功能。因此,用户可以享受快速的加载时间,并开始与内容互动。您还可以在<head>元素中尽可能添加少量CSS和JavaScript,以确保它们快速加载。然后,次要代码可以存储在单独的.css和.js文件中。这种策略需要对DOM的工作原理有扎实的理解。

8、利用CDN加载JavaScript

b3c90867b780b86afef9fc2c1d5f873b.jpeg

使用内容分发网络可以帮助加快页面加载时间,但并不总是成功的。例如,如果您选择的CDN在访问者所在的国家没有本地服务器,他们将无法受益。为了解决这个问题,您可以使用工具评估许多CDN,并决定哪一个为您的用例提供最佳性能。访问cdnjs网站以了解哪个CDN最适合您的库。

9、减少内存泄漏

eaeb1301c6d93ffe7872a3fee9646f6e.jpeg

内存泄漏可能会影响应用程序的性能。当加载的页面使用越来越多的内存时,泄漏就会出现。当您长时间使用程序后,浏览器开始变慢时,就会发生内存泄漏。使用Chrome开发人员工具可以检测应用程序中的内存泄漏。该工具在性能选项卡下记录时间轴。当DOM元素被删除时,以下信息泄漏会发生。当不再使用这些项的所有变量不再在作用域内时,垃圾回收器将释放内存。

10、利用检测工具

Lighthouse、Google PageSpeed Insights和Chrome都可以帮助您检测问题。

  • Lighthouse寻找可访问性、性能和SEO方面的问题。

  • Google PageSpeed可以帮助您减少JavaScript代码,以提高网站的加载时间。

  • Chrome浏览器具有开发人员工具功能,您可以通过在键盘上按F12来激活它。

您可以使用它的性能分析功能打开和关闭网络,并检查CPU使用情况。它还检查其他统计数据以修复您网站的问题。如何使用Google开发人员工具进行故障排除作为Web开发人员,您将花费大量时间在浏览器上。大多数浏览器都有一组开发人员功能,可以帮助您解决网站错误。Google Chrome中的开发人员工具功能可以帮助您完成各种任务。

结束

优化JavaScript代码可以提高网页的性能和用户体验。通过这10个小技巧,您可以最小化代码、减少DOM访问、延迟不必要的JavaScript加载,以及利用CDN等工具来提高网页性能。此外,使用问题检测工具可以帮助您找到并解决性能问题。请牢记这些技巧并应用于您的项目中,以确保您的网页可以以最佳状态展示给用户,提高搜索引擎排名和用户满意度。

在文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

原文:
https://pinjarirehan.medium.com/unlock-the-full-potential-of-javascript-10-tips-tricks-for-ultimate-performance-71b2c2ccec6e

作者:Rehan Pinjari

非直接翻译,有自行改编和添加部分,翻译水平有限,难免有疏漏,欢迎指正

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

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

相关文章

基于web的病号康复训练系统asp.net+sqlserver+C#

本系统主要内容分为病号管理模块,康复师管理模块,管理员管理模块等三大模块 1,病号管理模块主要分为:用户管理,在线问答,在线预约,用户中心,信息查询. 2. 康复师管理模块主要有:康复师信息管理,病人信息管理&#xff0c;预约信息管理&#xff0c;留言信息管理&#xff0c;训练计…

自然语言处理实战项目3-利用CNN做语义分析任务

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来自然语言处理实战项目3-利用CNN做语义分析任务&#xff0c;深度学习在自然语言处理领域中的应用越来越广泛&#xff0c;其中语义分析是其中一个重要的应用。本文将为读者介绍语义分析的任务以及如何用深度学习方法实现该…

​​2021遥感应用组二等奖:基于机器学习回归算法的鄱阳湖水质遥感定量反演及时序变化监测研究

作品介绍 一、作品背景 鄱阳湖是中国第一大淡水湖&#xff0c;也是中国第二大湖&#xff0c;它在调节长江水位、涵养水源、改善当地气候等方面起着重大的作用。但近年来受围垦、环境污染等人类活动影响&#xff0c;鄱阳湖湿地退化严重&#xff0c;同时使鄱阳湖的容量减少&…

JdbcTemplate总结

JdbcTemplate总结 JdbcTemplate技术是 Spring技术里面提供的一种数据库访问技术。之前学习的数据库技术是 JdbcUtils类完成的&#xff0c;现在用JdbcTemplate新技术了。 使用JdbcTemplate技术的本质就是&#xff1a;通过 IOC容器配置一个 JdbcTemplate对象&#xff0c;使用它来…

choco-slover安装

一. 基础知识 1. 起步资料 choco-slover github源代码以及工具下载网址:https://github.com/chocoteam/choco-solverchoco-slover 官网文档:https://choco-solver.org/choco-slover安装eclipse视频:https://www.youtube.com/watch?v=qz6ATkEI_F8视频所采用的资源网址:htt…

C learning_5

数组相关问题 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int arr[] { 1,2,3 };//数组如果初始化的话&#xff0c;可以不指定大小&#xff0c;会根据初始化的内容自动确定大小/*c99标准之前数组的大小不能是变量的但是在c99标准之后引入了变长数…

( “树” 之 BST) 235. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】

二叉查找树&#xff08;BST&#xff09;&#xff1a;根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉查找树中序遍历有序。 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定…

考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

来&#xff0c;猜猜看&#xff0c;这里的执行结果是什么&#xff1f; 这是今天课上的一道理解题&#xff0c;给大家一点点思考时间。 &#xff08;心里有答案了再往下滑哦&#xff09; 5 4 3 2 1 . 答案是&#xff0c;报warning&#xff01;因为%d不是用来输出指针的哈…

ntlm hash加密方式学习

文章目录 一、ntlm hash二、LM hash加密三 、NTLM Hash 加密 一、ntlm hash 什么是ntlm hash&#xff0c;当windows进行本地用户密码认证时不是以用户输入的明文密码与系统密码直接比较&#xff0c;而是经过某种方式加密之后进行比较。所以windows中的用户密码凭证不是以明文的…

哪个洗脱一体机好用?好用的洗拖一体机推荐

洗地机是一款使用非常方便的清洁工具&#xff0c;通常可以实现吸、拖、洗三个功能&#xff0c;对于各类家庭污渍都有着不错的处理能力&#xff0c;无论是干燥垃圾还是潮湿垃圾一律可以有效清理。不过很多新手朋友在选购洗地机时会因为看不懂参数而频繁踩雷。本文为大家整理了洗…

图像分割(Segmentation)

文章目录 图像分割FCNU-NetSegNetDeepLab图像分割常用数据集 图像分割 图像分割是预测图像中每一个像素所属的类别或者物体。基于深度学习的图像分割算法主要分为两类&#xff1a; 语义分割&#xff08;Semantic Segmentation&#xff09; 为图像中的每个像素分配一个类别。 …

基于Bert的知识库智能问答系统

项目完整地址&#xff1a; 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式&#xff0c;通常用于支持智能问答系统。在一个知识库中&#xff0c;每个句子通常来说…

用Morss获取全文RSS摘要

什么是 Morss &#xff1f; Morss 工具的目标是从互联网上常见的 RSS 摘要中获取全文 RSS 摘要。Morss 能打开来自 RSS的链接&#xff0c;然后从网站下载整篇文章并将其放回 RSS 摘要中&#xff0c;还可以将摘要导出为 RSS/JSON/CSV/HTML。 Morss 需配合其他 RSS 阅读器使用&am…

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

图像风格迁移&#xff08;Style Transfer&#xff09;是一种计算机视觉技术&#xff0c;旨在将一幅图像的风格应用到另一幅图像上&#xff0c;从而生成一幅新图像&#xff0c;该新图像结合了两幅原始图像的特点&#xff0c;目的是达到一种风格化叠加的效果&#xff0c;本次我们…

神经影像分析的统计学方法

线性模型概述 模型是对现实的一种数学近似&#xff0c;其中给定输入变量集的某个函数旨在重建一个输出变量。以fMRI范式为例&#xff0c;在这个范式中&#xff0c;给受试者呈现面孔和房屋的图像。该模型的目标是利用体素对面孔和房屋反应时的预期时间进程&#xff0c;并产生与…

基于html+css的图片展示20

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Mybatis(十)级联映射与懒加载

一、Mybatis的级联映射 使用Mybatis的级联映射&#xff0c;我们可以轻松的实现一对一、一对多或者多对多关联查询&#xff0c;甚至可以利用级联映射实现懒加载。 所谓的懒加载&#xff0c;就是我们在一个实体对象中关联了其他对象&#xff0c;如果不需要获取被关联的对象&…

什么样的测试才是优秀的测试

什么样的测试才是优秀的测试 优秀的测试应该包括以下要素&#xff1a; 测试代码的可读性和可维护性 代码在项目中及特定源代码中的组织方式 测试所检查的内容 测试的可靠性及可重复性 测试对测试替身的使用 可读的代码才是可维护的代码 代码较差的可读性与缺陷密度密切相…

GB 35114-2017 学习笔记

GB 35114-2017 学习笔记 第四章 公共安全视频监控联网信息安全系统互联结构 公共安全视频监控信息安全系统 公共安全视频监控信息安全系统由四部分组成&#xff1a; 具有安全功能的前端设备 FDWSF(安全前端设备:Front-end Device With Safety Function)具有安全功能的用户终…

Ubuntu18.04环境下安装igH EtherCAT Master

一、安装步骤 下载安装包 EtherCAT安装包&#xff1a;igH EtherCAT安装包&#xff08;目前最新的稳定版&#xff09; 安装依赖包 sudo apt install autoconf automake libtool net-tools解压EtherCAT安装包&#xff0c;进入解压出的文件夹&#xff0c;右键打开终端输入 ./b…