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".
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:
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:
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:
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:
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.
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.
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.
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.