IndexedDB란 무엇인가요?
IndexedDB는 브라우저에 대량의 구조화된 데이터를 저장하고 색인을 사용하여 이 데이터를 고성능으로 검색하기 위한 진화하는 웹 표준입니다. 즉, IndexedDB는 객체 저장소입니다. 컬렉션 행과 열이 있는 테이블이 있는 관계형 데이터베이스와는 다릅니다. 이는 애플리케이션을 설계하고 빌드하는 방식에 영향을 미치는 중요하고 근본적인 차이입니다 (기본 개념 참고).
새로운 기능은 무엇인가요?
변경사항이 있습니다. 간단한 문법 변경으로 처리하지 않으면 오류가 발생합니다.
버전 17부터 IndexedDB 트랜잭션의 범위가 객체 저장소로 지정되지 않으면 Chrome에서 오류가 발생합니다. 모든 데이터 읽기 및 쓰기는 트랜잭션 내에서 이루어지므로 데이터베이스에 트랜잭션을 만들고 범위 (예: 액세스할 객체 저장소)를 지정하고 액세스 유형 (읽기 전용 또는 쓰기)을 결정해야 합니다.
코드에서 어떤 의미인가요? database.transaction에 빈 배열을 전달하는 대신 다음을 실행합니다.
var transaction = db.transaction([], IDBTransaction.READ_ONLY);
특정 객체 저장소 또는 객체 저장소 목록으로 범위를 지정해야 합니다.
// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);
// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
IDBTransaction.READ_ONLY);
// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);
트랜잭션에서 올바른 범위와 모드를 사용하면 데이터 액세스 속도를 높일 수 있습니다. 다음은 몇 가지 도움말입니다.
범위를 정의할 때는 필요한 객체 저장소만 지정하세요. 이렇게 하면 중복되지 않는 범위로 여러 트랜잭션을 동시에 실행할 수 있습니다.
필요한 경우에만 READ_WRITE
트랜잭션 모드를 지정합니다. 중복되는 범위의 여러 READ_ONLY
트랜잭션을 동시에 실행할 수 있지만 객체 저장소에는 하나의 READ_WRITE
트랜잭션만 있을 수 있습니다.
기타 소스:
- chromium.org의 업데이트
- MDN의 IndexedDB에서 자세히 알아보기
- 간단한 할 일 목록 웹 앱에서 indexedDB를 사용하는 방법에 관한 전체 예
다음에 다시 뵐 때까지... 웹을 가까운 영역으로 계속 밀어 붙이세요.