From 3c6e62b75293b6625509ade3c278fc2d4d147c30 Mon Sep 17 00:00:00 2001 From: Alexander Foremny Date: Thu, 7 Dec 2023 03:55:45 +0100 Subject: chore: increase performance by caching everything Initial cache generation is slower, as we are losing out on parallelism. --- app/History/Cache.hs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'app/History/Cache.hs') diff --git a/app/History/Cache.hs b/app/History/Cache.hs index d0473e2..978f3d9 100644 --- a/app/History/Cache.hs +++ b/app/History/Cache.hs @@ -1,24 +1,33 @@ -module History.Cache (cached) where +module History.Cache + ( cached, + cachedMaybe, + ) +where import Data.Binary (Binary, decodeFileOrFail, encodeFile) import Data.Text qualified as T +import Debug import Git qualified import System.Directory (createDirectoryIfMissing, doesFileExist) import System.FilePath (()) -cached :: Binary a => T.Text -> (T.Text -> IO a) -> IO a -cached hash func = do +cached :: Binary a => T.Text -> IO a -> IO a +cached key func = do root <- Git.getRootDir createDirectoryIfMissing True (root ".anissue") - let file = (root ".anissue" T.unpack hash) + let file = (root ".anissue" T.unpack key) doesFileExist file >>= \case True -> decodeFileOrFail file >>= \case - Left _ -> generate file + Left e -> debug "e" e `seq` generate file Right blob -> pure blob False -> generate file where generate file = do - blob <- func hash - encodeFile file blob + blob <- func + encodeFile (debug "cache miss" file) blob pure blob + +cachedMaybe :: Binary a => Maybe T.Text -> IO a -> IO a +cachedMaybe Nothing func = func +cachedMaybe (Just key) func = cached key func -- cgit v1.2.3