2012-09-14 6 views
0

jQuery UI 자동 완성 기능을 구현했으며 현저한 성능 문제가 있습니다.jQuery 자동 완성 성능

처음에는 입력 한 각 문자에 대해 새 쿼리를 보냈지 만 최소 3 개를 입력해야합니다.

데이터베이스가 인덱싱되고 50KB의 데이터 행 (5 개 열)이 있습니다. DB 수준에서는 성능 문제가 없습니다.

내가 시도하기로 결정한 기술 중 하나는 JSON을 캐싱하고 자동 완성을 데이터베이스와 비교하는 것이 었습니다. 이것은 완벽한 작업을 ... 최대 2000 행 정도. 그 너머, 그것은 천천히 그리고 완고해진다.

누구든지 기술에 대한 권장 사항이 있으면 감사하게 생각합니다.

다음은 Javascript에 대한 아이디어를 제공하는 코드입니다.

// First, setup some data to iterate over. 
// My thought is to query the DB once, and build this list in memory to avoid autocomplete hitting the database each keystroke.   

var data = []; 
    data.push({value: "Person 1", label: "Person 1"}); 
    data.push({value: "Person 2", label: "Person 2"}); 

$("#searchBox").autocomplete({ 
    source: data; 
    minChars: 3; 
    delay: 0; 
}); 
+0

Upfront suggestions : 약간의 지연 시간이 있음 –

+0

정확히 무엇이 해결 되나요? –

+0

@JasonWells 사용자는 실제로 데이터를 요청하기 전에 더 많은 문자를 입력 했으므로 더 작은 결과 집합, 더 빠른 성능을 의미합니다. –

답변

2

50k rows !!!! 네트워크는 거의 확실하게 병목 현상입니다. TOP 또는 LIMIT 사용 (사용중인 DB를 모르는 경우) 확실하게 사용자는 50,000 개의 결과를 스캔하지 않으므로 입력을 계속하면서 처음 10 개를 다시 가져옵니다. 내가 질문을 오해

편집

아, 테이블은 50K 행이 50,000 행 찰흙을 반환하고하지 않는 것이있다! 하지만 2k 행 캐싱에 대해 언급하면 ​​... 결과가 TOP로 제한되고 속도가 너무 느려질 때까지 길을 찾으십시오.

+0

SQL Server 2008을 사용하고 있습니다. 결과 집합을 메모리에 캐싱하도록 제안합니다. 자동 완성을 거의 순간적으로 수행합니다. 2000 년 결과 세트를 아름답게 작동합니다. –

+1

나는 여전히 귀하의 제안이 유효하다고 생각합니다. 상위 10 ~ 20 명이해야합니다. 그렇지 않다면 사용자는 계속 검색 할 것입니다. –

+0

내가 따라하기에 확실하지 않습니다. 정확히 솔루션에 캐싱이 무엇입니까?위의 코멘트에서 DB를 한 번 쿼리하고 JSON에서 결과 세트를 캐시 한 다음 JSON (훨씬 빨라짐)으로 자동 완성을 가리 키지 만 2000 년에 껍질을 벗기 시작합니다. 요점은 DB를 치는 것을 피하기위한 것입니다. 모두 함께. –

0

서버 측에서 DB를 사용하지 않지만, 플랫 파일에 저장된 모든 인덱스와 "응답 창"만 보내는 클라이언트에 전달됩니다.

당신은 내 솔루션을 사용할 수 있습니다, 데모 여기 참조 : 는 http://olegh.ftp.sh/autocomplete.html

이 매우 빠르게 작동,는 큰 사전을 처리합니다 10M + 기록 확인을 클릭합니다.

OS와 같은 유닉스에서 FastCGI 모듈을 사용하는 Apache 웹 서버에서 작동합니다. 내 데모는 Celeron-300 DeskPro의 이전 컴퓨터에서 작동하며이 하드웨어는 으로 볼 수 있습니다.

서버 부분은 C++, 클라이언트 : JavaScript + Ajax로 작성되었습니다.

요청시 소스 코드는 무료입니다.