찾다
웹 프론트엔드JS 튜토리얼jQuery 데이터 캐시 data(이름, 값)_jquery에 대한 자세한 설명 및 구현

프로그래머라면 '캐싱'을 언급하면 ​​'클라이언트(브라우저 캐시)'와 '서버 캐시'를 쉽게 떠올릴 수 있습니다. 클라이언트 캐시는 브라우저 컴퓨터의 하드 드라이브, 즉 브라우저의 임시 폴더에 저장되는 반면, 서버 캐시는 서버의 메모리에 저장됩니다. 물론 일부 고급 응용 프로그램에는 전용 캐시 서버도 있으며, 데이터베이스를 사용한 캐싱 구현까지. 물론 이러한 내용은 이 기사의 범위를 벗어납니다. 이 기사에서 논의할 내용은 가장 널리 사용되는 JavaScript 프레임워크인 jQuery의 데이터 캐싱 구현 원리입니다. 이는 jQuery 버전 1.2.3부터 추가된 새로운 기능입니다.
1. jQuery 데이터 캐시의 역할
jQuery 데이터 캐시의 역할은 중국어 API에 다음과 같이 설명되어 있습니다. "요소의 데이터에 액세스하고 위험을 피하는 데 사용됩니다. 순환 참조." 이 문장을 어떻게 이해해야 할까요? 아래 예를 살펴보세요. 더 좋은 예가 있으면 알려주시기 바랍니다.
(1) 순환 참조의 위험이 있는 예(getDataByName(name) 메소드의 for in 문 참고):

코드 복사 코드는 다음과 같습니다.

Tom> ;

마이크 "text/javascript" >
var userInfo = [
{
"name": "Tom",
"age": 21,
"phone": "020-12345678"
},
{
"이름": "마이크",
"나이": 23,
"전화": "020-87654321"
}]; function getDataByName(name)
{
for (var i in userInfo)
{
if (userInfo[i].name == name)
{
return userInfo[i] ;
break ;
}
}
}
function showInfoByName(name)
{
var info = getDataByName(name)
alert('name:' info.name 'n' 'age:' info.age 'n' 'phone:' info.phone)
}



(2) 예 순환 참조의 위험을 최적화합니다(이 예는 실제로 jQuery 캐시 구현 원칙과 유사합니다. 이 예의 초점은 이름이 객체 키와 직접 일치하도록 userInfo의 JSON 구조를 다시 작성하는 것입니다):


Tom a>
Mike
jQuery 데이터 캐싱의 구현은 실제로 매우 간단합니다. 캐싱 방법은 데이터의 구현 원리를 더 쉽게 이해할 수 있도록 최대한 간단하게 코드를 작성했습니다. 함수 및 테스트 코드는 다음과 같습니다.


코드 복사
코드는 다음과 같습니다

div1


