缓存的复用与失效[#23]
普通build会缓存读取并求值后得到的Content IR。再次构建时,如果文章、导入的模块、编译代码和配置都没有变化,就直接复用;数学计算、规则查询与示例核验不必每次重做。整个Forest仍会重新分析,因此查询、链接和transclude看到的是当前的文章集合。
计算如果读取文章之外的数据文件,要在读取前登记它:
@use-modules[(grove input scribble) (ice-9 textual-ports)] @(define data (call-with-input-file (depend-on! "data.txt") get-string-all))
depend-on!返回文件的绝对路径,并把该文件登记为依赖。文件变化后,文章结果与渲染输出会一起失效,grove serve也会监视它。
对时间、随机数、网络请求,或必须每次执行的副作用,应主动退出缓存:
@use-modules[(grove input scribble)] @(disable-cache!)
这篇文章会在每次构建中重新求值,也重新生成渲染输出。只因为一个结果可以保存,并不意味着任意Scheme程序都可以安全地跳过执行。