在过去的一次讨论中,我了解到一些开发人员由于性能问题而避免并反对使用 satisfies?
。有人告诉我“看看实现,你会汗流浃背”。
在这种情况下,实现存在于 find-protocol-impl
中,它必须检查元数据、遍历继承链以及实现接口。
对于为特定类查找协议实现的部分似乎非常缓存,除了人们可以后来扩展协议的事实。
缓存这些数据是否合理,让 extend-*
使缓存失效?或者,可以有一个标志(例如 -J-Dclojure.cache-protocols=true
),在生产中使用,以便在查找发生之前知道所有协议实现都将被加载?