2010-07-30 10 views
0

자바 스크립트 이벤트가 원인이 아닌 것으로 판단되는 경우 웹 페이지 성능 문제를 어떻게 진단합니까?자바 스크립트 느린 외부 이벤트

jqGrid을 사용하는 웹 응용 프로그램이 있습니다. 그리드를 클릭하면 모든 클릭 이벤트가 발생하는 등의 일이 발생하기 전에 2-3 초 동결됩니다. 페이지의 다른 곳을 클릭하면 괜찮습니다 (즉각적인 응답). 행을 제거하면 지연이 줄어 듭니다 (50 행은 매우 느리지 만 5 행은 즉각적인 응답을 생성합니다).

페이지의 모든 이벤트의 바인딩을 해제하면 문제가 해결되지 않으므로 내가 누락 된 이벤트가 있다고 생각하게됩니다.

페이지 소스를 바탕 화면에 저장하고 브라우저에서 해당 HTML 파일을 열면이 느린 동작이 표시되지 않습니다. 이것은 실제로 JavaScript 문제라는 것을 나타냅니다.

Firefox 3.6.8 및 최신 버전의 Firebug로 테스트 중입니다. 이 문제는 다른 브라우저에도 영향을 미치지 만 빠른 브라우저 (Safari 및 Chrome)에서는 그렇지 않습니다.

업데이트 : 놀랍게도 IE7은이 지연으로 고통받지 않는 것 같습니다. 나는 jqGrid 클릭 이벤트의 시작 부분에 경고를 두었고 그리드를 클릭하자마자 이벤트 상자가 나타났다. Firefox에는 여전히 여러 초 지연이 있으며 Chrome과 Safari의 지연은 매우 짧습니다 (IE만큼 짧지는 않지만 여전히 매우 짧습니다).

업데이트 # 2 : 저는 이것이 Firefox의 버그 일 수 있다고 확신합니다. 모든 이벤트를 바인딩 해제/죽이기는하지만 파이어 폭스가 모든 것을 제대로 정리하지 못하고 있다고 생각한다. 다른 모든 이벤트를 제거하고 단일 클릭 이벤트를 그리드 테이블에 추가하고 프로파일 러를 시작했습니다. 그런 다음 테이블을 한 번 클릭하고 프로파일 러를 종료했습니다. 나는 "프로필 활동 없음"을 되찾았다. 메시지.

답변

2

내가 추천 할 수있는 가장 좋은 도구는 IE 용 프로파일 러 (일반적으로 JS 성능이 가장 느리기 때문에 실제로는 최적화를 시작하는 데 적합한 테스트 환경)입니다.

이렇게하면 반복되는 메서드 호출, 호출 트리 및 CPU주기가 어디에서 진행되는지 확인할 수 있습니다. Check out their tutorials on usage/features 시작하십시오.

오, 그래, 그것은

+0

덕분에, 나는 그것을 확인합니다. 잘만되면 방화범이 끌리는 프로파일 러보다 더 유용 할 것이기 때문에 "프로파일 작업 없음"이라고보고했다. – MikeWyatt

0

: 당신이() 모든 클릭 이벤트와 라이브 사용하고 무료? 특정 페이지에 너무 많은 인스턴스가있는 경우 live()가 페이지 성능을 실제로 저하시킬 수 있습니다. 특히 Ajax는 라이브가 리 바인드해야하는 링크가 포함 된 컨텐츠를 재구성했습니다.

더 많은 정보를 원하시면 여기를 참조하십시오 :

Does jquery live slow down websites?

+0

jqGrid 코드에서 live()에 대한 참조를 찾을 수 없으며 사용한 적이 없습니다. 안전을 위해 모든 라이브 이벤트를 언 바인드합니다 ('$ ('*'). add (document) .die()'). 그것은 지연에 영향을 미치지 않는 것 같습니다. – MikeWyatt