diff options
| author | eltrac <hi@eltr.ac> | 2026-03-17 11:17:00 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-03-17 11:17:00 +0800 |
| commit | a292b4e27d41729b745863c2fa1878cf1dee9f56 (patch) | |
| tree | cdda7173fd5a752c38fe65c2a3dda10dc23b8232 /src | |
| parent | a0bc9187ebfb20d34174d32dec497a7e5b279c63 (diff) | |
perf(storage): traverse lines lazily to find webmention, not reading whole file
Diffstat (limited to 'src')
| -rw-r--r-- | src/weepinbell/storage.clj | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/weepinbell/storage.clj b/src/weepinbell/storage.clj index 9ee7c32..dbee6b5 100644 --- a/src/weepinbell/storage.clj +++ b/src/weepinbell/storage.clj @@ -24,12 +24,16 @@ ([id] (get-wm id nil)) ([source target] - (let [data (load-data) - pred (if target - #(and (= source (get-in % [:webmention :source])) - (= target (get-in % [:webmention :target]))) - #(= source (get-in % [:webmention :id])))] - (first (filter pred data))))) + (with-open [r (io/reader data-file)] + (let [lines (line-seq r) + pred (if target + (fn [wm] (and (= source (get-in wm [:webmention :source])) + (= target (get-in wm [:webmention :target])))) + (fn [wm] (= source (get-in wm [:webmention :id]))))] + (->> lines + (map edn/read-string) + (filter pred) + first))))) (defn first-line-empty? [path] (with-open [rdr (io/reader path)] |
