2014-09-27 2 views
3

클릭 한 후 페이지가 다시로드되므로 클릭 한 마지막 항목을 추적 할 수 있으므로 로컬 저장소를 사용하고 있습니다.

사용중인 메모리를 줄이기 위해 localStorage를 지우려고했으나 사용량이 10 분 미만인 경우 이미 1.000.000K입니다.

이 스크립트는 페이지가 다시로드 될 때마다 다른 위치에서이 변수를 다시 선언합니까?
메모리가 너무 많이 사용되는 이유는 무엇입니까?

이것은 내 전체 코드입니다.

크롬을 만들기위한 확장 프로그램입니다. 옵션을 선택하고 버튼을 클릭하고, 버튼이 양식을 제출하고, 페이지를 다시로드하며, 반복해서 반복합니다. 크게 메모리 소비를 감소하지만, 시간, 메모리가 제기 한 VAR 선언하지 않고, 코드 업데이트많은 메모리를 사용하는 간단한 함수

var last = localStorage.getItem('last'); 
var current = getNext(last); 
var prox = getNext(current); 

localStorage.clear(); 

$('select[name="myselect"] option').each(function(){ 
    if($(this).val().indexOf(current)>-1){ 
     $(this).prop('selected', true); 
     $('.abc').first().click(); 
     localStorage.setItem('last',current); 
    } 
}); 

function getNext(current){ 
    var arrIds = ['227','228','229','230','231','232']; 
    return arrIds[arrIds.indexOf(current)+1] || '227'; 
} 

(10 분은 160.000K에서 240.000K에 갔다) :

$('select[name="myselect"] option').each(function(){ 
    if($(this).val().indexOf(getNext(localStorage.getItem('last')))>-1){ 
     $(this).prop('selected', true); 
     $('.abc').first().click(); 
     localStorage.setItem('last',getNext(localStorage.getItem('last'))); 
    } 
}); 

function getNext(current){ 
    var arrIds = ['227','228','229','230','231','232']; 
    return arrIds[arrIds.indexOf(current)+1] || '227'; 
} 
+2

이 코드가 관찰 된 메모리 소비를 담당 할 수있는 것처럼 보지 않습니다. – Pointy

+0

"페이지가 다시로드됩니다"라고 말하면 실제로 다시로드합니까 아니면 어떻게 든 내용을 업데이트하고 있습니까? 위의 코드를 제거하면 누출이 수정됩니까? –

+0

Pointy, 이것이 내 코드 다. Squint는 클릭이 실제로 수행 될 때 페이지가 실제로 다시로드되므로 vars를 사용하지 않으려 고합니다. – BernardoLima

답변

4

질문 아래의 주석에있는 토론에 따라 문제는 jQuery 자체에서 온 것으로 보입니다. 정확한 이유는 아직 알려지지 않았지만 jQuery는 양식 제출시 공개되지 않는 데이터를 보유하고 있습니다.

일반적으로 새로 고침을 수행하면 브라우저가 전역을 포함한 모든 메모리를 해제하므로 Chrome 확장 프로그램의 일부 기능과 관련이 있습니다.

jQuery는 jQuery.cache이라는 글로벌 참조에서 데이터 및 클로저를 유지함으로써 메모리 누수 가능성이 커집니다. 이것이 올바르게 정리되지 않으면 누출이 많습니다.

크롬 확장 프로그램을 만들므로 IE6 및 7과 같은 브라우저와의 브라우저 호환성 문제를 염려 할 필요가 없기 때문에 jQuery를 사용하도록 강요해서는 안됩니다. DOM API를 직접 사용하면 그러한 종속성이 없으면 전체 코드는 더 작아지고 은 많이입니다.

관련 문제