dcodeIO/webassembly의 툴체인에서 zlib을 빌드해 봅니다.
2797 단어 자바스크립트WebAssembly
dcodeIO/webassembly란?
가볍고 실험적이고 최소한의 툴킷과 런타임을 가지고 c 파일을 wasm으로 컴파일하고 실행할 수 있습니다.
malloc
라든지 최소한 원하는 것은 들어 있기 때문에, 약간의 프로그램을 쓰고 싶지만 emscripten 사용할 정도가 아닐 때에 편리합니다.zlib 빌드
샘플 리포지토리 을 만들었으므로
git clone
와서 빌드합니다. Windows Subsystem for Linux, macOS High Sierra에서 동작 확인을 하고 있습니다.$ git clone https://github.com/ukyo/zlib-wasm-without-emscripten-sample.git
$ cd zlib-wasm-without-emsripten-sample
$ npm install
$ npm run build
빌드 스크립트 은 webassembly/build.js at master · dcodeIO/webassembly 을 참고로 하여 짚어 보았습니다 (흐름은 아래 그림을 참조).
<stdio.h>
가 없다고 말해져 조금 빠지거나 했습니다만, 헤더 파일을 위로 올리고 -isystem path/to/include
해서 회피했습니다. importObject에 넣는 함수를 정의하고 싶은 경우는 import.h 와 같은 헤더 파일만 만들면 임포트 하는 취급이 되는 것 같습니다.벤치마크
wasm, pako, node의 zlib로 비교. 원시 deflate, inflate로 벤치마크를 취해 보았습니다.
$ npm run bench
## lorem_1mb.txt size: 1000205
wasm x 9.61 ops/sec ±4.48% (27 runs sampled)
pako x 8.70 ops/sec ±2.26% (25 runs sampled)
native x 15.21 ops/sec ±3.15% (41 runs sampled)
Deflate: Fastest is native
## deflated lorem_1mb.txt size: 257012
wasm x 120 ops/sec ±10.26% (60 runs sampled)
pako x 106 ops/sec ±8.56% (67 runs sampled)
native x 211 ops/sec ±2.68% (74 runs sampled)
Inflate: Fastest is native
어떻게든 pako를 이기고 있군요 (이 정도의 규모라고 역시 JavaScript에는 이길 것 같다). 덧붙여서 파일 사이즈는 60.4KB(wasm) + 3.6KB(js). wasm 쪽은 gzip하고 28KB 정도이므로, 꽤 용서할 수 있는 범위가 아닐까요.
요약
Emscripten이나 사용하지 않고 dcodeIO/webassembly 내의 툴 체인에서 zlib를 wasm으로 컴파일 해 보았습니다. emsdk에 환경을 오염되지 않고
npm i && npm run build
정도로 빌드할 수 있는 것이 좋네요.
Reference
이 문제에 관하여(dcodeIO/webassembly의 툴체인에서 zlib을 빌드해 봅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ukyo/items/ebc30ebf365718e5d16d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)