Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

indexedDB #153

Open
magicdawn opened this issue Mar 10, 2023 · 2 comments
Open

indexedDB #153

magicdawn opened this issue Mar 10, 2023 · 2 comments

Comments

@magicdawn
Copy link
Owner

No description provided.

@magicdawn
Copy link
Owner Author

magicdawn commented Mar 10, 2023

course

open database

const openRequest = indexedDB.open('db-name', 1)

openRequest.onupgradeneeded = function(e){
  // e.oldVersion 现有版本
  // indexedDB.open 里传的是期望版本
  // 在 upgradeneeded 里进行结构改造
}

openRequest.onsuccess = function() {
  const db = openRequest.result
}

openRequest.onerror = function() {
  // process error
}

object stores

就是 Table / Collection

  • db.createObjectStore(name, options)
  • db.deleteObjectStore(name)

必须在 onupgradeneeded listener 里操作

objectStore action

  • open db
  • tx = db.transcation(object-store-name, mode)
  • objectStore = tx.objectStore(object-store-name)

需要通过 db.transcation(name, mode).objectStore(name) 拿到 objectStore reference


CURD

  • C: objectStore.put(value, [key]) 如果已存在, 替换已存在
  • U: objectStore.add(value, [key]) 如果已存在, 操作失败
  • R: objectStore.get(key)
  • D: objectStore.delete(key) / objectStore.clear()

query

1.使用 key 进行 get / delete

  • objectStore.get(key)
  • objectStore.getAll()
  • objectStore.getAll(range: IDBKeyRange)
  • objectStore.getAllKeys(range: IDBKeyRange)
  • objectStore.count(key or range)

使用 IDBKeyRange.bound / lowerBound / upperBound 创建区间

2.使用其他字段进行查询

需要手动创建索引

objectStore.createIndex(indexName, keyPath, options)

使用索引

objectStore.index(indexName).get / getAll

使用索引删除

// 根据索引字段查询 key
const key = objectStore.index(indexName).getKey(valOfIndexField) 
// 根据 key 删除 object
objectStore.delete(key)

@magicdawn
Copy link
Owner Author

magicdawn commented Mar 10, 2023

上层库

level 有点复杂
https://github.com/Level/awesome

  • level-js 是一个使用 indexedDB 实现 abstract-leveldownlevelup adapter, 已经 deprecated
  • browser-levellevel-js 的继任者
  • levelclassic-level + browser-level 的 wrapper

browser-level / level 等都是包名


  • localForage 功能太简单了, 范围查询不支持, keys() 只能获取全部 key
  • browser-level 受限于整个 level 生态

重度使用需要 indexedDB wrapper

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant