- JavaScript 教程
- JavaScript 教程
- Javascript - 概述
- Javascript - 功能
- 在浏览器中启用 JavaScript
- JavaScript - 放置在 HTML 文件中
- JavaScript - 语法
- JavaScript - Hello World 程序
- JavaScript - Console.log()方法
- JavaScript - 注释
- JavaScript - 变量
- JavaScript - let 语句
- JavaScript - 常量
- JavaScript - 数据类型
- JavaScript - 类型转换
- JavaScript - 严格模式
- JavaScript - 保留关键字
- JavaScript 运算符
- JavaScript - 运算符
- JavaScript - 算术运算符
- JavaScript - 比较运算符
- JavaScript - 逻辑运算符
- JavaScript - 按位运算符
- JavaScript - 赋值运算符
- JavaScript - 条件运算符
- JavaScript - typeof 运算符
- JavaScript - Nullish 合并运算符
- JavaScript - Delete 运算符
- JavaScript - 逗号运算符
- JavaScript - 分组运算符
- JavaScript - Yield 运算符
- JavaScript - Spread 运算符
- JavaScript - 幂运算符
- JavaScript - 运算符优先级
- JavaScript 控制流
- JavaScript - if...else 语句
- JavaScript - While 循环
- JavaScript - For 循环
- JavaScript - For...in 循环
- JavaScript - For...of 循环
- JavaScript - 循环控制
- JavaScript - Break 语句
- JavaScript - Continue 语句
- JavaScript - Switch Case 语句
- JavaScript - 用户定义的迭代器
- JavaScript 函数
- JavaScript - 函数
- JavaScript - 函数表达式
- JavaScript - 函数参数
- JavaScript - 默认参数
- JavaScript - Function() 构造函数
- JavaScript - 函数提升
- JavaScript - 自调用函数
- JavaScript - 箭头函数
- JavaScript - 函数调用
- JavaScript - 函数 call() 方法
- JavaScript - 函数 apply() 方法
- JavaScript - 函数 bind() 方法
- JavaScript - 闭包
- JavaScript - 变量范围
- JavaScript - 全局变量
- JavaScript - 智能函数参数
- JavaScript 对象
- JavaScript - Number 对象
- JavaScript - 布尔对象
- JavaScript - String 对象
- JavaScript - Array 对象
- JavaScript - 日期对象
- JavaScript - DataView 对象
- JavaScript - 处理程序
- JavaScript - math 对象
- JavaScript - 正则表达式
- JavaScript - Symbol 对象
- JavaScript - Set(集)对象
- JavaScript - WeakSet 对象
- JavaScript - Maps (地图) 对象
- JavaScript - WeakMap 对象
- JavaScript - Iterables 对象
- JavaScript - Reflect 对象
- JavaScript - TypedArray 对象
- JavaScript - 模板文本
- JavaScript - tagged 模板
- 面向对象的 JavaScript
- JavaScript - 对象概述
- JavaScript - 类(Classes)
- JavaScript - 对象属性
- JavaScript - 对象方法
- JavaScript - Static(静态)方法
- JavaScript - display(显示)对象
- JavaScript - 对象访问器
- JavaScript - 对象构造函数
- JavaScript - 原生原型
- JavaScript - ES5 对象方法
- JavaScript - Encapsulation(封装)
- JavaScript - Inheritance(继承)
- JavaScript - Abstraction(抽象)
- JavaScript - Polymorphism(多态性)
- JavaScript - 解构赋值
- JavaScript - 对象解构
- JavaScript - 数组解构
- JavaScript - 嵌套解构
- JavaScript - 可选链接
- JavaScript - 全局对象
- JavaScript - Mixin
- JavaScript - Proxies(代理)
- JavaScript 版本
- JavaScript - 历史
- JavaScript - 版本
- JavaScript - ES5
- JavaScript cookies
- JavaScript - Cookies
- JavaScript - Cookie 属性
- JavaScript - 删除 Cookie
- JavaScript 浏览器 BOM
- JavaScript - 浏览器对象模型
- JavaScript - Window 对象
- JavaScript - Document 对象
- JavaScript - Screen 对象
- JavaScript - History 对象
- JavaScript - navigator 对象
- JavaScript - Location 对象
- JavaScript - Console 对象
- JavaScript Web API
- JavaScript - Web API
- JavaScript - history API( 历史 API)
- JavaScript - Storage API(存储 API)
- JavaScript - Forms API(表单 API)
- JavaScript - Worker API
- JavaScript - Fetch API (获取 API)
- JavaScript - Geolocation API (地理位置 API)
- JavaScript 事件
- JavaScript - Events (事件简介)
- JavaScript - DOM 事件
- JavaScript - addEventListener()
- JavaScript - 鼠标事件
- JavaScript - 键盘事件
- JavaScript - 表单事件
- JavaScript - 窗口/文档事件
- JavaScript - 事件委派
- JavaScript - 事件冒泡
- JavaScript - 事件捕获
- JavaScript - 自定义事件
- JavaScript 错误处理
- JavaScript - 错误和异常处理
- JavaScript - try...catch 语句
- JavaScript - 调试
- JavaScript - 自定义错误
- JavaScript - 扩展错误
- JavaScript 重要关键词
- JavaScript - this 关键字
- JavaScript - void 关键字
- JavaScript - new 关键字
- JavaScript - var 关键字
- JavaScript HTML DOM
- JavaScript - 文档对象模型或 DOM
- JavaScript - DOM 方法
- JavaScript - DOM 文档
- JavaScript - DOM 元素
- JavaScript - DOM 表单
- JavaScript - 更改 HTML
- JavaScript - 更改 CSS
- JavaScript - DOM 动画
- JavaScript - DOM 导航
- JavaScript - DOM 集合
- JavaScript - DOM 节点列表
- JavaScript 杂项
- JavaScript - Ajax
- JavaScript - 异步迭代
- JavaScript - Atomics 对象 (原子对象)
- JavaScript - Rest 参数
- JavaScript - 页面重定向
- JavaScript - 对话框
- JavaScript - 页面打印
- JavaScript - 表单验证
- JavaScript - 动画
- JavaScript - 多媒体
- JavaScript - Image Map(图像映射)
- JavaScript - 浏览器兼容性
- JavaScript - JSON
- JavaScript - 多行字符串
- JavaScript - 日期格式
- JavaScript - 获取日期方法
- JavaScript - 设置日期方法
- JavaScript - 模块
- JavaScript - 动态导入
- JavaScript - BigInt 数据类型
- JavaScript - Blob
- JavaScript - Unicode
- JavaScript - 浅层复制
- JavaScript - 调用堆栈
- JavaScript - 引用类型
- JavaScript - IndexedDB
- JavaScript - 点击劫持攻击
- JavaScript - Currying (局部套用)
- JavaScript - 图形
- JavaScript - Canvas
- JavaScript - Debouncing (防抖)
- JavaScript - 性能
- JavaScript - 样式指南
- JavaScript - 内置函数
JavaScript - 性能
JavaScript 在当今的每个网站中都非常重要。如果 JavaScript 失败,我们的网站将无法正常工作。关注 JavaScript 的性能非常重要,因为它会影响提供积极的用户体验、保持参与度和确保业务成功。优化的 JavaScript 将确保页面加载更快,响应式交互有助于提高用户满意度,从而提高转化率和搜索引擎排名(因为 SEO 会更好)。
在竞争激烈的数字环境中,优化的 JavaScript 代码不仅可以吸引和留住用户,还可以提高资源效率,降低服务器成本并提供竞争优势。随着移动设备的日益普及和对渐进式 Web 应用程序的重视,性能优化不仅是用户的期望,而且是旨在在在线空间中脱颖而出并蓬勃发展的企业的战略必要条件。
优化 DOM 操作
DOM 操作是指将每个元素表示为树中的一个节点,并通过其 ID、类名等进行访问或修改。这些 DOM 操作操作应该尽可能减少,并且会对我们的应用程序速度产生重大影响。让我们考虑下面的示例,其中我们动态创建一个包含 1000 个项目的列表。
例Naive 代码
<!DOCTYPE html>
<html>
<body>
<ul id="itemList"></ul>
<script>
const itemList = document.getElementById('itemList');
// Inefficient DOM manipulation
for (let i = 0; i < 1000; i++) {
itemList.innerHTML += `<li>Item ${i}</li>`;
}
</script>
</body>
</html>
优化(Optimized)代码
<!DOCTYPE html>
<html>
<body>
<ul id="itemList"></ul>
<script>
// Efficient DOM manipulation using document fragment
const itemList = document.getElementById('itemList');
const fragment = document.createDocumentFragment();
for (let i = 0; i < 1000; i++) {
const listItem = document.createElement('li');
listItem.textContent = `Item ${i}`;
fragment.appendChild(listItem);
}
itemList.appendChild(fragment);
</script>
</body>
</html>
使用 Promise 的异步操作
为了防止主线程阻塞,我们必须优先考虑异步编程。考虑这个例子:使用 Promise 从 API 检索数据;在这种情况下,Promise 被证明对于管理异步数据获取是必不可少的。防止 UI 在运行过程中卡顿;增强整体用户体验:这些是好处。
例
<!DOCTYPE html>
<html>
<body>
<h2>Asynchronous Operations with Promises</h1>
<div id="dataContainer"></div>
<script>
// Fetch data asynchronously
function fetchData() {
return new Promise((resolve, reject) => {
// Simulating an API call with a delay
setTimeout(() => {
const data = { message: 'Hello, world!' };
resolve(data);
}, 1000);
});
}
// Usage of the fetchData function
fetchData()
.then(data => {
document.getElementById('dataContainer').textContent = data.message;
})
.catch(error => {
alert('Error fetching data:', error);
});
</script>
</body>
</html>
延迟 JavaScript 加载
JavaScript 通常在打开页面时加载,但是通过延迟 JavaScript 的加载,我们可以优化页面加载性能,尤其是在处理非必要的脚本时。当浏览器遇到 <script> 标签时,它们通常会阻止渲染,直到脚本完成下载和执行。然而,通过在script标签中使用defer属性,我们可以指示浏览器在后台继续下载脚本,同时继续解析和渲染HTML。然后,在 HTML 完全解析后执行该脚本。
例
<!DOCTYPE html>
<html>
<body>
<p>Deferred JavaScript Loading</p>
<script defer src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<div id="loadingMessage">JavaScript is loading...</div>
<script>
// Add an event listener to indicate when the JavaScript is fully loaded
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('loadingMessage').textContent = 'JavaScript has finished loading!';
});
</script>
</body>
</html>
上述代码的另一个选项是使用 async 属性。虽然与 defer 类似,但 async 会异步加载脚本,但它不能保证执行顺序。首先完成加载的脚本将首先执行。
避免使用全局变量
全局变量是那些在整个代码中可见或具有较大范围的变量。了解我们的代码是否真的要求变量的范围是全局的,或者它是否可以通过代码封装有效地管理,这很重要。以下示例演示了如何使用封装来避免使用全局变量,从而提高脚本的性能。
例
<!DOCTYPE html>
<html>
<body>
<h2>Avoiding Global Variables</h2>
<div id="result"></div>
<script>
var resultElement = document.getElementById('result');
// Inefficient use of global variables
var globalVar = 10;
function addNumbers(x, y) {
return globalVar + x + y;
}
resultElement.innerHTML += "Using global variable, the sum is " + addNumbers(51, 7) + "<br>";
// Improved encapsulation
(function () {
var localVar = 10;
function addNumbers(x, y) {
return localVar + x + y;
}
resultElement.innerHTML += "Using encapsulation, the sum is " + addNumbers(51, 7);
})();
</script>
</body>
</html>
虽然我们在本教程中从 JavaScript 的角度讨论了性能优化,但重要的是要注意,无论使用哪种语言,某些优化都是不变的。这包括使用 switch case 而不是 length if else if、内存管理、并发等场景。
JavaScript的性能优化对各个行业和应用程序都有影响。在电子商务中,高速页面加载已被证明可以提高用户参与度和对话率,而在社交媒体中,JavaScript 有助于提供无缝交互。新闻和媒体相关网站受益于内容快速更新,并且只有学习平台(教育科技行业)需要 JavaScript 作为交互式教育组件。
另一方面,金融应用程序、协作工具、游戏网站和医疗保健应用程序都需要优化的 JavaScript,以确保其界面响应迅速并及时处理数据。