mirror of https://github.com/vuejs/vitepress
perf: reduce duplicate rendering in localSearch (#3170)
Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com>pull/3187/head
parent
37e4ab9ec2
commit
878f4378cd
@ -0,0 +1,33 @@
|
|||||||
|
// adapted from https://stackoverflow.com/a/46432113/11613622
|
||||||
|
|
||||||
|
export class LRUCache<K, V> {
|
||||||
|
private max: number
|
||||||
|
private cache: Map<K, V>
|
||||||
|
|
||||||
|
constructor(max: number = 10) {
|
||||||
|
this.max = max
|
||||||
|
this.cache = new Map<K, V>()
|
||||||
|
}
|
||||||
|
|
||||||
|
get(key: K): V | undefined {
|
||||||
|
let item = this.cache.get(key)
|
||||||
|
if (item !== undefined) {
|
||||||
|
// refresh key
|
||||||
|
this.cache.delete(key)
|
||||||
|
this.cache.set(key, item)
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
||||||
|
set(key: K, val: V): void {
|
||||||
|
// refresh key
|
||||||
|
if (this.cache.has(key)) this.cache.delete(key)
|
||||||
|
// evict oldest
|
||||||
|
else if (this.cache.size === this.max) this.cache.delete(this.first()!)
|
||||||
|
this.cache.set(key, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
first(): K | undefined {
|
||||||
|
return this.cache.keys().next().value
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue