少し前に jQuery のアニメーション キューを勉強していたときに、jQuery のキャッシュ システムも非常に強力であることを発見しました。これまでに少し触れたことはありましたが、詳しく勉強したことはありませんでした。 jQuery のキャッシュ システムは、外部で使用する場合は比較的単純です。たとえば、特定の URL データをキャッシュに保存するには、次のように記述するだけです:
jQuery キャッシュ システムの本当の魅力は、アニメーション、イベントなどすべてがこのキャッシュ システムを使用していることにあります。以前 easyAnim を書いていたとき、アニメーション キューを各 DOM 要素のカスタム属性に保存していましたが、これによりキュー データへのアクセスが容易になりましたが、隠れた危険ももたらしました。 DOM 要素にカスタム属性や過剰なデータを追加すると、メモリ リークが発生する可能性があるため、これは避けてください。
return cacheData[key];
}
else if( typeof key === "object" ){
varindex,
thisCache;
if( !key [expando] ){
// DOM 要素の属性を追加します
// 乱数が属性名、インデックス値が属性値
Index = key[expando] = uuid;
thisCache =cacheData[index] = {};
}
else{
Index = key[expando];
thisCache =cacheData[index];
}
if( !thisCache[expando] ){
thisCache[expando] = {};
}
if( ギャンブル // データをキャッシュ オブジェクトに保存します
thisCache[expando][val] = data;
}
//格納されている DOM 要素を返します Data
return thisCache[expando][val];
}
};
var RemoveData = function( key, val ){
if( typeof key === "string" ){
delete queueData[key];
}
else if( typeof key = == "object" ){
if( !key[expando] ){
return;
}
// オブジェクトが空かどうかを確認します
var isEmptyObject = function( obj ) {
var name;
for ( name in obj ) {
return false;
}
return true;
},
RemoveAttr = function(){
try{
// IE8 および標準ブラウザは、delete を使用して属性を直接削除できます
delete key[expando];
}
catch (e) {
// IE6/IE7 を使用属性を削除するためのremoveAttributeメソッド
key.removeAttribute(expando);
}
},
Index = key[expando];
if( val ){
// 指定されたデータのみを削除します
delete cacheData[index][expando][val];
// 空のオブジェクトの場合は、単純にすべてのオブジェクトを削除します
if( isEmptyObject(cacheData[index] [expando] ) ){
deletecacheData[index];
removeAttr();
}
}
else{
// DOM 要素のキャッシュに格納されているすべてのデータを削除します
キャッシュデータを削除[インデックス];
RemoveAttr();
}
}
};
上記のコードで注目すべき点は、IE6/IE7 でカスタム属性を削除する場合、delete を使用するとエラーが報告されることです。標準ブラウザでは、delete を使用して削除することができます。呼び出しの結果は次のとおりです:
data( box, "myBlog", "stylechen.com" );
alert( data( box, "myBlog" ) ); // stylechen.com
removeData( box, "myBlog" );
alert( data( box, "myBlog" ) ); // 未定義
alert( data( box, "myName" ) ) // chen
alert( box[expando] );
removeData( box );
alert( box[expando] ); // 未定義
もちろん、jQuery のキャッシュ システムは私のものよりも複雑ですが、中心となる原理は同じです。 easyAnim は、後続のバージョンでこのキャッシュ システムを導入する予定です。