Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Dan l-artikolu jiddiskuti każ biex titħaffef applikazzjoni tal-browser billi tissostitwixxi l-kalkoli JavaScript ma 'WebAssembly.

WebAssembly - x'inhu?

Fil-qosor, dan huwa format ta 'struzzjoni binarja għal magna virtwali bbażata fuq munzell. Wasm (isem qasir) spiss jissejjaħ lingwa ta 'programmar, iżda mhuwiex. Il-format tal-istruzzjoni jiġi esegwit fil-browser flimkien ma 'JavaScript.

Huwa importanti li WebAssembly jista 'jinkiseb billi jiġu kkompilati sorsi f'lingwi bħal C/C++, Rust, Go. Hawnhekk jintużaw it-tajpjar statistiku u l-hekk imsejjaħ mudell tal-memorja fissa. Il-kodiċi, kif imsemmi hawn fuq, huwa maħżun f'format binarju kompatt, li jagħmilha kważi malajr daqs it-tħaddim tal-applikazzjoni bl-użu tal-linja tal-kmand. Dawn il-kapaċitajiet wasslu għat-tkabbir tal-popolarità tal-WebAssembly.

Infakkrukom: għall-qarrejja kollha ta '"Habr" - skont ta' 10 rublu meta tirreġistra fi kwalunkwe kors ta 'Skillbox billi tuża l-kodiċi promozzjonali "Habr".

Skillbox jirrakkomanda: Kors prattiku "Mobile Developer PRO".

Bħalissa, Wasm jintuża f'ħafna applikazzjonijiet, minn logħob bħal Doom 3 għal applikazzjonijiet portati fuq il-web bħal Autocad u Figma. Wasm jintuża wkoll f'oqsma bħall-kompjuters mingħajr server.

Dan l-artikolu jipprovdi eżempju ta 'użu ta' Wasm biex iħaffef servizz tal-web analitiku. Għaċ-ċarezza, ħadna applikazzjoni ta' ħidma miktuba f'Ċ, li hija miġbura f'WebAssembly. Ir-riżultat se jintuża biex jissostitwixxi sezzjonijiet ta' JS li ma jagħmlux tajjeb.

Trasformazzjoni tal-Applikazzjoni

L-eżempju se juża s-servizz tal-browser fastq.bio, li huwa maħsub għall-ġenetiki. L-għodda tippermettilek tevalwa l-kwalità tas-sekwenzjar tad-DNA (id-deċifrar).

Hawn eżempju tal-applikazzjoni fl-azzjoni:

Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Id-dettalji tal-proċess mhumiex ta 'min jidħol fihom peress li huma pjuttost kumplessi għal dawk li mhumiex speċjalisti, iżda fil-qosor, ix-xjenzati jistgħu jużaw l-infografija ta' hawn fuq biex jifhmu jekk il-proċess tas-sekwenzjar tad-DNA marx bla xkiel u liema problemi qamu.

Dan is-servizz għandu alternattivi, programmi desktop. Iżda fastq.bio jippermettilek li tħaffef ix-xogħol tiegħek billi viżwalizza d-data. Fil-biċċa l-kbira tal-każijiet l-oħra, trid tkun kapaċi taħdem mal-linja tal-kmand, iżda mhux il-ġenetiki kollha għandhom l-esperjenza meħtieġa.

Kollox jaħdem sempliċiment. L-input huwa data ppreżentata fil-forma ta' fajl ta' test. Dan il-fajl huwa ġġenerat minn għodod speċjalizzati tas-sekwenzjar. Il-fajl fih lista ta' sekwenzi tad-DNA u punteġġ ta' kwalità għal kull nukleotide. Il-format tal-fajl huwa .fastq, u huwa għalhekk li s-servizz kiseb ismu.

Implimentazzjoni f'JavaScript

