在
2024 年 Clojure 状态调查!
中分享您的想法。
欢迎!请参阅
关于
页面,了解更多有关此功能的信息。
GitHub 登录
所有活动
问题
未回答
标签
提问一个问题
关于
提问一个问题
ES6 迭代器应尽量使用 IIterable
0
投票
提问
Jan 15, 2018
在
ClojureScript
由
jira
动机
ES6 可迭代对象:
https://mdn.org.cn/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
在 React 中的应用:
https://github.com/facebook/react/blob/30dac4e78de02fb427ee82013160ae875128d7a2/packages/react/src/ReactElementValidator.js#L195-L204
(defn es6-iterator**
[coll]
(if (implements? IIterable coll)
(let [it (-iterator ^not-native coll)]
#js{:next (fn []
(if ^boolean (.hasNext it)
#js{:value (.next it), :done false}
#js{:value nil, :done true}))})
;; 使用简单的 first/next 迭代器作为后备
(ES6Iterator. (seq coll))))
;; 测试可以使用往返方式
(es6-iterator-seq (es6-iterator (hash-map 0 1 2 3)))
(defn es6-iter-consume
[it]
(while (not (.-done (.next it)))))
(dotimes [_ 3]
(let [xs (vec (range 3000))
runs 1000]
(simple-benchmark []
(es6-iter-consume (es6-iterator xs)) runs)
(simple-benchmark []
(es6-iter-consume (es6-iterator** xs)) runs)))
Chrome 中的速度提高了大约 4 倍。此外,生成的垃圾数据也少得多。
请求
jira
请
登录
或
注册
以添加评论。
请
登录
或
注册
以回答此问题。
1
答案
0
投票
回答
Jun 26, 2019
由
jira
参考:
https://clojure.atlassian.net/browse/CLJS-2472
(由 aralo 报告)
请
登录
或
注册
以添加评论。
欢迎来到 Clojure Q&A,您可以在此提问并获得 Clojure 社区成员的答案。
相关问题
集合哈希器应使用迭代器
random-uuid 应在可用时使用密码学安全的伪随机数生成器
如果可能,请使用基本集合的 select-keys
如果尝试使用 :refer :all,将出现可怕的错误消息
增强数值推理,如果 + number?在局部变量上测试应标记成功分支中的局部变量
类别
所有类别
Clojure
(1.5k)
ClojureScript
(610)
ClojureCLR
(25)
贡献库
(719)
工具
(72)
元信息
(19)
其他
(91)
...