gpt4 book ai didi

javascript - 手写 asm.js - 如何跟踪堆中的 javascript 对象?

转载 作者:行者123 更新时间:2023-12-03 02:07:30 28 4
gpt4 key购买 nike

我正在 asm.js 中编写优先级队列和八叉树Javascript 的子集,以便从它们中挤出最后可能的性能。

但是,您如何在 asm.js 函数的 heap 中存储对 Javascript 对象的引用?缓冲?

现在,我在堆中的结构必须具有它们所引用的 Javascript 对象的整数 ID,我需要一个经典的 Javascript 对象作为这些整数和 Javascript 对象之间的字典。

例如,我有一个 asm.js 八叉树,它公开了一个类似 add(x1,y1,z1,x2,y2,z2,object_id) 的 add 函数。哪里object_id是整数。和 find(x1,y1,z1,x2,y2,z2)函数返回边界内所有 object_id 的列表。这意味着我必须在 Javascript 中为 object_ids 维护一个对象字典,以便我可以确定该框中的实际对象; object_ids 到对象的映射。

这感觉不对。将 int 转换为字符串以在 Javascript 世界中进行查找的想法是错误的。在 asm.js 中编写内循环数据结构的一个关键点是避免创建垃圾。

(我的目标是 Chrome 和 Firefox;我希望 asm.js 严格代码在两者上运行得更快。是的,我将进行分析。)

无论你可以在 asm.js 堆中实现多少属性——例如一个对象的位置和尺寸——你通常也需要将一些 Javascript 对象与该项目相关联;字符串和 webGL 对象和 DOM 对象等等。

asm.js 堆是否有更好的方法来包含指向 Javascript 对象的指针?如果使用整数 ID 映射,例如使用数组或对象作为字典更好吗?

最佳答案

当我在 http://asmjs.org/spec/latest/ 阅读 asm.js 规范时和常见问题解答在 http://asmjs.org/faq.html ,简短的回答是你不能在 asmjs 堆中存储 JS 对象引用。引用常见问题解答:

Q. Can asm.js serve as a VM for managed languages, like the JVM or CLR?

A. Right now, asm.js has no direct access to garbage-collected data; an asm.js program can only interact indirectly with external data via numeric handles. In future versions we intend to introduce garbage collection and structured data based on the ES6 structured binary data API, which will make asm.js an even better target for managed languages.


因此,您当前存储外部 id 到对象映射的方法似乎是当前推荐的解决问题的方法,只要您关心对象实例而不仅仅是它们的内容。否则,我认为您的想法是将存储的对象非物质化:将每个对象的完整内容存储在优先级队列中的插槽中,并仅在获取时将其转换回真正的 JS 对象。但这只有在您的对象可以安全地按需重新创建时才有效。

关于javascript - 手写 asm.js - 如何跟踪堆中的 javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564972/

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