由:thheller 评论
抱歉重新打开。
我在对我的代码进行性能分析时发现关于cljs.core/str的性能警告。
Chrome浏览器提醒:“未优化,参数值上下文不合适”,进一步查看goog.string.buildString的实现。
goog.string.buildString = function(var_args) { return Array.prototype.join.call(arguments, ''); }
由于我们从不使用超过一个参数调用它,这或许不是最佳实现方式。
或许可以省略调用并内联,类似于
`
(defn str
"如果没有参数,返回空字符串。有参数x,返回
x.toString()。(str nil)返回空字符串。如果有多个参数,返回参数的str值拼接的结果。"
以下为代码实现:
([] "")
([x] (if (nil? x)
""
(.join #js [x] "")))
([x & ys]
(loop [sb (StringBuffer. (str x)) more ys]
(if more
(recur (. sb (append (str (first more)))) (next more))
(.toString sb)))))
`
我没有遵循这个问题,但为什么我们不使用 .toString()?使用 buildString/array 方法似乎有些过度复杂?
我对整体影响不太清楚,但鉴于 cljs.core/str 在我的配置中出现的频率很高,我认为应该进一步调查。