Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
事件溯源
Kafka消息
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
人工智能
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
更多话题
从Clojure/ClojureScript迁移到Rust:体积小4倍性能快50倍 - asciinema
21-11-30
banq
asciinema-player 已经在 JavaScript 和 Rust 中从头开始重新实现,使虚拟终端解释器的速度提高了 50 倍,同时将 JS 包的大小减少了 4 倍。
是什么促使我们要改变了之前的 ClojureScript 实现?尽管我很喜欢 Clojure/ClojureScript,但有几个主要和次要问题我无法解决,主要围绕以下 3 个方面:
速度 - 我希望播放器非常流畅,即使是最沉重的动画录音。由于 ClojureScript 的不可变数据结构,有很多对象一直被创建和垃圾收集,对于高帧率、繁重的动画,这会给 CPU 和内存带来很大压力。Rust 中虚拟终端解释器的新实现(编译为 WASM)使其速度提高了 50 倍。额外的速度提升来自将视图从 React.js 移植到
SolidJS
,这是目前最快的 UI 库之一。
大小 - ClojureScript 编译器的输出包相当大。当您在 ClojureScript 中构建自己的应用程序时很好,但是当您提供一个库供其他人在他们的网站上使用时,情况就很糟糕了。2.6 是 570kb(缩小)——超过半兆。该包包含整个 ClojureScript 标准库、几个流行且有用的库,如试剂、core.async 和最后的 React.js(通过试剂)。新的 3.0 是纯 JS,几乎只有 SolidJS 作为唯一的依赖项(它本身很小)。这使得新播放器更小,约 140kb(缩小),即使它包含嵌入的 WASM 字节码(这使得包大小的大部分)。
与 JS 生态系统集成 - ClojureScript 与 JS 生态系统集成并不容易。我知道,这些年来在这个领域已经做了很多改进,我相信有人会立即指向我相关的文档,但与常规 JS 代码库相比,它仍然是你需要多走的路,还有一些我上次检查时没有任何支持(例如在捆绑包中嵌入 WASM)。事情可能在这里发生了变化,但上面的前两个论点仍然成立,所以这是值得的。因此,您现在可以通过导入
asciinema-player npm package
提供的 ES 模块在您自己的应用程序中使用播放器。
顺便说一句,特别感谢 SolidJS 的作者 Ryan Carniato,他专注于速度和简单性,同时不影响可用性。谢谢瑞安!
现在,除了上述所有内容之外,我在 Rust 中构建
终端控制序列解释器
很有趣,为此使用了出色的资源 -
Paul Williams 的 ANSI 兼容视频终端解析器
。特别向保罗威廉姆斯致敬!
RUST语言
clojure