Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Ichi chinyorwa chinokurukura nyaya yekumhanyisa browser application nekutsiva JavaScript kuverenga neWebAssembly.

WebAssembly - chii ichocho?

Muchidimbu, iyi ibhinari yekuraira fomati ye stack-based virtual muchina. Wasm (zita pfupi) inowanzonzi mutauro wepurogiramu, asi haisi. Iyo fomati yekuraira inoitwa mubrowser pamwe neJavaScript.

Izvo zvakakosha kuti WebAssembly inogona kuwanikwa nekunyora masosi mumitauro yakaita seC/C ++, Rust, Go. Pano statistical typing uye inonzi flat memory model inoshandiswa. Iyo kodhi, sezvataurwa pamusoro, inochengetwa mune compact binary fomati, ichiita kuti iite kunge inokurumidza sekumhanyisa application uchishandisa mutsara wekuraira. Aya masimba akatungamira mukukura kwekuzivikanwa kweWebAssembly.

Tinoyeuchidza: kune vese vaverengi veHabr - a 10 ruble mutengo paunenge uchinyoresa mune chero Skillbox kosi uchishandisa iyo Habr promo kodhi.

Skillbox inokurudzira: Nzira inoshanda "Mobile Developer PRO".

Parizvino, Wasm inoshandiswa mumashandisirwo mazhinji, kubva kumitambo yakaita seDoom 3 kuenda kuwebhu-ported application seAutocad uye Figma. Wasm inoshandiswawo munzvimbo dzakadai se serverless computing.

Ichi chinyorwa chinopa muenzaniso wekushandisa Wasm kukurumidza webhu analytics sevhisi. Kuti tijekese, takatora chigadziro chekushanda chakanyorwa muC, icho chinounganidzwa muWebAssembly. Mhedzisiro yacho ichashandiswa kutsiva zvikamu zvisingaite zveJS.

Shanduko Yekushandisa

Muenzaniso uchashandisa iyo fastq.bio browser sevhisi, iyo inoitirwa geneticists. Chishandiso chinokutendera kuti uongorore kunaka kweDNA sequencing (kududzira).

Heino muenzaniso wekushandisa kuri kuita:

Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Iwo mameseji ehurongwa haakodzeri kupinda mauri sezvo akaomesesa kune vasiri nyanzvi, asi muchidimbu, masayendisiti anogona kushandisa iri pamusoro apa infographic kuti anzwisise kana iyo DNA yekutevedzana yakafamba zvakanaka uye ndeapi matambudziko akamuka.

Iyi sevhisi ine zvimwe, zvirongwa zvedesktop. Asi fastq.bio inobvumidza iwe kukurumidzira basa rako nekuona iyo data. Mune zvimwe zviitiko zvakawanda, unofanirwa kukwanisa kushanda nemutsara wekuraira, asi havasi vese geneticists vane ruzivo rwakakosha.

Zvose zvinoshanda zviri nyore. Iko kupinza idata inounzwa muchimiro chefaira remavara. Iyi faira inogadzirwa nehunyanzvi hwekutevedzana maturusi. Iyo faira ine rondedzero yeDNA sequences uye chibodzwa chemhando ye nucleotide yega yega. The file format is .fastq, ndosaka sevhisi yakawana zita rayo.

Kuita muJavaScript

Nhanho yekutanga yemushandisi kana uchishanda ne fastq.bio ndeyekusarudza faira yakakodzera. Uchishandisa iyo Faira chinhu, iyo application inoverenga isingaite yedata kubva kufaira uye maitiro ayo batch. Basa reJavaScript pano nderekuita nyore tambo mashandiro uye kuverenga metrics. Imwe yacho inhamba yema nucleotides A, C, G uye T pazvidimbu zvakasiyana zveDNA.

Mushure mekuverenga zviratidzo zvinodikanwa, ivo vanoonekwa vachishandisa Plotly.js, uye sevhisi inotanga kushanda neyakatsva data data. Iyo chunking inoitwa kuvandudza kunaka kweUX. Kana iwe ukashanda ne data rese kamwechete, maitiro acho achaomesa kwechinguva, sezvo mafaera ane mhedzisiro yekutevedzana anotora mazana emagigabytes epafaira nzvimbo. Iyo sevhisi inotora zvidimbu zve data kubva muhukuru kubva 0,5 kusvika 1 MB uye inoshanda navo nhanho nhanho, ichivaka graphical data.

Aya ndiwo mashandiro ainoita:

Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Rectangle dzvuku ine tambo yekushandura algorithm yekuwana yekuona. Ichi ndicho chikamu chakanyanya kukosha chesevhisi. Zvakakodzera kuedza kuitsiva neWasm.

Kuedza WebAssembly

Kuongorora mukana wekushandisa Wasm, timu yeprojekiti yakatanga kutsvaga yakagadzirira-yakagadzirwa mhinduro dzekugadzira QC metrics (QC - quality control) zvichibva pafastq mafaera. Kutsvaga kwakaitwa pakati pezvishandiso zvakanyorwa muC, C ++ kana Rust, kuitira kuti zvikwanise kuendesa kodhi kuWebAssembly. Pamusoro pezvo, chishandiso hachifanire kunge chiri "chakasvibirira"; sevhisi yaive yatoedzwa nemasainzi yaidiwa.

