jQuery代码优化 遍历篇_jquery
了解了jQuery对DOM进行遍历背后的工作机制,可以在编写代码时有意识地避免一些不必要的重复操作,从而提升代码的性能。本文就从jQuery的遍历机制入手简单探讨一下优化jQuery代码的问题。
jQuery对象栈
jQuery内部维护着一个jQuery对象栈。每个遍历方法都会找到一组新元素(一个jQuery对象),然后jQuery会把这组元素推入到栈中。而每个jQuery对象都有三个属性:context、selector和prevObject,其中的prevObject属性就指向这个对象栈中的前一个对象,而通过这个属性可以回溯到最初的DOM元素集。
jQuery为我们操作这个内部对象栈提供了两个非常有用的方法:
.end()
.andSelf()
调用第一个方法只是简单地弹出一个对象(结果就是回到前一个jQuery对象)。第二个方法更有意思,调用它会在栈中回溯一个位置,然后把两个位置上的元素集组合起来,并把这个新的、组合之后的元素集推入栈的上方。
利用这个DOM元素栈可以减少重复的查询和遍历的操作,而减少重复操作也正是优化jQuery代码性能的关键所在。
优化示例
下面是一个函数(省略了前后代码),用于实现表格行条纹效果:
function stripe() {
$('#news').find('tr.alt').removeClass('alt');
$('#news tbody').each(function() {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt');
});
}
stripe()函数两次使用了ID选择符#news查找元素:一次是为了从带有alt类的行中删除该类,另一次是为了给新选中的行添加这个类。
优化这个函数的方法有两个,一是连缀。
连缀
连缀优化利用的就是jQuery的内部对象栈和.end()方法。优化后的代码如下:
function stripe() {
$('#news').
find('tr.alt').removeClass('alt').end()
find('tbody').each(function() {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt');
});
}
第一次调用.find()会把表格行推到栈上,然后的.end()方法则把这些行弹出,从而让下一次调用.find()仍然是在#news表格上执行操作。这样就把两次选择符查找减少为一次。
另一个优化方法是缓存。
缓存
所谓缓存,在这里就是把之前操作的结果保存起来,以便将来重用。优化后的代码如下:
var $news = $('#news');
function stripe() {
$news.find('tr.alt').removeClass('alt');
$news.find('tbody').each(function() {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt');
});
}
与连缀的方法相比,缓存方式稍嫌冗长,因为额外创建了一个用于保存jQuery对象的变量。但从另一个角度来看,这种方式在代码中可以实现对选中元素的两次操作完全分离,而这也许可以满足我们其他情况下的需求。同样,因为可以把选中的元素保存在stripe()函数之外,也就避免了每次调用函数时重复查询选择符的操作。
结论
利用jQuery的内部对象栈和缓存,可以减少重复的DOM查询及遍历,从而提高脚本执行速度。
因为根据ID在页面中选择元素速度极快,以上两个例子在优化前后不会有明显的性能差异。在实际编码中,应该选择可读性最好、最容易维护的方式。如果真的遇到了性能瓶颈,以上优化技术都可以起到立竿见影的效果。
(注:本文基于《jQuery基础教程(第3版)》相关章节内容编撰而成。)

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java是一種流行的程式語言,具有強大的檔案處理功能。在Java中,遍歷資料夾並取得所有檔案名稱是一種常見的操作,可以幫助我們快速定位和處理特定目錄下的檔案。本文將介紹如何在Java中實作遍歷資料夾並取得所有檔案名稱的方法,並提供具體的程式碼範例。 1.使用遞歸方法遍歷資料夾我們可以使用遞歸方法遍歷資料夾,遞歸方法是一種自身呼叫自身的方式,可以有效地遍歷資料夾中

作為世界上最受歡迎的程式語言之一,Java已成為許多企業和開發者的首選語言。然而,程式碼的重構對於保持程式碼品質以及開發效率至關重要。 Java程式碼由於其複雜性,隨著時間的推移可能會變得越來越難以維護。本文將討論如何進行Java程式碼的重構,以提高程式碼品質和可維護性。了解重構的原則Java程式碼重構的目的在於改進程式碼的結構、可讀性和可維護性,而不是簡單的「改變程式碼」。因

程式效能最佳化方法包括:演算法最佳化:選擇時間複雜度較低的演算法,減少迴圈和條件語句。資料結構選擇:根據資料存取模式選擇合適的資料結構,例如查找樹和雜湊表。記憶體最佳化:避免建立不必要對象,釋放不再使用的內存,使用記憶體池技術。執行緒優化:識別可並行化任務,優化執行緒同步機制。資料庫最佳化:建立索引加快資料檢索,優化查詢語句,使用快取或NoSQL資料庫提升效能。

PHPglob()函數使用範例:遍歷指定資料夾中的所有文件在PHP開發中,經常需要遍歷指定資料夾中的所有文件,以實現檔案批次操作或讀取。 PHP的glob()函數正是用來實現這種需求的。 glob()函數可以透過指定一個通配符匹配模式,來取得指定資料夾中符合條件的所有檔案的路徑資訊。在這篇文章中,我們將會示範如何使用glob()函數來遍歷指定資料夾中的所有文件

PHP高並發處理中的程式碼最佳化技巧隨著網路的快速發展,高並發處理已經成為了web應用程式開發的重要議題。在PHP開發中,如何優化程式碼以應對高並發請求成為了程式設計師需要解決的難題。本文將介紹一些PHP高並發處理中的程式碼最佳化技巧,並加上程式碼範例進行說明。合理利用快取對於高並發的情況,頻繁存取資料庫會導致系統負載過大,並且存取資料庫的速度相對較慢。因此,我們可

一、代码优化避免使用过多的安全注解:在Controller和Service中,尽量减少使用@PreAuthorize和@PostAuthorize等注解,这些注解会增加代码的执行时间。优化查询语句:使用springDataJPA时,优化查询语句可以减少数据库的查询时间,从而提高系统性能。缓存安全信息:将一些常用的安全信息缓存起来,可以减少数据库的访问次数,提高系统的响应速度。二、数据库优化使用索引:在经常被查询的表上创建索引,可以显著提高数据库的查询速度。定期清理日志和临时表:定期清理日志和临时

概念差異:Iterator:Iterator是一個接口,代表一個從集合中取得值的迭代器。它提供了MoveNext()、Current()和Reset()等方法,讓你遍歷集合中的元素,並對目前元素進行操作。 Iterable:Iterable也是一個接口,代表一個可迭代的物件。它提供了Iterator()方法,用於傳回一個Iterator對象,以便於遍歷集合中的元素。使用方式:Iterator:要使用Iterator,需要先取得一個Iterator對象,然後呼叫MoveNext()方法來移動到下一

Python3.x中如何使用os模組遍歷目錄中的檔案在Python中,我們可以使用os模組來進行檔案和目錄的操作。 os模組是Python標準庫中的重要模組,提供了許多和作業系統相關的功能。在本文中,我們將介紹如何使用os模組來遍歷一個目錄中的所有檔案。首先,我們需要導入os模組:importos接下來,我們可以使用os.walk()函數來遍歷目錄。
