Gunakan Emscripten untuk mengompilasi C dan C++ menjadi modul WebAssembly (Wasm) berperforma tinggi untuk browser.
1. Flag Kompilasi Emscripten Modern
Saat mengompilasi dan menautkan dengan emcc atau em++, selalu gunakan flag modular modern:
-sEXPORT_ES6: Memunculkan sintaksis modul ES6 standar (import/export), bukan objek global lama. Tindakan ini akan otomatis menetapkan-sMODULARIZE.-sENVIRONMENT=web: Menghapus kode runtime Node.js/shell untuk meminimalkan ukuran paket.-sSTRICT: Menerapkan default Emscripten modern dan gagal pada flag yang tidak digunakan lagi.-sALLOW_MEMORY_GROWTH: Memungkinkan heap memori linear WebAssembly diperluas secara dinamis saat mengalokasikan memori.-Oz(atau-O3) +-flto: Mengoptimalkan ukuran payload minimal dalam build rilis.
2. Menghindari pemblokiran thread utama
Jika panggilan ke WebAssembly kemungkinan akan memerlukan waktu yang signifikan (yaitu lebih dari beberapa milidetik), panggilan tersebut tidak boleh dipanggil di thread browser utama.
Untuk menghindari menjalankan kode tersebut di thread browser utama, ada beberapa kemungkinan pendekatan:
Jalankan seluruh program WebAssembly di Web Worker. Ini sering kali merupakan solusi paling sederhana karena tidak melibatkan penyiapan akses SharedArrayBuffer, atau mengubah sumber program.
Gunakan pthreads atau Wasm Workers. Hal ini memungkinkan pekerjaan dibagikan ke banyak worker, tetapi memerlukan akses SharedArrayBuffer yang dapat melibatkan penambahan header HTTP COOP/COEP.
Lakukan refaktorisasi kode C/C++ untuk menghindari panggilan yang berjalan lama. Misalnya, membagi pekerjaan menjadi bagian-bagian kecil yang dapat dipanggil dari
requestIdleCallback.
3. Perhatikan peringatan dan error runtime
Pastikan Anda benar-benar menguji program WebAssembly yang dihasilkan dan tidak ada peringatan atau error yang dihasilkan di konsol.
Bangun dan jalankan program dengan -sASSERTIONS diaktifkan dan perbaiki kegagalan runtime yang dihasilkan.
4. Hindari penautan dinamis jika memungkinkan
Emscripten berfungsi paling baik dengan library statis (.a). Pustaka bersama (.so,
.dylib, .dll) kurang berguna dalam deployment browser dan dapat mempersulit
hal-hal yang tidak perlu.
5. Mem-porting Library C/C++ yang Ada
Saat mengintegrasikan library C/C++ yang ada dengan sistem build standar:
Project CMake
Gabungkan perintah CMake dengan emcmake dan emmake:
mkdir build && cd build
emcmake cmake .. -DCMAKE_BUILD_TYPE=Release
emmake make
Project Autoconf/Make
Gunakan emconfigure untuk menetapkan target toolchain kompilasi silang:
emconfigure ./configure --host=wasm32-unknown-emscripten --disable-shared
emmake make