13 Star 74 Fork 93

OpenHarmony / third_party_jerryscript

 / 详情

如何在 javascript 代码中更高效地存储二进制数据

已完成
缺陷 成员
创建于  
2022-08-31 14:52

【任务描述】
我想存储一些二进制数据,例如。图像或字体等这些二进制数据将被编译为字节码并存储在 rom 中。
目前我倾向于使用字符串或Uint8Array,但我不知道在运行编译为字节码时哪个效率更高。
将数据放入字符串或类型数组对我来说都可以。但我可以稍后使用 typedarray 访问它。如果我将数据转换为 typedarray,它在内存消耗方面是否比字符串更有效?可以区分类型数组和字符串的性能消耗吗?

【任务来源】
上游社区
https://github.com/jerryscript-project/jerryscript/issues/4911

评论 (1)

jiangkaiwen 创建了任务
jiangkaiwen 任务状态待办的 修改为进行中
jiangkaiwen 修改了描述
jiangkaiwen 任务类型任务 修改为缺陷
jiangkaiwen 修改了标题
jiangkaiwen 任务状态进行中 修改为待办的
展开全部操作日志

由于字符串在内部以 cesu-8 编码存储,因此通过将每个字节映射到字符来将数据存储在字符串中平均需要大约 +50% 的内存。(低于 128 的值将使用 1 个字节进行编码,而高于 128 的值将使用 2 个字节进行编码)。
由于这种情况下的数据是使用可变参数编码存储的,因此对字符串的随机访问每次都需要线性查找,这在性能方面非常糟糕。
使用 Uint8Array 需要恒定的内存开销,它由 TypedArray 对象和 ArrayBuffer 标头组成,在存储大量数据时可以忽略不计。访问缓冲区也只需要恒定的开销。基于此,TypedArrays 应该是首选。
您可以使用外部 ArrayBuffer将数据存储在 rom 中,并使用该缓冲区创建一个 TypedArray 作为后备存储。IMO 这将是性能和内存方面最有效的方法。
可能导致问题的一件事是(据我所知)外部 ArrayBuffers 没有写保护,因此如果 javascript 代码尝试写入 TypedArray,则可能导致崩溃。

jiangkaiwen 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(1)
1
https://gitee.com/openharmony/third_party_jerryscript.git
git@gitee.com:openharmony/third_party_jerryscript.git
openharmony
third_party_jerryscript
third_party_jerryscript

搜索帮助

344bd9b3 5694891 D2dac590 5694891