2012-08-28 2 views
0

iOS 및 Android에서 실행되는 HTML5 모바일 앱이 있습니다. 사용자는 일반적으로 약간의 테이블에 저장된 약간의 로컬 데이터를 갖습니다. 평균 세 개의 레코드가있는 다섯 개의 테이블을 예로 들어 보겠습니다.성능을 향상시키기 위해 websql 데이터베이스를 열어 둘 수 있습니까?

websql의 성능이 매우 나쁩니다. this post에서 지연의 대부분은 각 트랜잭션에 대한 데이터베이스를 열고 닫는 데 유용하다고 읽었습니다. 내 사용자는 일반적으로 한 번에 하나의 트랜잭션 만 수행하므로 각 작업에 대해 데이터베이스를 열고 닫는 데 필요한 시간은 일반적으로 필요한 총 시간 중 비교적 큰 부분 일 것입니다.

일단 데이터베이스를 열 수 있다면 모든 트랜잭션 래퍼를 제거하고 SQL을 바로 실행하면 될까요?

테이블은 사용자가 데이터를 업데이트하는 것보다 다른 사람이나 프로세스에서 사용되지 않으며, 앱이 업데이트 후 데이터를 읽고 계산 및 통계를 위해 서버로 데이터를 전송하는 앱입니다.

위의 전략을 따르고 데이터베이스가 닫히지 않지만 사용자 또는 운영 체제가 앱을 닫으면 (올바르게 말하면 webview) 변경된 데이터가 유지되거나 손실됩니까?

+0

경험상 WebSQL 성능이 그렇게 나쁘지는 않습니다. 단일 트랜잭션 내에서 수천 개의 레코드를 삽입하는 데 1 초도 걸리지 않습니다. 3 개의 레코드가있는 5 개의 테이블은 실제로 케이크 조각이어야합니다 ... JS 클라이언트는 시작시 db를 열고 닫지 않으며 트랜잭션 커밋 후에 데이터를 잃어 버리지 않습니다. – DCoder

답변

0

좋아요, 문제가 발견되었습니다. persistenceJS 프레임 워크를 사용하여 로컬 데이터베이스를 처리합니다. 이것은 js 객체에 저장된 websql 데이터의 복사본을 유지하고 데이터베이스와 js 객체를 동기화 상태로 유지합니다. 그것은 시간이 걸리는 프로세스이며, 모든 것을 동기화 후 나오는 "flush"핸들러에 넣었습니다.

0

나는 또한 연결을 유지합니다. IndexedDB의 경우, 문제를 관찰하지 않고 UI와 백그라운드 스레드를 동시에 열어 둘 수있었습니다. 나는 WebSQL이 동일 할 것이라고 믿는다. 그냥 JS 파일을 사용하는 경우, 내 자신을 javascript library 시도 할 수, 그것은 매우 얇은 래퍼입니다 IndexedDB 및 WebSQL. 그러나이 라이브러리는 IndexedDb 스타일로 작성되었습니다.

관련 문제