ソースを参照

Perf: enable cache for nxdomain bogus source

SukkaW 2 年 前
コミット
1f23212042
1 ファイル変更23 行追加10 行削除
  1. 23 10
      Build/build-anti-bogus-domain.ts

+ 23 - 10
Build/build-anti-bogus-domain.ts

@@ -6,20 +6,33 @@ import { processLine } from './lib/process-line';
 import { task } from './lib/trace-runner';
 import { task } from './lib/trace-runner';
 import { SHARED_DESCRIPTION } from './lib/constants';
 import { SHARED_DESCRIPTION } from './lib/constants';
 import { isProbablyIpv4, isProbablyIpv6 } from './lib/is-fast-ip';
 import { isProbablyIpv4, isProbablyIpv6 } from './lib/is-fast-ip';
+import { TTL, deserializeArray, fsCache, serializeArray } from './lib/cache-filesystem';
 
 
 const getBogusNxDomainIPs = async () => {
 const getBogusNxDomainIPs = async () => {
-  const result: string[] = [];
-  for await (const line of await fetchRemoteTextByLine('https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/bogus-nxdomain.china.conf')) {
-    if (line && line.startsWith('bogus-nxdomain=')) {
-      const ip = line.slice(15).trim();
-      if (isProbablyIpv4(ip)) {
-        result.push(`IP-CIDR,${ip}/32,no-resolve`);
-      } else if (isProbablyIpv6(ip)) {
-        result.push(`IP-CIDR6,${ip}/128,no-resolve`);
+  const url = 'https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/bogus-nxdomain.china.conf';
+
+  return fsCache.apply(
+    url,
+    async () => {
+      const result: string[] = [];
+      for await (const line of await fetchRemoteTextByLine('https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/bogus-nxdomain.china.conf')) {
+        if (line && line.startsWith('bogus-nxdomain=')) {
+          const ip = line.slice(15).trim();
+          if (isProbablyIpv4(ip)) {
+            result.push(`IP-CIDR,${ip}/32,no-resolve`);
+          } else if (isProbablyIpv6(ip)) {
+            result.push(`IP-CIDR6,${ip}/128,no-resolve`);
+          }
+        }
       }
       }
+      return result;
+    },
+    {
+      ttl: TTL.ONE_WEEK(),
+      serializer: serializeArray,
+      deserializer: deserializeArray
     }
     }
-  }
-  return result;
+  );
 };
 };
 
 
 export const buildAntiBogusDomain = task(import.meta.path, async () => {
 export const buildAntiBogusDomain = task(import.meta.path, async () => {