Fabrice Bellard用了什么技巧让他的Javascript PC模拟器如此快速
What tricks did Fabrice Bellard use to make his PC emulator in Javascript so fast?
Fabrice Bellard用Javascript实现的PC模拟器速度惊人——它在几秒钟内在浏览器中启动一个小型Linux映像。
使用了哪些技术来获得这种性能?
我认为,在Bellard的技术列表中,与现代JS解释器的"速度"分享一些普遍的赞誉是一个很大的话题(因为他不会取代浏览器的引擎)他的优化技术是什么是一个很好的问题,我想得到一个更详细的记录。
到目前为止,我能说出的点是
- (可选)JS类型的数组排除了不必要的内存分配动态(调整大小)。固定类型(大小)允许分配连续的内存块(在这些块中没有可变长度元素的段),并统一寻址单个类型的元素
- 通过自定义的极简主义引导程序快速引导(请参阅Fabrice发布的linuxstart代码,也可以参阅他的名为TCCBOOT的项目http://bellard.org/tcc/tccboot.html)
- 优化未压缩嵌入式内核(请参阅内核配置,它非常小,并针对小型"linuxes"进行了优化)
- 最少的设备数量(设备是超标准的,很容易被内核识别。到目前为止,我已经对串行设备进行了适当的研究,但其余的都受益于类似的属性)Ramdisk初始化相当缓慢
- ext2系统中的小型(2048个块)未压缩root.b。根系统由最小的组合(rootfs、proc、tmpfs、devpts)组成。没有交换
- (不确定)他已经为ttyS0(串行端口设备,确切地说,实际上是内核UART驱动程序)修补了与终端通信的缓冲区大小。使用他的term.js绑定可以以任何方式缓冲通信(我在UART本身中没有发现传输缓冲区)。请注意,模拟(在本例中)可能比实际情况快得多
刷新页面时,请注意浏览器缓存。如果全部存储在内存中(由主机操作系统优化),它的启动速度会非常快。执行"未压缩"二进制段(start_linux.bin、vmlinux26.bin、root.bin)的直接(如果缓存在内存中)复制(使用load_binary())。没有硬盘I/O限制。
我使用了优秀的http://jsbeautifier.org/以美化缩小后的JS代码。在我看来,它就像是精心编写的、不挑剔的、合理的过程代码。这本身就是一项了不起的成就,但现代JavaScript解释器的非凡性能也值得称赞。
截至2018年,Fabrice已使用asm.js和WebAssembly来实现这一目标。
你可以在这里阅读更多。
如果你看看Inspector(或者我们称之为Chrome DevTools,或者Firefox的Inspector),你会看到一些wasm://
源代码(在Firefox上),这意味着他使用了WebAssembly来实现这一点。
也许使用C到JavaScript编译器?像Emscripten一样:http://code.google.com/p/emscripten/
- 我如何让jQuery使用Greasemonkey 0.8脚本(在Firefox 2上),在没有互联网的情况下使用PC
- OnsenUI中的ng点击事件不会在Android模拟器上触发
- 自定义jquery选择器属性未在模拟器中激发
- 无法在iOS模拟器上运行简单的基于KineticJs的Cordova/PhoneGap应用程序
- 将链接保存到用户'的PC
- 跨浏览器问题:如何调试我的网站'在windows PC的safari上的行为
- 显示:没有不工作的iPhone模拟器
- window.location.href =“#find” 适用于移动设备,但不适用于 PC.在本地站点上正常(表达式
- 这个JS在我的家用PC上工作,但当我把它放在网上时就不行了.知道为什么或如何这是
- Onicecandidate 不会在第二台 PC 上开火
- 脚本 5:访问被拒绝 ie8.在 IE11 中使用 IE8 模拟器
- 三星智能电视模拟器无法识别.jpg图像
- trigger('create') 在 Chrome 中正确呈现,但在 Android 模拟器中无法正确呈现
- 使用javascript创建音频插件/模拟器
- 在Phonegap模拟器/ iPhone中解析JSON与通过浏览器
- webview日期选择器可以在android模拟器中工作,但不能在设备上工作
- 如何判断是否由于流已被删除而激发了pc.onnegotiationneed
- 浏览器检测-移动与PC
- Ng-route在pc中工作,但在模拟器(cordova)中不工作
- Fabrice Bellard用了什么技巧让他的Javascript PC模拟器如此快速