사례에 민감한 jQuery를 위해이 솔루션을 속도를 높이는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1407434

문제

나는 찾았다 이 솔루션 사례에 민감한 jQuery의 경우 :contains stackoverflow의 선택기. 그것은 훌륭하게 작동하지만 성능 비용으로옵니다. 다른 사람 이이 솔루션이 조금 느리다고 생각합니까?

나는 사용하고있다 :contains 테이블을 검색하는 선택기. 사용자는 검색 문자열을 텍스트 상자에 입력합니다. 각 KeyStroke에 대해 해당 문자열의 테이블을 검색하여 해당 문자열이 포함 된 행만 표시합니다. :contains 선택자. 사례에 민감한 솔루션을 구현하기 전에이 검색은 빠르고 기뻐했습니다. 이제이 솔루션을 사용하면 각 KeyStroke 후 잠시 잠깐 멈 춥니 다.

이 솔루션이 어떻게 쏟아 질 수 있는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

Google에서 사례에 민감한 검색의 또 다른 솔루션을 찾았습니다 ( 에릭 판) 원래 사용했던 것과 약간 다릅니다.

원래의:

return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;

Ericphan :

return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;

이 둘을 비교하면 Eric Phan의 솔루션이 DOM 속성에 직접 액세스하고 사용하는 것을 볼 수 있습니다. toLowerCase() 대신에 toUpperCase(). 후자는 실제로 중요하지 않지만, 전자는 사례에 민감한 검색의 성능을 실제로 향상시키는 것입니다. 원래 솔루션을 사용할 수 있습니다 (a.textContent || a.innerText || "") 대신에 jQuery(a).text() 모든 차이를 만들었습니다!

이제 나는 조금 궁금합니다. 여기에 후속 질문이 있습니다 : 거래는 무엇입니까? jQuery.text()? 왜 그렇게 느리나요? 내 가정이 있지만 전문가가 말하는 것을 듣고 싶습니다.

마지막으로, 응답 한 모든 분들께 감사드립니다. 나는 당신의 도움을 적용합니다. =))

다른 팁

사용자가 모든 키 스트로크가 아니라 지정된 시간 동안 입력을 중지 한 후 선택기를 한 번만 확인할 수 있습니다.

예를 들어 간단한 구현 :

용법:

$("#textboxId").keyup(function () {
  typewatch(function () {
    // executed only 500 ms after the user stopped typing.
  }, 500);

구현:

var typewatch = function(){
    var timer = 0;  // store the timer id
    return function(callback, ms){
        clearTimeout (timer);  // if the function is called before the timeout
        timer = setTimeout(callback, ms); // clear the timer and start it over
    }  
}();

각 키 스트로크 후에 확인할 수는 없지만 마지막 키 스트로크가 누른 후 1 초가 걸렸을 수도 있습니다. 이렇게하면 사용자가 입력하는 동안 지속적으로 확인하지 않고 사용자가 완료되거나 타이핑을 일시 중지하는시기를 확인합니다.

후속 질문은 다음과 같습니다. jquery.text ()와의 거래는 무엇입니까? 왜 그렇게 느리나요?

나는 그것이 느린다고 생각한다 $(a) (DOM 요소를 jQuery 객체로 변환) .text().

Jason이 말한 것을 추가하기 위해 사용해 볼 수 있습니다. 이 플러그인 그것을 달성하기 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top