对一个 App 来说,为了达到某些目的,将相关资料存在用户端是相对方便的,举例来说
通常用户端的储存和服务器端的储存会是一起搭配使用的,举例来说当我们使用影音串流功能时,会从服务器端下载相关资料到用户端使用,在过程中 App 也能够将资料快取起来以便下次使用。
不过在实务上,浏览器用户端的储存目前有各式解决方案,也都有着各自的限制存在,如果是有大小限制的储存,就必须注意定时和服务器端同步去避免资料遗失。
目前常见的用户端储存机制如下:
一般来说储存空间的上限如下:
在 Chrome、Firefox、Edge 等浏览器中可以使用以下的程序码去估计剩余空间:
https://caniuse.com/mdn-api_storagemanager
if (navigator.storage && navigator.storage.estimate) {
const quota = await navigator.storage.estimate();
// quota.usage -> 用了多少 bytes
// quota.quota -> 还剩多少 bytes 可使用
const percentageUsed = (quota.usage / quota.quota) * 100;
console.log(`${percentageUsed}% 已使用`);
const remaining = quota.quota - quota.usage;
console.log(`还可以写入 ${remaining} bytes`);
}
const transaction = idb.transaction(["entries"], "readwrite");
transaction.onabort = function (event) {
const error = event.target.error; // DOMException
if (error.name == "QuotaExceededError") {
// 错误处理
}
};
try {
const cache = await caches.open("my-cache");
await cache.add(new Request("/test.jpg"));
} catch (err) {
if (error.name === "QuotaExceededError") {
// 错误处理
}
}
资料在储存上会分成两种类别
当硬碟空间即将用完时,浏览器会依据 LRU policy (least recently used) 的规则透过去清除快取档案。
为了避免资料被储存淘汰机制处理掉,我们能够通过程序码去确认、启用 Persistent Storage。
// 确认目前储存空间是否套用 Persistent
if (navigator.storage && navigator.storage.persist) {
const isPersisted = await navigator.storage.persisted();
console.log(`Persisted storage granted: ${isPersisted}`);
}
// 针对这个站台启用 Persistent Storage
if (navigator.storage && navigator.storage.persist) {
const isPersisted = await navigator.storage.persist();
console.log(`Persisted storage granted: ${isPersisted}`);
}
启用过後底下的储存皆会受到保护,但要注意启用後目前尚没有透过程序停用的方式。
今天的内容为该如何简单制作出一个自动攻击的敌人 ...
元件介绍 Carousel 是一个像旋转木马一样会轮流转的轮播元件。在一个内容空间有限的可视范围中进...
在向量中求各个方向的梯度下降: Gradients and Directional Derivati...
● 这章来示范如何取得选择权(Options)的ticks 回顾上一章,我们学会如何取得特定时段的期...
LED 显示温湿度 ( DHT11 ) 教学原文参考:LED 显示温湿度 ( DHT11 ) 这篇文...