2012-05-16 2 views
3

PHP, Javascript/jQuery/Ajax, JSON 및 localstorage를 사용하여 회사의 guestlist 응용 프로그램을 작성하고 있습니다. 스마트 폰에서 주로 사용됩니다. 주로 Iphone 4입니다. 애플리케이션의 검색 부분이 오프라인 모드에서 작동해야하기 때문에 localstorage를 캐시로 사용하고 있습니다.저속 검색 알고리즘 최적화 - 자바 스크립트, JSON 및 로컬 저장소

guestlist를 검색하는 동안 성능 문제가 있습니다.

응용의 흐름이

1은 JSON과 PHP 인코딩하여 서버에서 모든 손님을 검색하고 JS를 통해 다시 보내 (I 600 명을 포함 guestlist 함께 일하고 있어요이 examaple에 대한) 다음과 같습니다 AJAX. 이것은 잘 작동합니다.

var parsedMysqlData = JSON.parse(phpData); 

우리 같이보고 (600) 오브젝트 함유 JSON.Array 준다 :

Object: { 
Id: Int 
EventId: int 
guestInfo: string 
guestlist: string 
guestName: string 
reference: string 
total: int 
used: int 
} 

2 JSON.Parse를 사용 PHP에서 responseText를 (phpData 불림) 파싱 3. JSON.Array를 JSON.Stringify를 사용하여 사용자의 localstorage에 저장합니다.

localStorage.setItem(0, JSON.stringify(parsedMysqlData)); 

4. 사용자가 우리 자신의 검색 문자열은 다음과 같이 로컬 스토리지에 JSON.parse를 사용하여 우리의 guestlist를 검색 할 수 검색을 시작 :

var currentGuestlist = JSON.parse(localStorage.getItem(0)); 

을 그리고 다음이가 루프 시도하여 우리의 객체를 반복

for (i=0; i<currentGuestlist.length; i++) { 
// match 'currentGuestList[i]['name']' with what the user typed in search form 
} 


: 우리의 손님으로 배열 currentGuestlist를 자신의 검색 문자열과 일치하는3210 어떤 이유로 iPhone 4에서 정말 오랜 시간이 걸립니다. 600 개의 개체를 검색하면 약 4 초 동안 아이폰이 정지되어 경기를 반환합니다.

localStorage에 JSON 객체를 포함하는 배열을 저장하고 JSON으로 구문 분석하기 전에 간단히 localStorage에 정렬되지 않은 문자열을 저장하고 훨씬 빠르게 작업합니다. JSON 개체는 localStorage에 저장되는 데이터에 대한 광고 구조를 중요하게 사용합니다. 속도 문제는 JSON 객체를 사용하고 있다는 사실과 관련이 있습니다. 이전과 같이 우수한 속도 성능을 유지하면서 체계적인 방식으로 localStorage를 어떻게 구성 할 수 있습니까?

마지막으로이 앱을 가능한 빨리 만들 때 사용할 기술에 대한 조언이나 조언을 제공해 주시면 대단히 감사하겠습니다.

답변

2

로컬 저장소에서 각 검색마다 목록을 가져오고 있습니까? 그렇게하지 말고 필요에 따라 (변경할 때마다) 로컬 저장소에 저장하고 항상 데이터 구조로 유지하십시오.

JavaScript에서 모든 것이 이미 객체이기 때문에 일반 문자열 대신 단순히 객체를 사용하면 속도가 느려질 수 없으므로 상수 요소로만 속도가 느려집니다.

또한 자동 완성 동작과 관련하여 검색 속도를 낮추고 사용자가 "Ma"상자에 입력하면 목록이 필터링되고 사용자가 " tt "를"Matt "로 설정하면 이전에 필터링 된 항목 만 고려해야합니다. ...

+0

멋진 대답하지만이 나던 내 속도 문제를 해결하기 위해 보인다. 1. guestlist를 반복하기 전에 localStorage에서 가져옵니다. 이것은 루프 전에 수행됩니다. (4 단계 : 변수 CurrentGuestlist 참조). 내 게스트리스트를 데이터 구조로 유지한다는 것은 무엇을 의미합니까? 2. 지금 당장은 속도가 빠르며 유동적 인 코드와 느린 코드 사이의 유일한 차이점을 느낍니다.이 코드는 배열에 배치 된 문자열 대신 JSON obj를 사용하고 있다는 사실입니다. 하지만 JSON 객체로 인해 느려지는 것을 100 % 확신 할 수 있습니까? 내 검색은 이러한 객체를 포함하는 배열을 통해 진행됩니다. 3. 훌륭한 조언, thx! – nalas

+0

제 말은 대부분 JSON.parse를 호출하지 말고 대신 결과를 저장하고 사용하는 것입니다. JSON.parse (및 localStorage.getItem())이 필요한 유일한 시간은 프로그램이 처음 시작될 때입니다. –

+0

방금 ​​돌아가서 검색 속도가 느려지는 것을 알려주고 싶습니다. 저장된 손님을 액세스하는 동안 LocalStorage에서 키를 사용하지 않았습니다. 그것은 매우 빠르고 유동적 인 검색과 느린 검색의 차이입니다. 여기서 우리가 배운 것은 for 루프를 사용하여 동일한 데이터를 반복하는 것보다 Key를 통해 로컬 저장소 객체에 액세스하는 것이 더 빠릅니다. 그것의 빠른 방법 ... – nalas

0

아마도 로컬 저장 장치에 JSON 개체를 저장하는 대신 WebSQL 데이터베이스를 사용하는 것이 더 적합 할 것입니다. WebSQL은 이제 더 이상 사용되지 않지만 webkit-browser에서 꽤 잘 지원됩니다. 나는 두 가지 프로젝트를 통해 좋은 결과를 얻었습니다.

당신은 여기에 대한 자세한 내용을보실 수 있습니다 : http://html5doctor.com/introducing-web-sql-databases/