2012-02-26 2 views
0

이 플러그인을 Ajax로로드 된 요소에 올바르게 연결하는 데 어려움을 겪고 있으며 때로는 첨부 된 이유를 파악하지 못하고 때때로 그렇지 않습니다. 이 특정 플러그인에만 해당됩니다. 그래서 제 질문은, setInterval을 300 밀리 초마다 실행 시키면 jQuery 플러그인을 페이지에 있거나 없을 수있는 특정 요소에 연결하는 경우 시간이 지남에 따라 브라우저가 느려지 게됩니다.jQuery setInterval 매 300 밀리 초, 브라우저에 너무 많은로드가 있습니까?

같은 :

setInterval(function(){ 
    $(".nano").nanoScroller(); 
}, 300); 

제가 처음 일을 시도하는 것입니다 :

$.ajax({ 
type: "POST", 
url: "ajax/load/notifications/notifications.php", 
cache: false, 
success: function(html){ 
$(".notification-container").html(html); 
$(".nano").nanoScroller(); 

} 
}); 
그러나 그것 (어쨌든 모든 방법은, 어떤 부분이 변경되는 부착 아니에요

있지만 주요 플러그인)

그러나 다른 아약스 이벤트를 호출하고 해당 콜 아웃에서 동일한 것을 트리거하면이 요소와 다른 요소에 연결됩니다.

setInterval 함수는이 값을 모두 그 함수에 추가합니다.

+0

을 한 후가 300ms 간격은 문제가되지 않는다; 분명히 문제가 될 수있는 각 간격을 실행하려고 시도하는 것입니다. 그리고 모든 ".nano"요소에 interval을 사용하면 이전에 처리 된 요소에 대해서도 .nanoScroller()를 다시 적용하므로 그리 효율적이지 않습니다. Ajax 성공 코드가 그 일을하지 않는 이유에 대해 더 자세히 살펴 보길 권한다. – nnnnnn

+0

그래, 나는 지난 몇 시간 동안 이것을 알아 내려고 노력해 왔으며 그것에 영향을 끼칠만한 것이 아무것도 없다고 동의한다. –

답변

1

jQuery 객체를 캐시하지 않고 300ms마다 DOM을 검색하는 것은 비효율적입니다.

function nanoTimer() { 
    if (timer) { 
     clearInterval(timer); 
    } 
    var $nano = $('.nano'); 
    timer = setInterval(function() { 
     $nano.nanoScroller(); 
    }, 300); 
} 

nanoTimer(); 

함수 호출 일반적인 의미로도 AJAX

+0

그건 도움이되지 않습니다. OP는'setInterval'을 사용하여 처음 발견되지 않은 요소를 찾으므로, 원래'$ ('. nano')의 결과를 캐시하면 나중에 추가 된 항목을 절대 포함하지 않습니다. – nnnnnn

+0

ajax 뒤에 함수를 호출하면 요소의 새 캐시가 만들어집니다. – charlietfl