Forráskód Böngészése

fix: auto-hit cache entries when reading

tophf 4 éve
szülő
commit
2dc17ffee8
2 módosított fájl, 9 hozzáadás és 16 törlés
  1. 1 3
      src/background/utils/tester.js
  2. 8 13
      src/common/cache.js

+ 1 - 3
src/background/utils/tester.js

@@ -37,9 +37,7 @@ let blCacheSize = 0;
 function testRules(url, rules, prefix, ruleBuilder) {
   return rules.some(rule => {
     const key = `${prefix}:${rule}`;
-    let matcher = cache.get(key);
-    if (matcher) cache.hit(key);
-    else cache.put(key, (matcher = ruleBuilder(rule)));
+    const matcher = cache.get(key) || cache.put(key, ruleBuilder(rule));
     return matcher.test(url);
   });
 }

+ 8 - 13
src/common/cache.js

@@ -23,8 +23,11 @@ export default function initCache({
     batchStarted = enable;
     batchStartTime = 0;
   }
-  function get(key, def) {
+  function get(key, def, shouldHit = true) {
     const item = cache[key];
+    if (item && shouldHit) {
+      reschedule(item, defaultLifetime);
+    }
     return item ? item.value : def;
   }
   function getValues() {
@@ -36,15 +39,7 @@ export default function initCache({
     return value;
   }
   function put(key, value, lifetime = defaultLifetime) {
-    if (value) {
-      cache[key] = {
-        value,
-        expiry: lifetime + getNow(),
-      };
-      reschedule(lifetime);
-    } else {
-      del(key);
-    }
+    reschedule(cache[key] = { value }, lifetime);
     return value;
   }
   function del(key) {
@@ -60,8 +55,7 @@ export default function initCache({
   function hit(key, lifetime = defaultLifetime) {
     const entry = cache[key];
     if (entry) {
-      entry.expiry = lifetime + getNow();
-      reschedule(lifetime);
+      reschedule(entry, lifetime);
     }
   }
   function destroy() {
@@ -78,7 +72,8 @@ export default function initCache({
     clearTimeout(timer);
     timer = 0;
   }
-  function reschedule(lifetime) {
+  function reschedule(entry, lifetime) {
+    entry.expiry = lifetime + getNow();
     if (timer) {
       if (lifetime >= minLifetime) return;
       clearTimeout(timer);