Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Nkhaniyi ikukamba za nkhani yofulumizitsa ntchito ya msakatuli posintha mawerengedwe a JavaScript ndi WebAssembly.

WebAssembly - ndichiyani?

Mwachidule, iyi ndi njira yamalangizo a binary pamakina opangidwa ndi stack. Wasm (dzina lalifupi) nthawi zambiri amatchedwa chinenero cha mapulogalamu, koma sichoncho. Mawonekedwe a malangizo amachitidwa mu msakatuli pamodzi ndi JavaScript.

Ndikofunikira kuti WebAssembly ipezeke popanga magwero azilankhulo monga C/C++, Rust, Go. Apa kulemba ziwerengero ndi zomwe zimatchedwa flat memory model zimagwiritsidwa ntchito. Khodiyo, monga tafotokozera pamwambapa, imasungidwa mumtundu wophatikizika wa binary, ndikupangitsa kuti ikhale yofulumira ngati kugwiritsa ntchito pulogalamuyo pogwiritsa ntchito mzere wolamula. Kuthekera uku kwadzetsa kutchuka kwa WebAssembly.

Tikukukumbutsani: kwa owerenga onse a Habr - kuchotsera ma ruble 10 polembetsa maphunziro aliwonse a Skillbox pogwiritsa ntchito nambala yotsatsira ya Habr.

Skillbox imalimbikitsa: Njira yothandiza "Mobile Developer PRO".

Pakadali pano, Wasm imagwiritsidwa ntchito pamapulogalamu ambiri, kuyambira masewera ngati Doom 3 kupita ku mapulogalamu opezeka pa intaneti monga Autocad ndi Figma. Wasm imagwiritsidwanso ntchito m'malo monga makompyuta opanda seva.

Nkhaniyi ikupereka chitsanzo chogwiritsa ntchito Wasm kufulumizitsa ntchito yapaintaneti ya analytics. Kuti timveke bwino, tinatenga ntchito yolembedwa mu C, yomwe imapangidwa ku WebAssembly. Zotsatira zake zidzagwiritsidwa ntchito m'malo mwa magawo osachita bwino a JS.

Kusintha kwa Ntchito

Chitsanzocho chidzagwiritsa ntchito msakatuli wa fastq.bio, womwe umapangidwira akatswiri a chibadwa. Chidachi chimakupatsani mwayi wowunika momwe DNA imayendera (kutanthauzira).

Nachi chitsanzo cha zomwe zikugwiritsidwa ntchito:

Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Tsatanetsatane wa ndondomekoyi sizoyenera kulowamo chifukwa ndizovuta kwambiri kwa omwe si akatswiri, koma mwachidule, asayansi angagwiritse ntchito infographic yomwe ili pamwambayi kuti amvetse ngati ndondomeko ya DNA idayenda bwino komanso mavuto omwe adabuka.

Ntchitoyi ili ndi njira zina, mapulogalamu apakompyuta. Koma fastq.bio imakupatsani mwayi wofulumizitsa ntchito yanu poyang'ana deta. Nthawi zambiri, muyenera kugwira ntchito ndi mzere wolamula, koma si onse a geneticist omwe ali ndi chidziwitso chofunikira.

Zonse zimagwira ntchito mosavuta. Zomwe zalowetsedwa ndi data yomwe imaperekedwa ngati fayilo yamawu. Fayiloyi imapangidwa ndi zida zapadera zotsatirira. Fayiloyi ili ndi mndandanda wa ma DNA otsatizana ndi mavoti apamwamba pa nucleotide iliyonse. Mafayilo amafayilo ndi .fastq, chifukwa chake ntchitoyo idatenga dzina lake.

Kukonzekera mu JavaScript

Gawo loyamba la wogwiritsa ntchito pogwira ntchito ndi fastq.bio ndikusankha fayilo yoyenera. Pogwiritsa ntchito Fayilo chinthu, pulogalamuyo imawerengera deta yachisawawa kuchokera pafayilo ndi njira zomwe batch. Ntchito ya JavaScript apa ndikungopanga zingwe zosavuta ndikuwerengera ma metric. Chimodzi mwa izo ndi chiwerengero cha nucleotides A, C, G ndi T pa zidutswa za DNA.

Pambuyo powerengera zizindikiro zofunikira, zikuwonetsedwa pogwiritsa ntchito Plotly.js, ndipo utumiki umayamba kugwira ntchito ndi deta yatsopano. Chunking imachitidwa kuti muwonjezere mtundu wa UX. Ngati mutagwira ntchito ndi deta yonse nthawi imodzi, ndondomekoyi idzaundana kwa kanthawi, popeza mafayilo omwe ali ndi zotsatira zotsatizana amatenga mazana a gigabytes a fayilo. Ntchitoyi imatenga zidutswa za data kuyambira 0,5 mpaka 1 MB ndipo imagwira nawo ntchito pang'onopang'ono, kupanga deta yojambula.

Umu ndi momwe zimagwirira ntchito:

Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Rectangle yofiyira ili ndi njira yosinthira zingwe kuti muwonekere. Ili ndiye gawo lalikulu kwambiri lautumiki. Ndikoyenera kuyesa kuyisintha ndi Wasm.

Kuyesa WebAssembly

