wasm和javascript

简介: 你是前端吗?你知道WebAssembly吗? 我是前端,很早以前就关注并使用这个技术了。 2015年的时候,还搞过技术分享,那时候还不叫wasm, 那时候确切点说称之为经过llvm编译高度优化过的asm.js . 当时给youku播放器做的加密方案之一,当时有flascc , alchemy等几个不同的方案备选。

你是前端吗?你知道WebAssembly吗?

我是前端,很早以前就关注并使用这个技术了。

2015年的时候,还搞过技术分享,那时候还不叫wasm, 那时候确切点说称之为经过llvm编译高度优化过的asm.js . 当时给youku播放器做的加密方案之一,当时有flascc , alchemy等几个不同的方案备选。最终选择了cheerp和flascc两种方案。

cheerp 也是将c++交叉编译成js的解决方案,和asm.js不同走的是交叉另一条路,区别在于内存模型。后来直到wasm的原型和草案通过,17年底cheerp技术才开始支持到wasm,wast的交叉编译。cheerp原有代码基本上不需要更改就能直接生成wasm字节码。cheerp最新版本是2.0,有win版本。后来搞了一套cheerpj给java开发人员用于移植java的老富客户端应用。

flascc 是adobe公司的 flash as3 交叉编译方案, 之前的叫adobe alchemy. 是通过gcc生成优化过的AS3代码,搞得不是很彻底(没有生成字节码),编译速度很慢。最早是可以支持c开发, 后来全部到flascc 改成了c++ sdk ,体积暴增。随着flash技术没落而完结。

ane adobe的air拓展方案之一,所谓拓展其实在平台上就是dll/so,通过代理技术(类似jni)使用。目前还存在于tv端,移动游戏端。

swig 号称将c++/c 转化成多种语言的拓展,包括不限于(js,tcl,python,lua,java,php,perl)等等等。其实也是类似上面的技术, 公开C函数和符号, 上层加上各种语言的数据包装调用。你如果选用了这个技术,就要忍受他的一些智能的傻逼的行为, 有时候转会造成内存泄漏,比如拷贝大块内存来做包装。

WebAssembly 会是 JavaScript 的末日吗?为什么?

这属于交叉领域的问题。两者关注的点不同,JS属于业务逻辑处理,wasm属于扩展库。完全没有可比性。最终wasm解决的是大型网络游戏,或者c/c++库的移植的方案。永远也取代不了JS。走的是NDK,ANE,SWIG的路子。最后你看这些类似的交叉编译技术SWIG方案,现在还有谁活着?有谁愿意为这些又复杂,开发周期又长,出bug搞死人的技术买单。早些年有把ffmpeg交叉到JS的,浏览器光下载就需要1光年。做好自己领域内的事情就好。

你是否看好 Web Assembly ? 为什么?
说实话,我不太看好。 这是个比较尴尬的技术,15年到现在我一直在用。
第一 定位的问题。 前端不太care这个,靠这个找不到工作。场景有限,除了游戏公司, 然unity3d早就支持了直接输出wasm了, 之前好像虚幻引擎也支持了一阵子。好像白鹭也支持,layaair不太清楚。

第二 学习成本高。 作这个需要对c++ 和 trans的sdk非常了解,web平台也需要了解,差异性很大,难精通 。内存模型不一致, 细节很多,搞不好也内存泄漏。

第三 频繁js交互性能差(可能会发光发热)。 很多人不理解说为毛性能差,不是c++写的吗,不是aot的吗? 比如说调用传参,一般都是堆栈机,js端是弱类型如何区分类型?这里就开始消耗资源了。js所有的类型都是一个number,c端获得后先知道我这个number对应是那种类型,func?int,float?还是复合的object。然后c端开始包装数据。类似还有直接压入2进制数据或者json字串的来做类似的事情, flash早期用xml来做,我现在记得很清楚command或者ExternalInterface的方法,这种性能更恶心。数据返回还需要将原始数据包装,在压回去或者返回后在JS端再包装,返回指针的,返回userdata的,返回二进制数据的。有时候c暴露的接口是某个数据结构类型,有的技术方案编译检查不严格还好说,一个二进制数据复合数据格式的就行,有的技术方案直接就是对不起我是静态类型,我不认识你扔过来的是什么东西。有的在中间做了过程比如luajit,你不认识?好办我先化化妆让你认识一下,你看你要的是这个不?除非你整个程序都是用这个技术来实现, 不然你很有可能会掉坑,花式掉坑。就是说除了对性能要求的极点,比如做游戏或者游戏引擎,整个架构都可以用c++来做 ,webgl和opengles,人家可以一体。然后的编译后的体积, 你要依赖的库
都要编译进来呀(。 而且这项技术限制很多: gc问题(互相引用的无法gc)dom操作目前是不可以的,调试(没错是调试),什么其他语言交叉编译到wasm那是噱头, 多一种语言多一堆人跳坑,他们的标准库就是巨大的坑,而且使用这些被阉割后的语言,你真觉得舒服吗?

第四 搞c,c++的最舒适的平台是linux,绝非web(这条是凑字数)。

关于JS的吐槽, 其实大家有个误解, 就是觉得js很慢。 其实不光js慢,所有语言如果没有良好的设计都会慢(这是另外的范畴),放在对的位置就行了, 用弹弓打飞机不合适吧,用原子弹大小鸟也不合适吧。

一直用的是cheerp那套方案。 对这套技术有兴趣的可以关注下 https://github.com/leaningtech ,没有最牛逼的技术,只有适合场景的技术。

相关文章
|
缓存 前端开发 JavaScript
Webpack 动态加载的原理
【10月更文挑战第23天】Webpack 动态加载通过巧妙的机制和策略,实现了模块的按需加载和高效运行,提升了应用程序的性能和用户体验。同时,它也为前端开发提供了更大的灵活性和可扩展性,适应了不断变化的业务需求和技术发展。
|
人工智能 安全 新能源
祝贺!零跑汽车交付超40万台 ,携手阿里云打造新一代智能座舱
祝贺!零跑汽车交付超40万台 ,携手阿里云打造新一代智能座舱
978 10
|
XML 定位技术 Android开发
Android中获取当前位置信息
这篇教程主要介绍了在Android平台上如何使用服务完成定位功能。众所周知,Android设备的当前位置信息,对开发创新性App、解决人们日常生活问题有极大帮助。在Android平台开发定位相关的应用程序,需要位置提供者。有两种类型的位置提供者:
1705 0
Android中获取当前位置信息
|
云安全 安全 网络安全
|
15天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
3652 0
|
8天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
2046 2
|
14天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
2460 46
|
11天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
1473 3
|
9天前
|
开发者 索引
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
Open Plugin Market 是一个开放插件索引平台,收录800+优质DSH插件,支持分类浏览、智能推荐与随机发现。无需安装市场,粘贴索引地址即可一键接入,网页版直访 dshopen.org,助力小开发者被看见。(239字)
1958 1
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用

热门文章

最新文章