這個文章主要介紹了爲什麼要用cheerp技術以及和其他對標的技術對比,他的閃光點在哪裏。
WebAssembly 是一種中間碼用於加速瀏覽器端應用,目前有多種語言可以編譯或者交叉到這種格式。當然這個不是本文的內容,詳細瞭解請移步 wasm官網
目前支持:
cc++是官方推薦的方式,詳細使用見文檔;
其他語言
- AssemblyScript:語法和 TypeScript 一致,對前端來說學習成本低,爲前端編寫 WebAssembly 最佳選擇;
- Rust:語法複雜、學習成本高,對前端來說可能會不適應。詳細使用見文檔;
- Kotlin:語法和 Java、JS 相似,語言學習成本低,詳細使用見文檔;
- Golang:語法簡單學習成本低。但對 WebAssembly 的支持還處於未正式發佈階段,詳細使用見文檔。
cheerp:
cheerp技術是基於llvm的一個交叉工具技術集合, 目前可以支持到的交叉
c/c++到javascript/asm.js/wasm的功能完備的的可移植方案。
筆者從2014年開始就接觸cheerp至今, 一直對這個技術抱有極大的熱情。
對比emcc(不懂自行百度)優勢和劣勢。
優勢:
- cheerp代碼更加簡單, 環境配置也簡單。
- 完備的C++14支持。
- 編譯後擁有更小的體積(內存模型)
- 更容易的混合編程(c++,js,wasm)
- 更快的性能
- 可以支持降級方案
缺點: 幾乎是唯一也是致命的缺點,沒有對應的文檔。
對比其他交叉到wasm的方案
- LLVM AOT支持
- 本地數學庫支持
- 交織流水線優化
- 更短的指令集合
- 更適合大型項目
- 無差別融合asm.js/js庫
- 超越30%的性能
性能:
c/c++開啓優化1200ms >
wasm 1990ms >
c/c++未開啓優化 2400ms >
asm.js 2600ms >
node.js 2900ms >
luajit 4500ms>
lua5.2 34000ms
by 鍾元 [email protected]