Nekuda kweizvozvo, sarudzo yakaitwa mukufarira seqtk. Iko kushandiswa kwakakurumbira, yakavhurika-sosi, mutauro unobva C.

Usati watendeukira kuWasm, zvakakodzera kutarisa iyo yekuunganidza musimboti we seqtk yedesktop. Zvinoenderana neMakefile, hezvino izvo zvaunoda:

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

Muchidimbu, unogona kuunganidza seqtk uchishandisa Emscripten. Kana isipo, tinoita. Docker mufananidzo.

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

Kana achida Unogona kuzviunganidza iwe pachako, asi zvinotora nguva.

Mukati memudziyo, unogona nyore kushandisa emcc seimwe nzira kune gcc:

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

Shanduko shoma:

Panzvimbo pekubuditsa kubhinari faira, Emscripten inoshandisa .wasm uye .js kugadzira mafaira, ayo anoshandiswa kufambisa WebAssemby module.

Mureza weUSE_ZLIB unoshandiswa kutsigira zlib raibhurari. Raibhurari yakagoverwa uye yakatakurwa kuWebAssembly, uye Emscripten inoisanganisira mupurojekiti.

Iyo Emscrippten chaiyo faira system inovhurwa. Izvi POSIX-kufanana neFS, inoshanda mu RAM mukati mebrowser. Kana peji racho razorodzwa, ndangariro inocheneswa.

Kuti unzwisise kuti sei virtual file system ichidikanwa, zvakakodzera kuenzanisa nzira yaunomhanya nayo seqtk kubva kumutsetse wekuraira nemabatiro aunoita akaumbwa WebAssembly module.

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

Kuwana mukana weiyo chaiyo faira system kunodiwa kuti usazonyorazve seqtk yetambo pane kupinza faira. Muchiitiko ichi, chidimbu che data chinoratidzwa se data.fastq faira mu FS chaiyo ine call ku main() seqtk pairi.

Heino iyo itsva architecture:

Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Nhamba yacho inoratidza kuti panzvimbo yekuverenga mune main browser thread, WebWorkers. Iyi nzira inobvumidza iwe kuti uite masvomhu mutambo yekumashure usingakanganise kuterera kwebrowser. Zvakanaka, mutongi weWebWorker anotanga Mushandi, achigadzirisa kupindirana kwayo netambo huru.

Mutemo we seqtk unomhanya uchishandisa Worker pane yakakwikwidzwa faira. Mushure mekupedza kuurayiwa, Mushandi anoburitsa mhedzisiro muchimiro cheChipikirwa. Kana meseji yagamuchirwa neshinda huru, mhedzisiro inoshandiswa kugadzirisa magirafu. Uye zvichingodaro mune dzakawanda iterations.

Zvakadini nezveWebAssembly performance?

Kuitira kuongorora shanduko mukuita, timu yeprojekiti yakashandisa mashandiro ekuverenga pasekondi paramita. Iyo nguva inotora kuvaka magirafu anopindirana haina kuverengerwa sezvo ese maitirwo anoshandisa JavaScript.

Paunenge uchishandisa mhinduro yekunze-kwe-bhokisi, kuwedzera kwekuita kwaive kapfumbamwe.

Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Iyi mhedzisiro yakanaka, asi, sezvazvinozoitika, pane mukana wekukwirisa zvakare. Ichokwadi ndechokuti nhamba huru yemigumisiro yekuongorora yeQC haishandiswi ne seqtk, saka inogona kubviswa. Kana iwe ukaita izvi, mhedzisiro inovandudzwa nekagumi nenhatu zvichienzaniswa neJS.

Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Izvo zvakawanikwa nekungopa mhinduro kunze kweiyo printf() mirairo.

Asi handizvo zvoga. Ichokwadi ndechokuti panguva ino, fastq.bio inogamuchira mitsva yekuongorora nekudana mabasa akasiyana-siyana eC. Mumwe nomumwe wavo anoverenga maitiro ayo ega, kuitira kuti chidimbu chimwe nechimwe chefaira chiverengerwe kaviri.

Kuti tigadzirise dambudziko iri, zvakasarudzwa kubatanidza mabasa maviri mune rimwe chete. Nekuda kweizvozvo, kugadzirwa kwakawedzera neka20.

Mashandisiro atakaita WebAssembly kumhanyisa webhu application ka20

Zvakakosha kuziva kuti mugumisiro wakadaro haugone kuwanikwa nguva dzose. Mune zvimwe zviitiko, kuita kunodonha, saka zvakakodzera kuongorora imwe neimwe kesi.

Semhedziso, tinogona kutaura kuti Wasm inopa mukana wekuvandudza mashandiro ekushandisa, asi iwe unofanirwa kuishandisa nehungwaru.

Skillbox inokurudzira:

Source: www.habr.com

Voeg