gpt4 book ai didi

javascript - ClojureScript HashMap 性能与 Javascript 对象

转载 作者:行者123 更新时间:2023-11-29 22:13:26 24 4
gpt4 key购买 nike

我正在 ClojureScript 应用程序中处理大型 JSON 文件(基本上包含树状结构)。基本上我遍历了那个树结构中的所有元素,这些是相当多的操作。现在我想知道 Lazy Hash 映射处理会导致多少开销。

基本上我:

  • 通过 AJAX 加载 JSON 文件
  • 使用浏览器的JSON.parse将其转换为JS对象
  • 使用 js->clj :keywordize-keys true 将其转换为 clojure 结构

JSON 的结构由嵌套列表和 HashMap 组成。有点像

{:A-key-a [{:B-key-a 34  :B-key-b [213. 23.4]}
{:B-key-a 34 :B-key-b [213. 23.4]}
...]
:A-key-b [{:someother-a 30 ...}
...]
...}

现在我想知道我是否应该退回到直接使用 JS 对象来获得速度。直觉上我会认为这比 ClojureScript 对象更快,另一方面我不想过早优化并且我对 ClojureScript 的内部结构了解不够,无法判断延迟评估引入的开销。

我想我可以使用 .-mykey 访问器语法和 google 闭包 foreach 函数来重写特定的源代码。你怎么看?

我看过Improve performance of a ClojureScript program在类似的优化主题上,我认为这也意味着 loop .. recur 似乎是一个可行的循环选项。是吗?

最佳答案

如果它在您的控制之下,请考虑在服务器端生成 EDN 而不是 JSON。我不确定解析 EDN 字符串是否比将 JSON 转换为 EDN 更快,但至少它会在某种程度上降低应用的复杂性。

根据您的描述,数据结构听起来像是“只读”的。然后,对象构造成本实际上是您唯一需要考虑的因素 - 稍后读取它会很便宜(持久性 map 和矢量具有近乎恒定的访问时间)。

根据数据结构的大小,用户可能会或不会察觉到 UI 在页面加载时如何由于此计算任务而阻塞。考虑对其进行测量。

在 JS 数组可以被视为 seq 和关键字键在 ClojureScript 中不如在 Clojure 中强大(这里它们不实现 IFn)之间,实际上没有 < em> 在这种特殊情况下,EDN 优于 JSON 的许多优势。

至于迭代,虽然映射/向量不是惰性的,但 Clojure(Script) 的数据处理函数(映射/过滤器等)的结果确实返回惰性序列 - 并生成中间值集合的方式。

您可以使用最近移植的 reducers 来避免相关的开销库,以及 transient/persistent! 设施(如果这被证明是您应用中的实际问题)。

关于javascript - ClojureScript HashMap 性能与 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16772184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com