2011-07-27 3 views
1

Sizzle (jQuery)가 셀렉터를 실행할 때 내부적으로 수행하는 작업에 대한 정보를 찾고 있습니다. 이상적으로 다른 브라우저 또는 처리 방식에 대한 글쓰기/블로그 게시물이나 다양한 브라우저의 선택기를 디 컴파일 할 수있는 사이트입니다. 특히, 나는 내가 쓴 코드가 매우 큰 데이터 세트에 IE7을 잠그고 말을하는 팀이 있습니다jQuery 선택기 엔진 (sizzle)의 내부 구현에 관한 정보 찾기

.find('.row:not(.row-0) .col-' + colN + ':not(.forbid-transfer)') 

을 그리고로 변경하는 것이 :

.find('.row:not(.row-0) .col-' + colN).filter(':not(.forbid-transfer)') 

수정 속도 문제. 나 여기에

는 완전한 입니다 무슨 일 내가 그 두 엔진 내에서 동일하다고 가정 싶지만, 분명히 그렇지 않은 때문이다. 부모 컨테이너 내에있는은 모두 div이므로 div.row... div.col....으로 변경하면 아무 것도 속도를 높여서는 안됩니다.

+1

성능에 차이가 없다면'filter (": not()")'대신'.not()'을 사용하는 것이 좋습니다 – meagar

+0

* "나는 코드 I 매우 큰 데이터 세트에서 IE7을 잠그고 있습니다. "* 1 단계 : 스스로 고립시켜 복제하십시오. 나는 그것을 믿는 데 어려움을 겪고 있음을 인정해야한다. 셀렉터에서': not'의 이전 버전이 아니라면 일부 브라우저에서는 믿을 수 있습니다. 특별한 의사 클래스를 사용하지 않으면 Sizzle이'querySelectorAll'을 연기 할 것이기 때문입니다. 하지만 IE7에는'querySelectorAll'이 없으므로 다른 곳에서는': not'을 사용합니다 ... –

+0

가장 큰 차이점은 첫 번째 경우 브라우저가 두 번째 클래스 이름 테스트를 수행하는 것입니다. 두 번째는 오른쪽에서 왼쪽으로 (내가 생각하기에) 작동하기 때문입니다. 따라서 ".col-n"클래스와 "forbid-transfer"클래스 *를 모두 검사하기 전에 요소에 "행"상위 클래스가 있는지 확인합니다. 두 번째 경우, 후보자 명단이 추려 질 때까지 "금지 된 전송"에 대해 걱정할 필요가 없습니다. – Pointy

답변

0

나는 아마되지 지원하는 브라우저 "querySelectorAll()"에서, ​​

.find('.row:not(.row-0)').find('.col-' + colN).filter(':not(.forbid-transfer)') 

가 더 빨리 IE7에있을 것입니다 내기. 그것으로도 페이지의 세부 사항에 달려 있습니다.