div2
script type="text/javascript">
//캐시 객체 구조는 다음과 같습니다. {"uuid1":{"name1":value1,"name2":value2},"uuid2":{"name1": value1, "name2":value2}}, 각 uuid는 elem 캐시 데이터에 해당합니다. 각 캐시 객체는 여러 이름/값 쌍으로 구성될 수 있으며 value는 모든 데이터 유형이 될 수 있습니다. 예를 들어 다음과 같이 elem 아래에 있을 수 있습니다. JSON 조각 저장: $(elem).data('JSON':{"name":"Tom","age":23})
var 캐시 = {}
//expando as elem New 사용자 정의 속성과의 충돌을 방지하기 위해 여기서는 변수 suffix를 사용합니다.
var Expando = 'jQuery' new Date().getTime()
var uuid = 0; 🎜>함수 데이터(요소, 이름, 데이터)
{
//캐시를 얻거나 설정하려면 적어도 두 개의 매개변수 elem과 이름이 있는지 확인하세요.
if (elem && name)
{
//elem 태그 확장 속성을 가져옵니다.
var id = elem[expando]
if (data)
{
//캐시 데이터 설정
if ( !id)
id = elem[expando] = uuid;
//id 키 객체가 캐시에 존재하지 않는 경우(즉, 이 elem에는 데이터 캐시가 설정되지 않은 경우) 먼저 빈 객체를 만듭니다.
if (!cache[id])
cache[id] = {}
cache[id][name] = 데이터
}
else
{
//캐시 데이터 가져오기
if (!id)
return '캐시를 설정하지 않음!'
else
return 캐시[id][name]
}
}
var div = document.getElementById(' div1');
data(div, "tagName", "div")
data(div, "ID", "div1"); 🎜>alert(data(div, "tagName")) ; //div
alert(data(div, "ID")) //div1
var div2 = document.getElementById('div2');
alert(data(div2, "tagName") ); //캐시를 설정하지 않았습니다!



3. 🎜>
(1) jQuery 캐시 개체는 AJAX 응용 프로그램에서 전역적으로 페이지가 새로 고쳐지는 경우가 매우 드물기 때문에 계속해서 데이터를 조작하면 이 개체가 항상 존재하게 됩니다. 사용하면 개체가 계속 커지며 궁극적으로 프로그램 성능에 영향을 미칩니다. 따라서 우리는 이 객체를 시간 내에 정리해야 합니다. jQuery는 또한 해당 메소드인 제거데이터(name)를 제공합니다. name은 데이터 값을 설정할 때 사용한 이름 매개변수입니다.
또한 jQuery 코드에 대한 이해를 바탕으로 다음과 같은 상황에서는 데이터 캐시를 수동으로 지울 필요가 없다는 것을 알게 되었습니다.
jQuery는 객체의 가능한 캐시를 지웁니다. jQuery 관련 소스코드 참고 :


코드 복사

코드는 다음과 같습니다. remove:function (selector) { if (!selector || jQuery.filter(selector, [this]).length) {
// 메모리 누수 방지
jQuery("*", this).add([this]).each(function()
{
jQuery.event.remove(this);
jQuery.removeData(this);
}); if (this .parentNode)
this.parentNode.removeChild(this);
}
}


elem 하위 요소가 존재합니다. 데이터 캐시가 있는 경우 jQuery는 하위 개체에 대해 존재할 수 있는 데이터 캐시도 지웁니다. 왜냐하면 jQuery의 empty() 구현은 실제로 하위 요소를 삭제하기 위해 루프에서 제거()를 호출하기 때문입니다. jQuery 관련 소스코드 참조:




코드 복사


코드는 다음과 같습니다.
empty:function () { // 요소 노드 제거 및 메모리 누수 방지 jQuery(this).children().remove() // 남은 노드 제거
(this. firstChild)
this.removeChild(this.firstChild)
}


2. jQuery 복사 노드 clone() 메서드는 데이터 캐시를 복사하지 않습니다. 정확하게 말하면 jQuery는 새로 복사된 요소 캐시를 저장하기 위해 전역 캐시 개체에 새 노드를 할당하지 않습니다. jQuery는 가능한 캐시 포인팅 속성(elem의 Expando 속성)을 clone()의 빈 속성으로 대체합니다. 이 속성을 직접 복사하면 원본 요소와 새로 복사된 요소 모두 데이터 캐시를 가리키며 중간 상호 운용은 두 요소의 캐시 변수에 영향을 미칩니다. 다음 jQuery 코드는 Expando 속성을 삭제합니다(jQuery 1.3.2, 이전 버전에서는 이 방식으로 처리하지 않았으며 새 버전에서 이 메서드의 성능이 확실히 더 좋습니다).
jQuery.clean([html.replace(/ jQueryd ="(?:d |null)"/g, "").replace(/^s*/, "")])[0]; >데이터 캐시를 함께 복사하는 것은 때로는 매우 유용합니다. 예를 들어 드래그 작업에서 소스 대상 요소 노드를 클릭하면 반투명 요소 복사본이 복사되어 드래그가 시작되고 데이터 캐시가 드래그에 복사됩니다. 레이어. 드래그가 완료될 때까지 현재 드래그된 요소와 관련된 정보를 얻을 수 있습니다. 이제 jQuery 메소드는 그러한 처리를 제공하지 않습니다. 우리는 무엇을 할 수 있습니까? 첫 번째 방법은 jQuery 코드를 다시 작성하는 것입니다. 이 방법은 분명히 어리석고 비과학적입니다. 올바른 접근 방식은 소스 대상의 데이터를 복사하고 데이터를 복사된 요소로 재설정하여 data(name, value) 메서드가 실행될 때 jQuery가 전역 캐시 개체에 새 공간을 열어주는 것입니다. 구현 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
if ( typeof($.data( currentElement)) == '숫자')
{
var elemData = $.cache[$.data(currentElement)]
for (var k in elemData)
{
dragingDiv.data(k, elemData[k]);
}
}

위 코드에서 $.data(elem,name,data)는 3개를 포함합니다. 매개변수 elem 매개변수가 하나만 있는 경우 이 메소드는 캐시 키(예: uuid)를 반환합니다. 이 키를 사용하면 전체 캐시 개체를 가져온 다음 개체의 데이터를 새 개체에 복사할 수 있습니다.
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
jquery实现多少秒后隐藏图片jquery实现多少秒后隐藏图片Apr 20, 2022 pm 05:33 PM

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

axios与jquery的区别是什么axios与jquery的区别是什么Apr 20, 2022 pm 06:18 PM

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

jquery怎么修改min-height样式jquery怎么修改min-height样式Apr 20, 2022 pm 12:19 PM

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

jquery怎么在body中增加元素jquery怎么在body中增加元素Apr 22, 2022 am 11:13 AM

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

jquery怎么删除div内所有子元素jquery怎么删除div内所有子元素Apr 21, 2022 pm 07:08 PM

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

jquery中apply()方法怎么用jquery中apply()方法怎么用Apr 24, 2022 pm 05:35 PM

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

jquery怎么去掉只读属性jquery怎么去掉只读属性Apr 20, 2022 pm 07:55 PM

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

jquery on()有几个参数jquery on()有几个参数Apr 21, 2022 am 11:29 AM

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경