Dexie.js
Dexie.js là một thư viện bọc cho indexedDB – cơ sở dữ liệu tiêu chuẩn trong trình duyệt. https://dexie.org
Tại sao?
Dexie giải quyết ba vấn đề chính với API IndexedDB gốc:
. Xử lý lỗi mập mờ
. Truy vấn kém chất lượng
. Tính phức tạp của mã
Dexie cung cấp một API cơ sở dữ liệu ngăn nắp với thiết kế API đã được suy nghĩ kỹ càng, xử lý lỗi mạnh mẽ, khả năng mở rộng, nhận thức về theo dõi thay đổi và hỗ trợ KeyRange mở rộng (tìm kiếm không phân biệt chữ hoa/chữ thường, kết hợp kết quả và hoạt động OR).
Xin chào Thế giới
<!doctype html>
<html>
<head>
<script src="https://unpkg.com/dexie@latest/dist/dexie.js"></script>
<script>
//
// Declare Database
//
var db = new Dexie("FriendDatabase");
db.version(1).stores({
friends: "++id,name,age"
});
//
// Manipulate and Query Database
//
db.friends.add({name: "Josephine", age: 21}).then(function() {
return db.friends.where("age").below(25).toArray();
}).then(function (youngFriends) {
alert ("My young friends: " + JSON.stringify(youngFriends));
}).catch(function (e) {
alert ("Error: " + (e.stack || e));
});
</script>
</head>
</html>
Vâng, nó thật đơn giản như vậy.
Một phiên bản hiện đại tương đương (hoạt động trên tất cả các trình duyệt hiện đại):
<!doctype html>
<html>
<head>
<script type="module">
import Dexie from "https://unpkg.com/dexie@latest/dist/modern/dexie.mjs";
//
// Declare Database
//
const db = new Dexie("FriendDatabase");
db.version(1).stores({
friends: "++id,name,age"
});
//
// Manipulate and Query Database
//
try {
await db.friends.add({name: "Josephine", age: 21});
const youngFriends = await db.friends.where("age").below(25).toArray();
alert (`My young friends: ${JSON.stringify(youngFriends)}`);
} catch (e) {
alert (`Error: ${e}`);
}
</script>
</head>
</html>
Hiệu suất
Dexie có hiệu suất tuyệt vời. bulk methods của nó tận dụng tính năng ít được biết đến trong IndexedDB cho phép lưu trữ mà không cần lắng nghe mọi sự kiện onsuccess. Điều này làm tăng tốc độ hiệu suất lên tối đa.
Các hoạt động được hỗ trợ
above(key): Collection;
aboveOrEqual(key): Collection;
add(item, key?): Promise;
and(filter: (x) => boolean): Collection;
anyOf(keys[]): Collection;
anyOfIgnoreCase(keys: string[]): Collection;
below(key): Collection;
belowOrEqual(key): Collection;
between(lower, upper, includeLower?, includeUpper?): Collection;
bulkAdd(items: Array): Promise;
bulkDelete(keys: Array): Promise;
bulkPut(items: Array): Promise;
clear(): Promise;
count(): Promise;
delete(key): Promise;
distinct(): Collection;
each(callback: (obj) => any): Promise;
eachKey(callback: (key) => any): Promise;
eachPrimaryKey(callback: (key) => any): Promise;
eachUniqueKey(callback: (key) => any): Promise;
equals(key): Collection;
equalsIgnoreCase(key): Collection;
filter(fn: (obj) => boolean): Collection;
first(): Promise;
get(key): Promise;
inAnyRange(ranges): Collection;
keys(): Promise;
last(): Promise;
limit(n: number): Collection;
modify(changeCallback: (obj: T, ctx:{value: T}) => void): Promise;
modify(changes: { [keyPath: string]: any } ): Promise;
noneOf(keys: Array): Collection;
notEqual(key): Collection;
offset(n: number): Collection;
or(indexOrPrimayKey: string): WhereClause;
orderBy(index: string): Collection;
primaryKeys(): Promise;
put(item: T, key?: Key): Promise;
reverse(): Collection;
sortBy(keyPath: string): Promise;
startsWith(key: string): Collection;
startsWithAnyOf(prefixes: string[]): Collection;
startsWithAnyOfIgnoreCase(prefixes: string[]): Collection;
startsWithIgnoreCase(key: string): Collection;
toArray(): Promise;
toCollection(): Collection;
uniqueKeys(): Promise;
until(filter: (value) => boolean, includeStopEntry?: boolean): Collection;
update(key: Key, changes: { [keyPath: string]: any }): Promise;
Đây là sự kết hợp của các phương thức từ WhereClause, Table và Collection. Điều tra vào API reference để xem chi tiết.
Xin chào Thế giới (Typescript)
import Dexie, { Table } from 'dexie';
interface Friend {
id?: number;
name?: string;
age?: number;
}
//
// Declare Database
//
class FriendDatabase extends Dexie {
public friends!: Table<Friend, number>; // id is number in this case
public constructor() {
super("FriendDatabase");
this.version(1).stores({
friends: "++id,name,age"
});
}
}
const db = new FriendDatabase();
db.transaction('rw', db.friends, async() => {
// Make sure we have something in DB:
if ((await db.friends.where({name: 'Josephine'}).count()) === 0) {
const id = await db.friends.add({name: "Josephine", age: 21});
alert (`Addded friend with id ${id}`);
}
// Query:
const youngFriends = await db.friends.where("age").below(25).toArray();
// Show result:
alert ("My young friends: " + JSON.stringify(youngFriends));
}).catch(e => {
alert(e.stack || e);
});
Mẫu
https://dexie.org/docs/Samples
https://github.com/dexie/Dexie.js/tree/master/samples
Kiến thức cơ bản
https://dexie.org/docs/Questions-and-Answers
Trang web
Cài đặt qua npm
npm install dexie
Tải về
Đối với những người không thích trình quản lý gói, đây là các liên kết tải về:
Phiên bản cũ:
https://unpkg.com/dexie@latest/dist/dexie.min.js
https://unpkg.com/dexie@latest/dist/dexie.min.js.map
Phiên bản hiện đại:
https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs
https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs.map
Typings:
https://unpkg.com/dexie@latest/dist/dexie.d.ts
Đóng góp
Xem CONTRIBUTING.md
Xây dựng
pnpm install
pnpm run build
Kiểm tra
pnpm test
Theo dõi
pnpm run watch
Chi tiết Tải về:
Tác giả: Dexie
Mã nguồn: https://github.com/dexie/Dexie.js
Giấy phép: Apache-2.0 license