cloudflare worker: cache holds promises instead of buffers

This commit is contained in:
Brandon Liu
2022-07-20 13:07:02 +08:00
parent dc85fc60c2
commit e0402ded7f

View File

@@ -7,7 +7,7 @@ interface Env {
interface CacheEntry { interface CacheEntry {
lastUsed: number; lastUsed: number;
buffer: DataView; buffer: Promise<ArrayBuffer>;
} }
export class LRUCache { export class LRUCache {
@@ -29,18 +29,17 @@ export class LRUCache {
let val = this.entries.get(cacheKey); let val = this.entries.get(cacheKey);
if (val) { if (val) {
val.lastUsed = this.counter++; val.lastUsed = this.counter++;
return [true, val.buffer]; return [true, new DataView(await val.buffer)];
} }
let resp = await bucket.get(key, { let resp = await bucket.get(key, {
range: { offset: offset, length: length }, range: { offset: offset, length: length },
}); });
let a = await (resp as R2ObjectBody).arrayBuffer(); let a = (resp as R2ObjectBody).arrayBuffer();
let d = new DataView(a);
this.entries.set(cacheKey, { this.entries.set(cacheKey, {
lastUsed: this.counter++, lastUsed: this.counter++,
buffer: d, buffer: a,
}); });
if (this.entries.size > 128) { if (this.entries.size > 128) {
let minUsed = Infinity; let minUsed = Infinity;
@@ -54,7 +53,7 @@ export class LRUCache {
if (minKey) this.entries.delete(minKey); if (minKey) this.entries.delete(minKey);
} }
return [false, d]; return [false, new DataView(await a)];
} }
} }