2 回答
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1789条经验 获得超8个赞
V8 开发人员在这里。正如评论者所指出的,这个问题有点过于模糊,无法得到可靠的答案(并且可能也不是真正的主题),但我可以提供一些想法。
V8 有一定的硬性要求,例如:
它需要几兆字节的内存才能启动,因此它不会在内存不足的微控制器上运行
对于正常操作,它需要权限(来自操作系统/内核)来分配可执行内存。最近的版本支持“jitless”模式,可以避免这种情况,但代价是性能损失(不生成优化代码)——这取决于你的工作量。
它生成的代码针对某些最低 CPU 功能,例如 x86 上的 SSE2 和 ARM 上的 armv6+vfpv2。这个最小值甚至适用于“无抖动”模式,因为它会执行 V8 在构建时生成并包含在其二进制文件中的代码。(如果有足够的工程投资,在技术上可以修改其代码生成后端以针对较低的硬件要求。)
正式支持在Windows、MacOS、Linux、Android、Fuchsia上运行;还有一些其他操作系统的社区支持。如果您的嵌入式设备有不同的操作系统,或者根本没有内核,则必须进行调整。
除此之外,这只是您希望事情变得多快的问题。撇开平台兼容性要求不谈,如果您愿意等待足够长的时间,几乎所有软件都可以在几乎所有硬件上运行。见过树莓派在 Pentium-133 上启动普通 Linux 发行版或 Windows XP 吗?它有效,但速度很慢!人们在更快的硬件上花费大量资金是有原因的;-)
关于这方面的更多考虑:
在许多情况下,原始执行速度并不重要。例如,当在原生模块中完成繁重的工作时,通常可以使用相对较慢的脚本语言作为这些模块之间的“粘合剂”。
V8 并非针对资源严重受限的环境,但还有其他 JavaScript 引擎专门针对微控制器。它们中的许多只支持有限的功能集(例如仅 ES3 或 ES5,没有现代 EcmaScript 功能)以节省内存和复杂性。
如果给定的用例确实对弱硬件有严格的性能要求,那么使用低级语言是有意义的。出于这个原因,许多微控制器都是用 C 方言(即 C 的子集)编程的。
说到 C/C++ 与 JavaScript:很难比较。简短的回答是 C 更快,但这取决于。您可以在动态编译的代码处于优势的情况下制作微基准测试,因此 JavaScript 会更快。通常,与手动内存管理相比,自动垃圾收集等语言功能会降低性能的几个百分点。通过 JIT 编译来缓解动态语言的缓慢性同样需要花费一些时间,因为这是 CPU 必须做的额外工作。在足够快的硬件上,所有这些开销通常都小到无关紧要,但是当您遇到硬件完全可以做的限制时(同时仍然满足用户对性能的期望),那么该评估可能会改变。
添加回答
举报