2011-04-18 3 views
1

저는 YUI3 위젯을 사용하고 있습니다. jquery guys는 플러그인에 대해 말하는 척하고 있습니다. 나는 5,000 개의 레코드가있는 큰 json 데이터 세트를 가지고있다. 내 응용 프로그램에는 적어도 데이터 세트에 액세스해야하는 위젯이 5 개 있습니다. 현재 html에 json을 포함시키고 페이지 위의 YUI3으로 잡아 내 위젯을 렌더링합니다.Javascript : 대용량 데이터 세트를 여러 함수로 전달

내가 피하고 싶지는 메모리에 저장된 5 세트의 데이터 세트를 가지고 있습니다. 나는 이것을 피할 수있는 디자인 패턴을 찾으려고 노력하고있다. 나는 위젯에 속성으로이 데이터를 전달하면 값으로 전달하고 참조하지 않고 본질적으로 메모리에 복사한다고 생각합니다. 내가 잘못했는지 알려주세요. 데이터는 전 세계적으로 사용 가능하므로 위젯은 직접 액세스 할 수 있지만 메모리의 데이터도 복사합니다.

처음 개체를 만들면 개체에 데이터를로드하고 해당 개체를 참조로 전달하여 해당 속성을 전달하면 모든 위젯이 동일한 데이터 인스턴스에 액세스 할 수 있습니다.

이 작업을 수행 하시겠습니까? 당신의 생각과 이런 식으로 어떻게 설정할지 알려주세요.

(긍정적 인) 의견을 보내 주셔서 감사합니다.

답변

2

이 같이 정의 자신의 별도의 .js 파일에 주위에 "데이터 세트", 유지하는 경우 :

// My Huge Data Set 
// Author: bababa 
// 
(function(window) { 
    window['hugeDataSet'] = { 
    // millions of lines of stuff 
    }; 
})(this); 

을 다음 일반 <script> 태그 또는 스크립트 로더 있음을 가져올 때, 데이터의 전체 사본이 하나만있을 것입니다. 다음과 같이 참조 할 수 있습니다.

someWidget.doSomething(hugeDataSet); 

및 데이터 복사본을 만들지 않습니다. 물론 HTML의 <script>에있는 데이터를 인라인으로 드롭 할 수 있지만 서버 쪽 템플릿 (예 : php 또는 jsp 등)에 의해 HTML이 생성되면 캐싱되지 않습니다.

+0

html은 동적은 아니지만 데이터는입니다. 나는 현재 스크립트 태그로 html에 임베드하고 있으므로 현재 모든 위젯에서 데이터 세트에 대한 전역 액세스 권한을 갖고 있습니다. 그래서, 내 위젯 중 하나의 변수에 데이터를 할당 할 때마다 메모리에 사본을 만들지 않습니까? 나는 JS가 어떻게 이런 일을 처리하는지 완전히 모르겠습니다. 또한 도움을 주셔서 감사합니다. – imns

+0

아니요, 단순히 객체에 대한 참조를 전달하면 사본이 만들어지지 않습니다. 사실 복사를하기 위해서는 코드를 명시 적으로 작성해야합니다. – Pointy

-1

위젯이 매번 5,000 개의 모든 레코드에 액세스해야합니까? 아니면 데이터의 특정 하위 집합 만 필요합니까?

json을 사용하려고 시도하는 것처럼 보입니다. 여기에는 json이 데이터베이스에 대한 대안이 있습니다.

가장 적합한 해결책은 데이터를 적절한 데이터베이스에 저장하고 서버 측 스크립트로 필요한 데이터를 요청하고 이러한 데이터를 위젯으로 다시 보내주는 것입니다.

구문 분석 텍스트는 데이터베이스 쿼리와 비교할 때 매우 느립니다.

+0

데이터가 데이터베이스에 있으며 우리는 그것을 대체하기 위해 json을 사용하지 않습니다. 우리는 클라이언트 측에서 거의 모든 것을 처리하는 단일 응용 프로그램을 만들고 있습니다. 우리는 새로운 페이지를 요청하는 것과 같은 간단한 작업을 할 때마다 서버를 빠르게 치기를 원합니다. 이것이 우리가 이렇게하는 이유입니다. – imns

+0

JSON에서 데이터베이스의 내용을 덤핑하여 클라이언트 *로 보내는 것은 * DB를 JSON으로 바꾸는 것입니다. 5K 레코드를로드하고 JavaScript로 파싱하는 것은 가장 빠른 방법이 아닙니다. 그렇지 않으면이 질문을하지 않을 것입니다.Pointy는 데이터 세트가 여러 번 복사되지 않는다고 말했습니다.) 속도를 최적화하기 위해 캐싱과 프리 페치의 혼합을 고려하십시오. – Sylverdrag