2009-08-05 2 views
1

저는 여기 새로 왔으니 제발 쉽게가주십시오. 이것은 다소 혼란스러운 상황입니다. :)사용자로부터 몇 초 동안 사용하지 않으면 ajax 코드가 실행됩니다.

사용자가 검색 텍스트 상자에 다른 사용자 (또는 이름의 일부) 이름을 입력 한 다음 해당 검색 문자열과 일치하는 사용자 목록이 반환되는 검색 입력 작업을하고 있습니다. 문제는 수만 명의 사용자가 관련되어있을 때 조금 느리다는 것입니다. 이 속도 저하로 인해 사용자가 검색 입력에 이름을 빠르게 입력하면 각 키 스트로크 (사용자가 이미 검색 문자열을 입력 한 후)에 검색 결과가 깜박이기 시작합니다. 그것은 심하게 지연된 반응과 같습니다.

예를 들어 'Wendy'라는 이름을 입력하면 검색 문자열 'W'(입력 한 첫 번째 문자)에 대한 검색 결과가 아직 표시되지 않습니다. 이미 'Wendy'에 대한 검색 결과를보고 싶지만 'W'라는 글자의 검색 결과가 표시되고 'We'등의 검색 결과가 표시됩니다.

내가 원하는 것은 사용자가 특정 시간 동안 아무 것도 입력하지 않았을 때만 검색을 수행하는 것입니다 (2 초를 생각하고 있습니다). 그렇지 않으면 'Searching'이라는 단어가 표시됩니다. Javascript 메서드의 코드는 아래와 같습니다. 메모와 마찬가지로, 해당 코드는 현재 사용자를 검색하기 위해 작동하지만 지연된 실행을 구현하기 만하면됩니다.

function updateSearchResults() { 
    if($F('searchString').length > 0){ 
     Element.update($('searchResultsScrollBox'), '<h3>Searching...</h3>'); 
     $('searching').style.display = 'block'; 
     var url = '<c:url value='ajaxFrontGetUsers.html'/>'; 
     var ajax = new Ajax.Updater({success: 'searchResults'}, url, 
     {method: 'post', parameters: $('searchForm').serialize(true)}); 
     $('searching').style.display = 'none'; 
    } 
} 

나는 이것이 모두 의미가 있기를 바랍니다. 도움을 줄 수있는 사람을 미리 감사드립니다.

답변

2

다음 단계를 시도해보십시오

  1. 모든 몇 밀리 초, 텍스트 상자는 새로운 데이터가 있는지 확인합니다.
  2. 텍스트 상자에 새 텍스트가있는 경우 Ajax를 실행하고 텍스트를 변수에 복사하십시오 (1 단계의 비교 참조).

성능을 향상 시키려면 사용자가 무언가를 입력 할 때마다 타이머를 활성화하고 Ajax 호출이 발생하면 타이머를 비활성화하십시오.

0

안녕하세요, 답변 해 주셔서 감사합니다. JavaScript 함수가 500 밀리 초 기간 내에 검색 문자열에 새 문자가 입력되었는지 계속 확인하는 500 밀리 초 간격을 설정했습니다. 검색 함수가 있으면 사용자가 입력 한 문자열을 검색하기 위해 검색 함수가 호출됩니다. 그렇지 않으면 사용자가 타이핑을 멈출 때까지 또 500 밀리 초를 기다릴 것입니다. 결국, 그것은 당신이 제안한 것과 매우 유사합니다. 다시 한번 감사드립니다!

0

또는 "onkeypress"이벤트 처리기를 일부 전역 변수를 지우거나 타이머를 취소하여 AJAX 이벤트가 실행되지 않도록 할 수 있습니다. 나는 Prototype이 in-place editor와 "frequency"옵션을 통해 이것을 구현한다는 것을 알고있다. (나는 모든 키를 누른 후에 취소하는 타임 아웃 타이머를 설정한다고 생각한다.)

0

나는 이것이 오래된 질문이지만, 다른 사람들은 이것을 보았을 때 나는 잘못된 방향으로 가고 있다고 생각한다. 나는 당신이 날짜/시간 스탬프 각 아약스 호출해야한다고 생각하고 자바 스크립트에서 데이터 타임 스탬프를 추적하십시오. 그런 다음 ajax 호출이 반환되면 날짜/시간 스탬프를 확인하고 가장 재전송 된 Ajax 호출에 대한 결과 집합인지 확인할 수 있습니다. 이렇게하면 각 키 입력에 대해 즉시 ajax 호출을 수행하지만 ajax 결과가 입력을 따라 잡으면 결과 만 표시합니다.

또한 일치하는 결과를 모두 보냈습니까? 편지 W 만해도 천천히 좋아하니?자바 스크립트 쪽의 속도를 높이려면 데이터베이스에서 결과의 순위를 매겨 상위 10-20 만 반환해야합니다. 어쨌든 10-20 개 이상의 결과를보고 싶지 않습니다.

또한 SQL 쿼리가 최적입니까? 검색어가 너무 오래 걸리는 것 같습니다. 검색과 같은 양면 검색 (예 : like input+'%')이 아닌 양면 검색 (예 : like '%' + input + '%')을 사용하면 테이블에 실제로 색인을 추가하여 도움을받을 수 있습니다.

관련 문제