From ac78b0c8538d5f1376ce8bddfa2706c33c0e2c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Thu, 13 Oct 2022 22:36:20 +0200 Subject: [PATCH] perf: delay cache read until it is necessary --- autoload/wiki/cache.vim | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/autoload/wiki/cache.vim b/autoload/wiki/cache.vim index ea61bdf..62ad7a9 100644 --- a/autoload/wiki/cache.vim +++ b/autoload/wiki/cache.vim @@ -147,11 +147,11 @@ function! s:cache.init(path, opts) dict abort " {{{1 let new.path = a:path let new.ftime = -1 let new.default = a:opts.default + let new.__validated = 0 + let new.__validation_value = deepcopy(a:opts.validate) if a:opts.persistent - call extend(new, s:cache_persistent) - call new.validate(a:opts.validate) - return new + return extend(new, s:cache_persistent) endif return extend(new, s:cache_volatile) @@ -163,14 +163,13 @@ let s:cache_persistent = { \ 'type': 'persistent', \ 'modified': 0, \} -function! s:cache_persistent.validate(value) dict abort " {{{1 - let self.__validation_value = deepcopy(a:value) +function! s:cache_persistent.validate() dict abort " {{{1 + let self.__validated = 1 + if type(self.__validation_value) == v:t_dict let self.__validation_value._version = s:_version endif - call self.read() - if empty(self.data) let self.data.__validate = deepcopy(self.__validation_value) return @@ -245,6 +244,10 @@ function! s:cache_persistent.read() dict abort " {{{1 endif call extend(self.data, l:data, 'keep') + + if !self.__validated + call self.validate() + endif endfunction " }}}1