L-ewwel pass ta 'l-utent meta jaħdem ma' fastq.bio huwa li tagħżel il-fajl xieraq. Bl-użu tal-oġġett File, l-applikazzjoni taqra kampjun każwali ta' dejta minn fajl u tipproċessa dak il-lott. Ix-xogħol ta' JavaScript hawnhekk huwa li jwettaq operazzjonijiet sempliċi ta' string u jikkalkula l-metriċi. Waħda minnhom hija n-numru ta 'nukleotidi A, C, G u T fuq frammenti tad-DNA differenti.

Wara li jiġu kkalkulati l-indikaturi meħtieġa, huma viżwalizzati bl-użu ta 'Plotly.js, u s-servizz jibda jaħdem b'kampjun ta' dejta ġdid. It-tqattigħ isir biex titjieb il-kwalità tal-UX. Jekk taħdem mad-dejta kollha f'daqqa, il-proċess jiffriża għal xi żmien, peress li l-fajls bir-riżultati tas-sekwenzjar jieħdu mijiet ta 'gigabytes ta' spazju għall-fajls. Is-servizz jieħu biċċiet ta 'dejta li jvarjaw fid-daqs minn 0,5 sa 1 MB u jaħdem magħhom pass pass, u jibni dejta grafika.

Hekk jaħdem:

Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Ir-rettangolu aħmar fih l-algoritmu tat-trasformazzjoni tal-istring għall-kisba tal-viżwalizzazzjoni. Din hija l-aktar parti komputazzjoni intensiva tas-servizz. Ta’ min jipprova tibdilha b’Wasm.

Ittestjar tal-WebAssembly

Biex tevalwa l-possibbiltà li tuża Wasm, it-tim tal-proġett beda jfittex soluzzjonijiet lesti għall-ħolqien ta 'metriċi QC (QC - kontroll tal-kwalità) ibbażati fuq fajls fastq. It-tfittxija saret fost għodod miktuba f'C, C++ jew Rust, sabiex ikun possibbli li l-kodiċi jiġi port għal WebAssembly. Barra minn hekk, l-għodda m'għandhiex tkun "prima"; kien meħtieġ servizz li kien diġà ġie ttestjat mix-xjenzati.

Bħala riżultat, l-għażla saret favur seqtk. L-applikazzjoni hija popolari pjuttost, hija open-source, il-lingwa tas-sors hija C.

Qabel ma tikkonverti għal Wasm, ta 'min iħares lejn il-prinċipju ta' kumpilazzjoni ta 'seqtk għad-desktop. Skont il-Makefile, hawn dak li għandek bżonn:

# Compile to binary
$ gcc seqtk.c 
   -o seqtk 
   -O2 
   -lm 
   -lz

Fil-prinċipju, tista 'tikkompila seqtk billi tuża Emscripten. Jekk ma jkunx hemm, nagħmlu tajjeb. Immaġini Docker.

$ docker pull robertaboukhalil/emsdk:1.38.26
$ docker run -dt --name wasm-seqtk robertaboukhalil/emsdk:1.38.26

Jekk mixtieq Tista 'tiġbor it yourself, iżda jieħu ż-żmien.

Ġewwa kontenitur, tista' faċilment tuża emcc bħala alternattiva għal gcc:

# Compile to WebAssembly
$ emcc seqtk.c 
    -o seqtk.js 
    -O2 
    -lm 
    -s USE_ZLIB=1 
    -s FORCE_FILESYSTEM=1

Bidliet minimi:

Minflok ma joħroġ għal fajl binarju, Emscripten juża .wasm u .js biex jiġġenera l-fajls, li jintuża biex iħaddem il-modulu WebAssemby.

Il-bandiera USE_ZLIB tintuża biex tappoġġja l-librerija zlib. Il-librerija ġiet imqassma u trasferita għal WebAssembly, u Emscripten tinkludiha fil-proġett.

Is-sistema tal-fajls virtwali Emscriptpten hija attivata. Dan FS bħal POSIX, taħdem fir-RAM ġewwa l-browser. Meta l-paġna tiġi aggornata, il-memorja titneħħa.

