2012-04-04 1 views
1

현명한 경우에 대한 조언이 필요합니다. 주로 AJAX 요청을 통해 사이트 데이터를로드하고 있습니다. 로드 시간과 서버 호출을 저장하기 위해 전역 객체에로드 된 모든 데이터를 저장하고 사용자가 페이지를 다시 선택하면 해당 데이터를 재활용합니다. 는 등 : 하나의 객체에 전체 사이트를 캐시로드 된 모든 데이터를 하나의 자바 스크립트 객체에 저장

var page = ['level 1','level 2','level 3','level 4']; 
var mysiteobj = []; 
if (page[0] == 'level 1') 
    if (!mysiteobj['level 1']) 
     $.ajax(/*load data*/).done(function(data){ mysiteobj['level 1'] = data; /*display data*/ }); 
    else /*display mysiteobj['level 1']*/ 
    if (page[1] == 'level 2') 
     if (!mysiteobj['level 1']['level 2']) 
     $.ajax(/*load data*/).done(function(data){ mysiteobj['level 1']['level 2'] = data; /*display data*/ }); 
     else /*display mysiteobj['level 1']['level 2']*/ 
...etc 

예컨대을 현명하다 ... 그리고 경우

가 궁금하네요. 다소 이상한 표기법을 명확히하기 위해 '레벨 1'은 사용자가 검색 할 수있는 모든 지리적 영역이며 '레벨 2'는 사용자가 볼 수있는 지역의 모든 부서이며 '레벨 3'은 부서의 카테고리가됩니다 '레벨 4'는 지역의 부서 카테고리에 나열된 제품 또는 항목이 될 것이라고 말합니다.

지금 내 방법은 모든 지리적 영역이있는 개체가 있고, 두 번째 개체가 새 지리로드 될 때마다 덮어 쓰여지고 세 번째 개체가 내 범주를 보유하고 네 번째 목록/제작품.

이 경우 이해가된다면 알려주십시오. 나는 질문을 단순화했다고 생각합니다. 다루기 힘들어지고 브라우저가 쓰러지기 전에 얼마나 큰 객체를 만들 수 있습니까?

답변

2

아직로드하지 않은 경우 필요에 따라 데이터를로드하지 않는 이유는 무엇입니까?

는 예를 들어, 사용자가 해당하지 않을 경우 이미, 레벨 2 부하를 선택하면, 레벨 그리고 1

로드하고 계속할 수 있습니다.

그래서 이미로드 된 것을 유지할 수 있지만 시간이 걸리면 데이터를 검색한다는 사실을 알리면 사람들이로드하는 것을 사람들이 이해할 수 있습니다.

개인적으로로드 요청이 있다는 것을 사용자에게 보여 주므로 사용자는 무슨 일이 일어나는지 알 수 있습니다.

전체 사이트를 미리로드하는 것은 낭비입니다. 이 대용량 데이터 세트를 반환 현명한 메이크업 아약스 요청 결코 것을 고려

+0

페이지 나 사용자가 유휴 상태 일 때 모든 것을 "미리로드"할 수 있습니다. 페이지 1을 탐색 할 때 백그라운드에서 다른 사람들을로드 할 때처럼 말하십시오. – Joseph

+1

@Joseph - 그렇지만 사용자에게 도움이되지 않는 많은 전화를 걸고 있습니다. 휴대 전화를 사용하고 대역폭을 지불하면 많은 문제가 발생할 수 있습니다. 또한 사용자가 레벨 2에서 한 부분 만보고 레벨 2에서 모든 항목을로드하고 대다수를 사용하지 않을 때 메모리를 사용하면 메모리가 다시 사용됩니다. –

+0

좋은 지적입니다. 나는 결코 모바일에 대해 생각하지 않았다. – Joseph

0

....

나는 당신이 저장 레디 스/Memcached가 서버에이 데이터를 수 정확히 당신이 원하는 잡을 자바 스크립트 함수를 만들 생각합니다. 데이터의 양을 전역 변수에 넣는 것은 현명한 방법이 아니므로 사용자가이를 지불하게하십시오.

+0

그것이 내가 의미했던 것입니다. 사용자가 이미 하나의 전역 객체에로드 한 데이터를 캐시합니다.이것이 현명한 지 나는 모른다. 객체 크기에 제한이 있습니까? 대안은 별도의 개체를 만들거나 개체에 데이터를 덮어 쓸 수있게하는 것이 었습니다 (모든 것을 캐시하지 않음). – philtune

관련 문제