这是围绕 {{transient []}} 的一个非常简单的优化。这避免了复制空数组。
性能改进,对于小到中等大小的向量(5-32 个元素)的 {{mapv}} 操作,FF 和 Chrome 上从 20% 到 100% 的任何地方。
(defn faster-editable-root
[node]
(if (identical? (.-EMPTY_NODE PersistentVector) node)
(VectorNode. (js-obj) (make-array 32))
(VectorNode. (js-obj) (aclone (.-arr node)))))
(def orig-editabe-root tv-editable-root)
(enable-console-print!)
(dotimes [_ 2]
(doseq [size [5 10 40]]
(let [xs (range size)
sims 500000]
(set! tv-editable-root orig-editabe-root)
(prn "Size: " size)
(simple-benchmark [] (mapv inc xs) sims)
(set! tv-editable-root faster-editable-root)
(prn "NEW:")
(simple-benchmark [] (mapv inc xs) sims))))