使用datomic和clojure我查询数据库并获取九个元素的列表。
我想在页面上绘制这九个元素,并且在这一点上它们保证是不同的元素。
但是,每次调用该函数时,它都会重新执行查询,返回一个新列表,然后从新列表中获取一个元素。这是非常低效的,并且还引入了重复的可能性。
我想记住这个列表并让它成为nth-indexable。建议和想法欢迎。
答案 0 :(得分:2)
如果你还没有调用它,你应该只调用它来代替调用“函数”。如果您调用它,请确保存储结果。如果您不打电话,请查看结果。
memoize
(http://crossclj.info/fun/clojure.core/memoize.html)可能会帮助您实现这一目标。根据您的缓存要求,您可能希望研究其实现并实现更合适的内容。
您可能希望在服务器端引用https://github.com/clojure/core.memoize以获得更复杂的记忆需求。
任何列表都可以使用O(n)进行nth-indexable。对于O(log 32 n)性能,使用vec
从中创建一个向量。