Kuti awone kuthekera kogwiritsa ntchito Wasm, gulu la polojekitiyo linayamba kufunafuna mayankho okonzeka opangira ma metrics a QC (QC - control quality) pogwiritsa ntchito mafayilo a fastq. Kusakaku kunachitika pakati pa zida zolembedwa mu C, C ++ kapena Rust, kotero kuti zinali zotheka kutumiza kachidindo ku WebAssembly. Kuphatikiza apo, chidacho sichiyenera kukhala "chaiwisi"; ntchito yomwe idayesedwa kale ndi asayansi idafunikira.

Zotsatira zake, chisankhocho chinapangidwa mokomera seqtk. Kugwiritsa ntchito ndikotchuka kwambiri, ndikotsegula, chilankhulo choyambira ndi C.

Musanatembenukire ku Wasm, ndikofunikira kuyang'ana mfundo yophatikizira ya seqtk pakompyuta. Malinga ndi Makefile, izi ndi zomwe mukufuna:

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

M'malo mwake, mutha kupanga seqtk pogwiritsa ntchito Emscripten. Ngati palibe, timapanga. Chithunzi cha Docker.

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

Ngati mukufuna Mutha kusonkhanitsa nokha, koma zimatenga nthawi.

Mkati mwa chidebe, mutha kugwiritsa ntchito emcc mosavuta m'malo mwa gcc:

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

Zosintha zochepa:

M'malo motulutsa fayilo ya binary, Emscripten amagwiritsa ntchito .wasm ndi .js kupanga mafayilo, omwe amagwiritsidwa ntchito poyendetsa gawo la WebAssemby.

Mbendera ya USE_ZLIB imagwiritsidwa ntchito pothandizira laibulale ya zlib. Laibulale yagawidwa ndikutumizidwa ku WebAssembly, ndipo Emscripten ikuphatikiza mu projekiti.

The Emscrippten virtual file system imatsegulidwa. Izi POSIX ngati FS, ikuyenda mu RAM mkati mwa msakatuli. Tsamba likatsitsimutsidwa, kukumbukira kumachotsedwa.

Kuti mumvetse chifukwa chake fayilo yeniyeni ikufunika, ndiyenera kufananiza momwe mumathamangira seqtk kuchokera pamzere wolamula ndi momwe mumayendetsera gawo la WebAssembly.

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

Kupeza mwayi wamafayilo owoneka bwino ndikofunikira kuti musalembenso seqtk pa chingwe m'malo molowetsa mafayilo. Pankhaniyi, chidutswa cha data chikuwonetsedwa ngati fayilo ya data.fastq mu FS yeniyeni ndi kuyitana kwa main() seqtk pa izo.

Nayi zomanga zatsopano:

Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Chithunzichi chikuwonetsa kuti m'malo mowerengera mumsakatuli wamkulu, WebWorkers. Njirayi imakupatsani mwayi wowerengera mu ulusi wakumbuyo popanda kukhudza kuyankha kwa msakatuli. Chabwino, woyang'anira WebWorker amayambitsa Wogwira Ntchito, kuyang'anira kuyanjana kwake ndi ulusi waukulu.

Lamulo la seqtk limayendetsedwa pogwiritsa ntchito Worker pa fayilo yokwera. Akamaliza kuphedwa, Wogwira ntchito amatulutsa zotsatira mu mawonekedwe a Lonjezo. Uthenga ukalandiridwa ndi ulusi waukulu, zotsatira zake zimagwiritsidwa ntchito kukonzanso ma graph. Ndi zina zotero mumabwereza angapo.

Nanga bwanji WebAssembly performance?

Pofuna kuyesa kusintha kwa ntchito, gulu la polojekiti linagwiritsa ntchito ntchito zowerengera pa sekondi imodzi. Nthawi yomwe imatengera kupanga ma graph olumikizana sikumaganiziridwa chifukwa zonse ziwiri zimagwiritsa ntchito JavaScript.

Mukamagwiritsa ntchito yankho la kunja kwa bokosi, kuwonjezeka kwa ntchito kunali kasanu ndi kamodzi.

Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Izi ndi zotsatira zabwino kwambiri, koma, monga momwe zimakhalira, pali mwayi wowonjezeranso. Chowonadi ndi chakuti zotsatira zambiri za kusanthula kwa QC sizigwiritsidwa ntchito ndi seqtk, kotero zikhoza kuchotsedwa. Mukachita izi, zotsatira zake zimakhala bwino nthawi 13 poyerekeza ndi JS.

Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Izi zidatheka pongopereka ndemanga pamalamulo a printf().

Koma si zokhazo. Chowonadi ndi chakuti panthawiyi, fastq.bio imalandira zotsatira zowunikira poyitana ntchito zosiyanasiyana za C. Aliyense wa iwo amawerengera mawonekedwe ake, kotero kuti chidutswa chilichonse cha fayilo chiwerengedwa kawiri.

Pofuna kuthana ndi vutoli, adaganiza zophatikiza ntchito ziwiri kukhala imodzi. Zotsatira zake, zokolola zidawonjezeka ka 20.

Momwe tidagwiritsira ntchito WebAssembly kufulumizitsa kugwiritsa ntchito intaneti nthawi 20

Ndikoyenera kudziwa kuti zotsatira zabwino kwambiri zoterezi sizingakwaniritsidwe nthawi zonse. Nthawi zina, magwiridwe antchito amatsika, chifukwa chake ndikofunikira kuunika mlandu uliwonse.

Pomaliza, titha kunena kuti Wasm imapereka mwayi wowongolera magwiridwe antchito, koma muyenera kuugwiritsa ntchito mwanzeru.

Skillbox imalimbikitsa:

Source: www.habr.com

Kuwonjezera ndemanga