2012-07-06 3 views
0

나는 많은 배열을 가지고 있습니다 (2300 요소, 280KB, 최단 형태로 180KB). 페이지 또는 서버를 너무 많이로드하지 않고 PHP 또는 JavaScript로 처리해야합니다. 페이지에 자동 완성 필드가 있는데 사용자가 글자를 입력 할 때마다 180KB 페이지로 요청을 보내지 않습니다 (매우 비효율적 인 것으로 보입니다). 나는 원래 페이지에 모든 것을 저장하고 싶지 않습니다. '페이지를 느리게 만들 것입니다. (그렇지 않습니까?)PHP 또는 JavaScript로 처리 할 큰 배열

나는 그것을 쿠키에 넣으려고했으나 쿠키에 그러한 거대한 배열을위한 공간이없는 것으로 보인다. 어떤 제안? 아마도 데이터베이스 내에서 검색하는 것이 더 나은 솔루션이며 대신 데이터베이스에 저장해야합니다.

+0

자동 완성 필드에 데이터베이스를 사용하는 것은 실제로 고전적인 해결책입니다. 그것은 아주 잘 작동합니다. 절대로 클라이언트에게 전체 목록을 보내면 쓸모가 없으며이 솔루션은 확장되지 않습니다. –

+0

나는 이것을 위해 JSON + PHP를 사용해야한다고 생각한다. 이것은 약간의 요청을하고 데이터를 가져옵니다. –

+0

이전에 약 81,000 개의 요소가있는 자바 스크립트 배열을 사용했습니다. 문제는 'array.length'처럼 length 속성에 액세스하려고했을 때 문제가 발생한다는 것입니다. – starbeamrainbowlabs

답변

1

하나만로드하는 목록으로 자동 완성 하시겠습니까? JavaScript 파일에 저장하고 클라이언트가 목록을 한 번만로드 할 수 있도록 적절한 캐시 헤더를 설정하십시오.

쿠키로 설정하지 마십시오. 단지 말도 안됩니다.

+0

예, 목록을 한 번로드해야합니다 (실제로는 3-4 개월마다). ** 적절한 캐시 헤더에 대한 정보가있는 리소스로 나를 안내 할 수 있습니까? ***, 제발? 다음에 대해 이야기하고 있습니까? 캐시 제어 : max-age = 3600, 다시 유효성 검사 만료 : 1998 년 10 월 30 일 금요일 14:19:41 GMT' 그리고 내가 캐시 할 때마다 캐시 된 버전이 삭제되도록하려면 어떻게해야합니까? 서버의 최신 버전 (3-4 개월마다)? – demechanico

+0

서버 설명서 ([Apache 2 설명서] (https://httpd.apache.org/docs/2.2/caching.html))를 찾으십시오. 이 주제에 관한 많은 문서는 google이나 StackOverflow에서 찾을 수 있습니다. 파일의 캐시 수명을 무제한으로 지정하고 업데이트 할 때 경로를 변경하십시오. list-rev1.js와 마찬가지로 list-rev2.js 등 ... –

+0

아, 또한 클라이언트가 지원할 때 gzip으로 바꿉니다. 텍스트가 포함 된 파일이기 때문에 대역폭을 많이 절약하고 페이지로드 속도를 높일 수 있습니다. –

0

자동 완성 필드에 데이터베이스를 사용하는 것은 실제로 고전적인 해결책입니다. PHP/mysql/jquery 자동 완성 튜토리얼을 찾는 데 어려움이 없을 것이라고 생각합니다.

아주 잘 작동합니다.

클라이언트에게 전체 목록을 보내지 마십시오. 쓸모가 없으며 가치가 커지면이 솔루션은 확장되지 않습니다.

+0

데이터베이스로도이 트릭을 할 수 있습니다. 최선의 선택인지는 확실하지 않았습니다. 또한 나는 클라이언트에 10 가지 이상의 요소를 보내지 않지만 그 점을 지적 해 주셔서 감사합니다. – demechanico

+0

분명히 최선의 선택이며 특히 PHP를 사용할 때 가장 많이 사용됩니다. –

+0

데이터베이스의 크기에 따라 다릅니다. 280kB (gzip을 사용하여 3 또는 4로 나누기)에 맞으면 전체 목록을 사용자에게 전송하여 CPU 사용량을 절약 할 수 있습니다. 그리고 즉시 자동 완성되므로 더 나은 UX입니다. Voyages-sncf.com (프랑스 철도 예약 시스템, 1 천 1 백만명의 방문객/월)이이를 사용하여 기차역을 자동 완성합니다. –

1

나는

... 당신이 페이지 로딩 시간 + 배열이 수시로 변경되는 경우에 대해 우려하는 경우 서버 측의 응답을 Ajax를 통해 서버에 & 대기를 입력을 보내기 실제로 가장 좋습니다 믿어

다른 한편으로는 배열을 서버의 JSON 형식으로 저장할 수 있습니다. & JavaScript 내부에서 Ajax를 통해 발행하면 나중에 사용자가 배열을 다운로드해야합니다. & 나중에 브라우저 캐시를 사용하여 속도를 높일 수 있습니다. 그것.

예 :

$.get("array.txt",function(array){ 

    var myArray = eval(array); 
    //Now DO WHat YOu WAnt with the Array now Housed in the variable 'myArray' 

}); 

이것은 예제 일 뿐이며 jQuery를 사용하는 것은 아닙니다.

참고 : -

당신은이 사이트를 처음에게 사용자가 방문을로드하는 버퍼의 어떤 종류를 사용자가 기다려야 그래서 메커니즘을 추가하는 두 번째 방법 ... 최선을 사용하는 경우 그들의 현재 세션에서. 이것은 사용자가 첫 번째 시도에서 예상 한 것을 얻는 것일 수도 있고 그렇지 않을 수도 있습니다. 배열로 무엇을하고 싶은지간에 무엇이든지간에 & 결국 떠날 것입니다.

PHP를 사용하는 경우 올바른 캐시 헤더를 설정해야합니다. 일반적으로 사용자가 &을 변경하지 않고 업로드 한 txt 파일은 자동으로 대부분의 최신 브라우저에서 캐시로 전송되는 이됩니다.

+0

배열이 많이 변경되지 않습니다. 3-4 개월에 한 번만 변경됩니다. 또한 JSON 형식으로 정보를 보내는 jquery를 이미 사용하고 있습니다. 실제 쿼리 (요청과 응답 모두)가 작기 때문에 서버 배열을 반복해서 처리하지 않으려 고합니다. 캐싱에 대한 문제는 사용자가있을 때 새로운 목록을 사용자에게 보낼 수 있기를 원합니다. 타이밍 문제에 의존하지 않고이를 점검 할 수있는 방법이 있습니까? – demechanico