在你的 2024 Clojure 调查问卷! 中分享你的想法。

欢迎!请参阅 关于 页面以获取更多关于此的工作方式的信息。

0
ClojureScript

通过使用 {{goog.object/forEach}},加上直接操作正则表达式进行检查,可以在 1.14 到 1.77 之间加速 JavaScript 对象的打印。

7 答案

0

由 mfikes 提出

`
加速摘要

    Engine  small, medium, with sub-object
        V8: 1.42, 1.31, 1.19

SpiderMonkey: 1.14, 1.48, 1.41
JavaScriptCore: 1.48, 1.58, 1.62

   Nashorn: 1.27, 1.36, 1.20
ChakraCore: 1.49, 1.77, 1.77

之前

使用 V8 进行基准测试
[obj (js-obj "a" 1 "b" 2)], (pr-str obj), 1000 次运行,74 毫秒
[obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], (pr-str obj), 1000 次运行,84 毫秒
[sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], (pr-str obj), 1000 次运行,75 毫秒

使用 SpiderMonkey 进行基准测试
[obj (js-obj "a" 1 "b" 2)], (pr-str obj), 1000 次运行,95 毫秒
[obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], (pr-str obj), 1000 次运行,92 毫秒
[sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], (pr-str obj), 1000 次运行,134 毫秒

使用 JavaScriptCore 进行基准测试
[obj (js-obj "a" 1 "b" 2)], (pr-str obj), 1000 次运行,46 毫秒
[obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], (pr-str obj), 1000 次运行,41 毫秒
[sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], (pr-str obj), 1000 次运行,55 毫秒

使用 Nashorn 进行基准测试
[obj (js-obj "a" 1 "b" 2)], (pr-str obj), 1000 次运行,1228 毫秒
[obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], (pr-str obj), 1000 次运行,1048 毫秒
[sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], (pr-str obj), 1000 次运行,620 毫秒

使用 ChakraCore 进行基准测试
对象 [obj (js-obj "a" 1 "b" 2)], 打印对象,1000次运行,55毫秒
对象 [obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], 打印对象,1000次运行,76毫秒
子对象 [sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], 打印对象,1000次运行,129毫秒

之后

使用 V8 进行基准测试
对象 [obj (js-obj "a" 1 "b" 2)], 打印对象,1000次运行,52毫秒
对象 [obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], 打印对象,1000次运行,64毫秒
子对象 [sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], 打印对象,1000次运行,63毫秒

使用 SpiderMonkey 进行基准测试
对象 [obj (js-obj "a" 1 "b" 2)], 打印对象,1000次运行,83毫秒
对象 [obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], 打印对象,1000次运行,62毫秒
子对象 [sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], 打印对象,1000次运行,95毫秒

使用 JavaScriptCore 进行基准测试
对象 [obj (js-obj "a" 1 "b" 2)], 打印对象,1000次运行,31毫秒
对象 [obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], 打印对象,1000次运行,26毫秒
子对象 [sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], 打印对象,1000次运行,34毫秒

使用 Nashorn 进行基准测试
对象 [obj (js-obj "a" 1 "b" 2)], 打印对象,1000次运行,970毫秒
对象 [obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], 打印对象,1000次运行,769毫秒
子对象 [sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], 打印对象,1000次运行,518毫秒

使用 ChakraCore 进行基准测试
对象 [obj (js-obj "a" 1 "b" 2)], 打印对象,1000次运行,37毫秒
对象 [obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6)], 打印对象,1000次运行,43毫秒
子对象 [sub-obj (js-obj "g" 7 "h" 8 "i" 9 "j" 10) obj (js-obj "a" 1 "b" 2 "c" 3 "d" 4 "e" 5 "f" 6 "s" sub-obj)], 打印对象,1000次运行,73毫秒
`

0

由 mfikes 提出

添加了CLJS-2342-2.patch,它基于当前master进行重构。

0

由 mfikes 提出

CLJS-2342-3.patch基于当前master进行重构。

0

由 mfikes 提出

CLJS-2342-4.patch进行重构

0

由 mfikes 提出

将CLJS-2342-4.patch添加到Patch Tender (i)

0

由 mfikes 提出

CLJS-2342-4.patch通过CI和Canary (/)

0
...