Biex tifhem għaliex hija meħtieġa sistema ta 'fajls virtwali, ta' min iqabbel il-mod kif tmexxi seqtk mil-linja tal-kmand mal-mod kif tmexxi modulu WebAssembly ikkumpilat.

# On the command line
$ ./seqtk fqchk data.fastq
 
# In the browser console
> Module.callMain(["fqchk", "data.fastq"])

Il-kisba ta 'aċċess għas-sistema tal-fajls virtwali hija meħtieġa sabiex ma terġax tikteb seqtk għal string aktar milli input ta' fajl. F'dan il-każ, il-framment tad-dejta jintwera bħala fajl data.fastq fl-FS virtwali b'sejħa għal main() seqtk fuqha.

Hawn l-arkitettura l-ġdida:

Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Il-figura turi li minflok il-kalkoli fil-ħajt prinċipali tal-browser, WebWorkers. Dan il-metodu jippermettilek li twettaq kalkoli f'ħajta fl-isfond mingħajr ma taffettwa r-rispons tal-browser. Ukoll, il-kontrollur WebWorker jibda l-Ħaddiem, jimmaniġġja l-interazzjoni tiegħu mal-ħajt prinċipali.

Il-kmand seqtk jitmexxa bl-użu ta' Worker fuq il-fajl immuntat. Wara t-tlestija tal-eżekuzzjoni, il-Ħaddiem jipproduċi riżultat fil-forma ta' Wegħda. Meta messaġġ jiġi riċevut mill-ħajt prinċipali, ir-riżultat jintuża biex taġġorna l-grafiċi. U l-bqija f'diversi iterazzjonijiet.

Xi ngħidu dwar il-prestazzjoni tal-WebAssembly?

Sabiex jevalwa l-bidla fil-prestazzjoni, it-tim tal-proġett uża l-operazzjonijiet tal-qari għal kull parametru sekondarju. Iż-żmien li tieħu biex jinbnew graffs interattivi ma jitqiesx peress li ż-żewġ implimentazzjonijiet jużaw JavaScript.

Meta tuża s-soluzzjoni out-of-the-box, iż-żieda fil-prestazzjoni kienet disa 'darbiet.

Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Dan huwa riżultat eċċellenti, iżda, kif jirriżulta, hemm opportunità biex jiġi ottimizzat ukoll. Il-fatt hu li numru kbir ta 'riżultati ta' analiżi QC mhumiex użati minn seqtk, u għalhekk jistgħu jitħassru. Jekk tagħmel dan, ir-riżultat jitjieb bi 13-il darba meta mqabbel ma 'JS.

Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Dan inkiseb billi sempliċement ikkummenta l-kmandi printf().

Imma dan mhux kollox. Il-fatt hu li f'dan l-istadju, fastq.bio jirċievi r-riżultati tal-analiżi billi jsejjaħ funzjonijiet C differenti. Kull wieħed minnhom jikkalkula s-sett ta 'karatteristiċi tiegħu stess, sabiex kull framment tal-fajl jinqara darbtejn.

Sabiex tiġi evitata din il-problema, ġie deċiż li jingħaqdu żewġ funzjonijiet f'waħda. Bħala riżultat, il-produttività żdiedet 20 darba.

Kif użajna WebAssembly biex tħaffef applikazzjoni tal-web 20 darba

Ta 'min jinnota li riżultat eċċellenti bħal dan mhux dejjem jista' jinkiseb. F'xi każijiet, il-prestazzjoni se tonqos, għalhekk ta 'min jevalwa kull każ.

Bħala konklużjoni, nistgħu ngħidu li Wasm jipprovdi opportunità biex ittejjeb il-prestazzjoni tal-applikazzjoni, iżda trid tużaha bil-għaqal.

Skillbox jirrakkomanda:

Sors: www.habr.com

Żid kumment