ProHoster > Blogs > AdministrÄcija > KÄ mÄs izmantojÄm WebAssembly, lai 20 reizes paÄtrinÄtu tÄ«mekļa lietojumprogrammu
KÄ mÄs izmantojÄm WebAssembly, lai 20 reizes paÄtrinÄtu tÄ«mekļa lietojumprogrammu
Å ajÄ rakstÄ ir apskatÄ«ts gadÄ«jums, kÄ paÄtrinÄt pÄrlÅ«kprogrammas lietojumprogrammu, aizstÄjot JavaScript aprÄÄ·inus ar WebAssembly.
WebAssembly - kas tas ir?
ÄŖsÄk sakot, Å”is ir binÄrais instrukciju formÄts uz steku balstÄ«tai virtuÄlajai maŔīnai. Wasm (Ä«sais nosaukums) bieži sauc par programmÄÅ”anas valodu, bet tÄ nav. Instrukcijas formÄts tiek izpildÄ«ts pÄrlÅ«kprogrammÄ kopÄ ar JavaScript.
Ir svarÄ«gi, lai WebAssembly varÄtu iegÅ«t, apkopojot avotus tÄdÄs valodÄs kÄ C/C++, Rust, Go. Å eit tiek izmantota statistiskÄ maŔīnrakstÄ«Å”ana un tÄ sauktais plakanÄs atmiÅas modelis. Kods, kÄ minÄts iepriekÅ”, tiek saglabÄts kompaktÄ binÄrÄ formÄtÄ, padarot to gandrÄ«z tikpat Ätru kÄ lietojumprogrammas palaiÅ”anu, izmantojot komandrindu. Å Ä«s iespÄjas ir veicinÄjuÅ”as WebAssembly popularitÄtes pieaugumu.
PaÅ”laik Wasm tiek izmantots daudzÄs lietojumprogrammÄs, sÄkot no spÄlÄm, piemÄram, Doom 3, lÄ«dz tÄ«meklÄ« pÄrnÄsÄtÄm lietojumprogrammÄm, piemÄram, Autocad un Figma. Wasm tiek izmantots arÄ« tÄdÄs jomÄs kÄ skaitļoÅ”ana bez serveriem.
Å ajÄ rakstÄ ir sniegts piemÄrs Wasm izmantoÅ”anai, lai paÄtrinÄtu analÄ«tikas tÄ«mekļa pakalpojumu. SkaidrÄ«bas labad mÄs paÅÄmÄm darba lietojumprogrammu, kas rakstÄ«ta C valodÄ, kas ir apkopota WebAssembly. RezultÄts tiks izmantots, lai aizstÄtu JS sadaļas ar zemu veiktspÄju.
Lietojumprogrammu transformÄcija
PiemÄrÄ tiks izmantots pÄrlÅ«kprogrammas serviss fastq.bio, kas paredzÄts Ä£enÄtiÄ·iem. RÄ«ks ļauj novÄrtÄt DNS sekvencÄÅ”anas (atÅ”ifrÄÅ”anas) kvalitÄti.
Å eit ir lietojumprogrammas darbÄ«bas piemÄrs:
Procesa detaļÄs nav vÄrts iedziļinÄties, jo tÄs ir diezgan sarežģītas nespeciÄlistiem, taÄu Ä«si sakot, zinÄtnieki var izmantot iepriekÅ” minÄto infografiku, lai saprastu, vai DNS sekvencÄÅ”anas process noritÄja gludi un kÄdas problÄmas radÄs.
Å im pakalpojumam ir alternatÄ«vas, darbvirsmas programmas. TaÄu fastq.bio ļauj paÄtrinÄt darbu, vizualizÄjot datus. VairumÄ citu gadÄ«jumu jums ir jÄspÄj strÄdÄt ar komandrindu, taÄu ne visiem Ä£enÄtiÄ·iem ir vajadzÄ«gÄ pieredze.
Viss darbojas vienkÄrÅ”i. Ievade ir dati, kas tiek parÄdÄ«ti teksta faila formÄ. Å o failu Ä£enerÄ specializÄti secÄ«bas rÄ«ki. FailÄ ir DNS sekvenÄu saraksts un katra nukleotÄ«da kvalitÄtes rÄdÄ«tÄjs. Faila formÄts ir .fastq, tÄpÄc pakalpojums ieguva savu nosaukumu.
IevieŔana JavaScript
Pirmais lietotÄja solis, strÄdÄjot ar fastq.bio, ir izvÄlÄties atbilstoÅ”o failu. Izmantojot objektu Fails, lietojumprogramma nolasa nejauÅ”u datu paraugu no faila un apstrÄdÄ Å”o partiju. JavaScript uzdevums Å”eit ir veikt vienkÄrÅ”as virkÅu darbÄ«bas un aprÄÄ·inÄt metriku. Viens no tiem ir nukleotÄ«du A, C, G un T skaits uz dažÄdiem DNS fragmentiem.
PÄc nepiecieÅ”amo rÄdÄ«tÄju aprÄÄ·inÄÅ”anas tie tiek vizualizÄti, izmantojot Plotly.js, un pakalpojums sÄk strÄdÄt ar jaunu datu paraugu. SadalÄ«Å”ana tiek veikta, lai uzlabotu UX kvalitÄti. Ja strÄdÄjat ar visiem datiem vienlaikus, process uz kÄdu laiku iesaldÄsies, jo faili ar secÄ«bas rezultÄtiem aizÅem simtiem gigabaitu faila vietas. Pakalpojums Åem datu gabalus, kuru izmÄrs ir no 0,5 lÄ«dz 1 MB, un strÄdÄ ar tiem soli pa solim, veidojot grafiskos datus.
Tas darbojas Å”Ädi:
SarkanajÄ taisnstÅ«rÄ« ir virknes transformÄcijas algoritms vizualizÄcijas iegÅ«Å”anai. Å Ä« ir skaitļoÅ”anas ziÅÄ ietilpÄ«gÄkÄ pakalpojuma daļa. Ir vÄrts mÄÄ£inÄt to aizstÄt ar Wasm.
WebAssembly testÄÅ”ana
Lai novÄrtÄtu Wasm izmantoÅ”anas iespÄjas, projekta komanda sÄka meklÄt gatavus risinÄjumus QC metrikas (QC - kvalitÄtes kontrole) izveidei, pamatojoties uz fastq failiem. MeklÄÅ”ana tika veikta starp rÄ«kiem, kas rakstÄ«ti C, C++ vai Rust valodÄ, lai bÅ«tu iespÄjams pÄrsÅ«tÄ«t kodu uz WebAssembly. TurklÄt instrumentam nevajadzÄtu bÅ«t āneapstrÄdÄtamā, bija nepiecieÅ”ams zinÄtnieku jau pÄrbaudÄ«ts pakalpojums.
RezultÄtÄ izvÄle tika izdarÄ«ta par labu seqtk. Lietojumprogramma ir diezgan populÄra, tÄ ir atvÄrtÄ pirmkoda, avota valoda ir C.
Pirms konvertÄÅ”anas uz Wasm, ir vÄrts aplÅ«kot seqtk kompilÄcijas principu darbvirsmai. SaskaÅÄ ar Makefile, lÅ«k, kas jums nepiecieÅ”ams:
TÄ vietÄ, lai izvadÄ«tu binÄrÄ failÄ, Emscripten izmanto .wasm un .js, lai Ä£enerÄtu failus, kas tiek izmantoti WebAssemby moduļa palaiÅ”anai.
USE_ZLIB karodziÅÅ” tiek izmantots, lai atbalstÄ«tu zlib bibliotÄku. BibliotÄka ir izplatÄ«ta un pÄrnesta uz WebAssembly, un Emscripten to iekļauj projektÄ.
Emscrippten virtuÄlÄ failu sistÄma ir aktivizÄta. Å is POSIX lÄ«dzÄ«ga FS, kas darbojas pÄrlÅ«kprogrammas RAM. Kad lapa tiek atsvaidzinÄta, atmiÅa tiek notÄ«rÄ«ta.
Lai saprastu, kÄpÄc ir nepiecieÅ”ama virtuÄlÄ failu sistÄma, ir vÄrts salÄ«dzinÄt veidu, kÄ palaižat seqtk no komandrindas ar veidu, kÄ palaižat kompilÄtu WebAssembly moduli.
# On the command line
$ ./seqtk fqchk data.fastq
# In the browser console
> Module.callMain(["fqchk", "data.fastq"])
Piekļuve virtuÄlajai failu sistÄmai ir nepiecieÅ”ama, lai nepÄrrakstÄ«tu seqtk virknei, nevis faila ievadei. Å ajÄ gadÄ«jumÄ datu fragments tiek parÄdÄ«ts kÄ data.fastq fails virtuÄlajÄ FS ar izsaukumu uz main() seqtk.
LÅ«k, jaunÄ arhitektÅ«ra:
AttÄlÄ parÄdÄ«ts, ka aprÄÄ·inu vietÄ galvenajÄ pÄrlÅ«kprogrammas pavedienÄ Web Workers. Å Ä« metode ļauj veikt aprÄÄ·inus fona pavedienÄ, neietekmÄjot pÄrlÅ«kprogrammas reakciju. WebWorker kontrolieris palaiž Worker, pÄrvaldot tÄ mijiedarbÄ«bu ar galveno pavedienu.
Komanda seqtk tiek palaista, izmantojot Worker uzstÄdÄ«tajÄ failÄ. PÄc izpildes pabeigÅ”anas Darbinieks uzrÄda rezultÄtu solÄ«juma veidÄ. Kad galvenais pavediens saÅem ziÅojumu, rezultÄts tiek izmantots, lai atjauninÄtu grafikus. Un tÄ tÄlÄk vairÄkÄs iterÄcijÄs.
KÄ ar WebAssembly veiktspÄju?
Lai novÄrtÄtu veiktspÄjas izmaiÅas, projekta komanda izmantoja parametru nolasÄ«Å”anas darbÄ«bas sekundÄ. InteraktÄ«vo grafiku izveidei nepiecieÅ”amais laiks netiek Åemts vÄrÄ, jo abÄs implementÄcijÄs tiek izmantots JavaScript.
Izmantojot gatavu risinÄjumu, veiktspÄjas pieaugums bija deviÅas reizes.
Tas ir lielisks rezultÄts, taÄu, kÄ izrÄdÄs, ir iespÄja arÄ« to optimizÄt. Fakts ir tÄds, ka seqtk neizmanto lielu skaitu QC analÄ«zes rezultÄtu, tÄpÄc tos var izdzÄst. Ja jÅ«s to darÄt, rezultÄts uzlabojas 13 reizes, salÄ«dzinot ar JS.
Tas tika panÄkts, vienkÄrÅ”i komentÄjot printf () komandas.
Bet tas vÄl nav viss. Fakts ir tÄds, ka Å”ajÄ posmÄ fastq.bio saÅem analÄ«zes rezultÄtus, izsaucot dažÄdas C funkcijas. Katra no tÄm aprÄÄ·ina savu raksturlielumu kopu, lai katrs faila fragments tiktu nolasÄ«ts divreiz.
Lai apietu Å”o problÄmu, tika nolemts apvienot divas funkcijas vienÄ. RezultÄtÄ produktivitÄte pieauga 20 reizes.
Ir vÄrts atzÄ«mÄt, ka tik izcilu rezultÄtu ne vienmÄr var sasniegt. Dažos gadÄ«jumos veiktspÄja samazinÄsies, tÄpÄc ir vÄrts izvÄrtÄt katru gadÄ«jumu.
NoslÄgumÄ mÄs varam teikt, ka Wasm patieÅ”Äm sniedz iespÄju uzlabot lietojumprogrammu veiktspÄju, taÄu jums tas ir jÄizmanto saprÄtÄ«gi.