Tīmekļa veiktspējas paātrināšana ar WebAssembly un C++
Kad JavaScript nav pietiekami ātrs
JavaScript dinamiskai valodai ir ievērojami ātrs. Taču aprēķinu intensīviem uzdevumiem — attēlu apstrādei, fizikas simulācijām, datu saspiešanai, kriptogrāfiskām operācijām — tas nonāk pie griestiem. Tieši tur parādās WebAssembly (WASM).
WASM ir binārs instrukciju formāts, kas pārlūkprogrammā darbojas gandrīz dabīgā ātrumā. Ja Jūs jau pārzināt C++, savu esošo kodu varat kompilēt tieši WASM formātā.
Kompilēšanas konveijers
Rezultātā tiek iegūts .wasm binārais fails un JavaScript piesaistes fails, kas apstrādā ielādi un atmiņas pārvaldību.
WASM izsaukšana no JavaScript
Robeža starp JavaScript un WASM ir vienmērīga. Jūs nododat datus, saņemat rezultātus, bet pārējo apstrādā pārlūkprogramma.
Reāli veiktspējas ieguvumi
Mūsu salīdzinošajos testos attēlu apstrādes uzdevumiem:
| Operācija | JavaScript | WASM (C++) | Paātrinājums |
|---|---|---|---|
| 4K attēla mēroga maiņa | 340 ms | 45 ms | 7,5× |
| Izpludināšanas filtra pielietošana | 280 ms | 32 ms | 8,7× |
| JSON parsēšana (liels) | 120 ms | 18 ms | 6,6× |
Šie nav sintētiski testi — tie nāk no reālām ražošanas darba slodzēm.
Kad izmantot WASM
WASM izceļas šādos uzdevumos:
- CPU intensīvi algoritmi — kārtošana, meklēšana, saspiešana
- Skaitliskie aprēķini — finanšu aprēķini, zinātniskā modelēšana
- Mediju apstrāde — attēlu manipulācijas, audio kodēšana
- Esošu C/C++ bibliotēku pārnešana uz tīmekli
WASM nav ideāls DOM manipulācijām vai vienkāršiem API izsaukumiem — to JavaScript paveic tikpat labi.
CMake integrācija
Lielākiem C++ projektiem mēs izmantojam CMake kopā ar Emscripten:
Info
Nākotne
Ar WASI (WebAssembly System Interface) un komponentu modeļa priekšlikumiem WASM paplašinās ārpus pārlūkprogrammas. Tas pats C++ kods, kas šodien darbojas Jūsu tīmekļa lietotnē, rīt varētu darboties serveros, malas funkcijās un IoT ierīcēs.
On This Page