2017-11-27 4 views
1

인덱스 쿼리를 처음 사용하는 데 시간이 오래 걸립니다.indexedDb objectStore.openCursor slow 느림

사용 시나리오 : 모바일 사용 웹보기.

데이터를 indexedDb에 저장 한 후 페이지 쿼리를 처음 열면 속도가 매우 느려집니다.

쿼리 코드 :

var startTime = new Date().getTime(); 
 
var request = indexedDB.open("yfg"); 
 
request.onerror = function(event) { 
 
\t alert("Why didn't you allow my web app to use IndexedDB?!"); 
 
}; 
 
request.onsuccess = function(event) { 
 
\t var table = []; 
 
\t var db = request.result; 
 
\t var objectStore = db.transaction("table").objectStore("table"); 
 

 
\t //objectStore.openCursor().onsuccess = function(event) { 
 
\t objectStore.openCursor(null,IDBCursor.NEXT).onsuccess = function(event) { 
 
\t \t var cursor = event.target.result; 
 
\t \t if (cursor) { 
 
\t \t \t table.push(cursor.value); 
 
\t \t \t cursor.continue(); 
 
\t \t }else { 
 
\t \t \t //alert("No more entries!"); 
 
\t \t \t console.log(table); 
 
\t \t \t var endTime = new Date().getTime(); 
 
\t \t \t console.log("总耗时:",(endTime-startTime)/1000); 
 
\t \t } 
 
\t }; 
 
};

콘솔에서 실행 :

첫 번째 결과 : enter image description here

두 번째 결과 : enter image description here

브라우저 버전 : enter image description here

데이터의 각 부분의 구체적인 내용은 : enter image description here

+0

얼마나 많은 데이터가 전송되고 있습니까? –

+0

테이블 시트 1200 개 이상 bar – fan

+0

bars? 측정 데이터의 새로운 단위입니까? 막대의 몇 바이트입니까? 신경 쓰지 말고, 질문을 올바르게 다시 읽고 IndexedDB를 사용하고 있다는 것을 깨닫게하십시오. –

답변

0

IDBObjectStore.prototype.getAll를 사용해보십시오 : enter image description here

이 테이블 시트는 이러한 데이터가 있습니다. getAll은 수행중인 것과 비슷한 배열을 생성하지만 openCursor보다 함수 호출 수가 적으므로 더 효율적입니다.

그러나 openCursor과 달리 getAll은 indexedDB의 새로운 기능이므로 지원되지 않을 수 있습니다. 링크 된 페이지에는 호환성 표가 표시되지만 이전 버전과 다를 수 있습니다.