jQuery的快取機制淺析_jquery
前不久在研究jQuery的動畫隊列的時候,發現jQuery的快取系統也很強大,儘管以前也稍微接觸過,但一直都沒有深入研究過。 jQuery的快取系統在外部應用的時候都比較簡單,例如要將某個URL資料存到快取中只要這麼寫:
var val = "stylechen.com";
$("div").data( "url" ); // 回傳undefined
$ ("div").data( "url", val ); // 回傳"stylechen.com"
$("div").data( "url" ); // 回傳"stylechen.com"
不光可以儲存字串,上面的val也可以是任意數據,物件、陣列、函數等都可以存到裡面。僅僅實現這種功能還是挺簡單的,聲明一個全局物件用來存儲數據,然後使用data方法來存儲或返回數據:
var cacheData = {} // 用來儲存資料;的全域物件
var data = function( key, val ){
if( val !== undefined ){
cacheData[key] = val;
}
return cacheData[key];
};
jQuery快取系統的真正魅力在於其內部應用程式中,動畫、事件等都有用到這個快取系統。之前在寫easyAnim的時候,我將動畫的隊列都儲存到各DOM元素的自訂屬性中,這樣雖然可以方便的存取佇列數據,但也同時帶來了隱患。如果為DOM元素添加自訂的屬性和過多的資料可能會造成記憶體洩漏,所以要盡量避免這麼幹。
如果是使用jQuery的快取系統來存放DOM元素的數據,會先給該DOM元素增加一個隨機產生的屬性,這個屬性用來存放存取快取資料的索引值,就好比DOM元素都有一把開啟緩存保險箱的鑰匙,只要有了鑰匙就可以隨時開啟緩存保險箱。將本來存放到DOM元素中的資料都轉到了快取中,而DOM元素本身只要儲存一個簡單的屬性就可以了,這樣就可以將由DOM元素引起的記憶體洩漏的風險規避到最小。以下是我模擬jQuery自己寫的一個簡單的快取系統:
var cacheData = {}, // 用來儲存資料的全域物件
uuid = 0,
// 宣告隨機數
expando = "cacheData" ( new Date() " " ).slice( -8 );
var data = function( key, val, data ){
if( typeof key === "string" ){
if( val != = undefined ){
cacheData[key] = val;
}
return cacheData[key];
}
else if( typeof key === "object" ){
var index,
[expando] ){
// 增加一個DOM元素的屬性
// 隨機數是屬性名稱索引值是屬性值
index = key[expando] = index] = {};
}
else{
index = key[expando];
thisCache = cacheData[ !thisCache[expando] ){
thisCache[expando] = {};
}
if( gambling data !== undefined ){
// 將資料儲存至快取物件中
thisCache[expando][val] = data;
}
🎜> return thisCache[expando][val];
}
};
var removeData = function( key, val ){
if( typeof key === "string" ){
delete cacheData[key];
}
delete cacheData[key];
}
delete iftype == "object" ){
return;
}
// 偵測物件是否為空
}
// 偵測物件是否為空白
}
// 偵測物件是否為空
🎜> var name;
for ( name in obj ) {
return false;
🎜> removeAttr = function(){
try{
// IE8及標準瀏覽器移除物件
delete key[expando IE6/IE7使用removeAttribute方法來刪除屬性
key.removeAttribute(expando);
}
},
🎜 > // 只刪除指定的資料
delete cacheData[index][expando][val];
/// 若是空物件索性全部刪除
if( ismptyObjectObject( cacheEindextyObject( cacheDataindex][🎜] )[ ){
delete cacheData[index];
removeAttr();
}
} delete cacheData[index];
removeAttr();
}
}
};
上面的程式碼值得注意的是IE6/IE7中用delete來刪除自訂的屬性會報錯,只能使用removeAttribute來刪除,標準的瀏覽器都可以使用delete來刪除。下面是呼叫的結果:
複製程式碼
程式碼如下:
list = document.getElementById( "list" );
alert( data( box, "myName" ) ); // chen
alert( data( box, "myBlog" ) ); // stylechen.com
當然,jQuery的快取系統比我的這個要複雜些,不過核心原理還是一樣的。 easyAnim將會在後續的版本中引入這個快取系統。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

jQuery引用方法詳解:快速上手指南jQuery是一個受歡迎的JavaScript庫,被廣泛用於網站開發中,它簡化了JavaScript編程,並為開發者提供了豐富的功能和特性。本文將詳細介紹jQuery的引用方法,並提供具體的程式碼範例,幫助讀者快速上手。引入jQuery首先,我們需要在HTML檔案中引入jQuery函式庫。可以透過CDN連結的方式引入,也可以下載

jQuery中如何使用PUT請求方式?在jQuery中,發送PUT請求的方法與發送其他類型的請求類似,但需要注意一些細節和參數設定。 PUT請求通常用於更新資源,例如更新資料庫中的資料或更新伺服器上的檔案。以下是在jQuery中使用PUT請求方式的具體程式碼範例。首先,確保引入了jQuery庫文件,然後可以透過以下方式發送PUT請求:$.ajax({u

標題:jQuery小技巧:快速修改頁面所有a標籤的文字在網頁開發中,我們經常需要對頁面中的元素進行修改和操作。使用jQuery時,有時候需要一次修改頁面中所有a標籤的文字內容,這樣可以節省時間和精力。以下將介紹如何使用jQuery快速修改頁面所有a標籤的文本,同時給出具體的程式碼範例。首先,我們需要引入jQuery庫文件,確保在頁面中引入了以下程式碼:<

jQuery如何移除元素的height屬性?在前端開發中,經常會遇到需要操作元素的高度屬性的需求。有時候,我們可能需要動態改變元素的高度,而有時候又需要移除元素的高度屬性。本文將介紹如何使用jQuery來移除元素的高度屬性,並提供具體的程式碼範例。在使用jQuery操作高度屬性之前,我們首先需要了解CSS中的height屬性。 height屬性用於設定元素的高度

標題:使用jQuery修改所有a標籤的文字內容jQuery是一款受歡迎的JavaScript庫,被廣泛用於處理DOM操作。在網頁開發中,經常會遇到需要修改頁面上連結標籤(a標籤)的文字內容的需求。本文將介紹如何使用jQuery來實現這個目標,並提供具體的程式碼範例。首先,我們需要在頁面中引入jQuery庫。在HTML檔案中加入以下程式碼:

jQuery是一種流行的JavaScript庫,被廣泛用於處理網頁中的DOM操作和事件處理。在jQuery中,eq()方法是用來選擇指定索引位置的元素的方法,具體使用方法和應用場景如下。在jQuery中,eq()方法選擇指定索引位置的元素。索引位置從0開始計數,即第一個元素的索引是0,第二個元素的索引是1,依此類推。 eq()方法的語法如下:$("s

如何判斷jQuery元素是否具有特定屬性?在使用jQuery操作DOM元素時,常會遇到需要判斷元素是否具有某個特定屬性的情況。在這種情況下,我們可以藉助jQuery提供的方法來輕鬆實現這項功能。以下將介紹兩種常用的方法來判斷一個jQuery元素是否具有特定屬性,並附上具體的程式碼範例。方法一:使用attr()方法和typeof運算子//判斷元素是否具有特定屬

jQuery是一個受歡迎的JavaScript函式庫,廣泛用於網頁開發。在網頁開發過程中,經常需要透過JavaScript動態地在表格中新增一行。本文將介紹如何使用jQuery為表格新增一行,並提供具體的程式碼範例。首先,我們需要在HTML頁面中引入jQuery函式庫。可以透過以下程式碼在標籤中引入jQuery庫:
