Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

Kūkākūkā kēia ʻatikala i kahi hihia no ka wikiwiki ʻana i kahi polokalamu kele pūnaewele ma o ka hoʻololi ʻana i nā helu JavaScript me WebAssembly.

WebAssembly - he aha ia?

ʻO ka pōkole, he ʻano aʻoaʻo binary kēia no kahi mīkini virtual i hoʻokumu ʻia. Ua kapa pinepine ʻia ʻo Wasm (inoa pōkole) he ʻōlelo papahana, akā ʻaʻole. Hoʻokō ʻia ke ʻano aʻoaʻo ma ka polokalamu kele pūnaewele me JavaScript.

He mea nui e hiki ke loaʻa iā WebAssembly ma ka hōʻuluʻulu ʻana i nā kumu i nā ʻōlelo e like me C/C++, Rust, Go. Ma ʻaneʻi e hoʻohana ʻia ka paʻi helu helu a me ke ʻano hoʻohālike i kapa ʻia. ʻO ke code, e like me ka mea i ʻōlelo ʻia ma luna nei, mālama ʻia i loko o kahi ʻano binary compact, e hana like me ka wikiwiki e like me ka holo ʻana i ka noi me ka hoʻohana ʻana i ka laina kauoha. Ua alakaʻi kēia mau mea i ka ulu ʻana o ka kaulana o WebAssembly.

Hoʻomaopopo mākou iā ʻoe: no ka poʻe heluhelu a pau o "Habr" - kahi ho'ēmi o 10 rubles i ka wā e kākau inoa ai i kekahi papa Skillbox e hoʻohana ana i ka code promotional "Habr".

Manaʻo ʻo Skillbox: Papa hana "Hoʻolālā Mobile PRO".

I kēia manawa, hoʻohana ʻia ʻo Wasm i nā noi he nui, mai nā pāʻani e like me Doom 3 a i nā noi pūnaewele e like me Autocad a me Figma. Hoʻohana ʻia ʻo Wasm ma nā wahi e like me ka serverless computing.

Hāʻawi kēia ʻatikala i kahi laʻana o ka hoʻohana ʻana iā Wasm e wikiwiki i kahi lawelawe pūnaewele analytics. No ka akaka, lawe mākou i kahi palapala hana i kākau ʻia ma C, i hoʻohui ʻia i WebAssembly. E hoʻohana ʻia ka hopena no ka hoʻololi ʻana i nā ʻāpana maikaʻi ʻole o JS.

Hoololi Noi

E hoʻohana ka laʻana i ka lawelawe polokalamu kele fastq.bio, i manaʻo ʻia no nā geneticists. Hāʻawi ka mea hana iā ʻoe e loiloi i ka maikaʻi o ka sequencing DNA (deciphering).

Eia kekahi laʻana o ka noi ma ka hana:

Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

ʻAʻole kūpono nā kikoʻī o ke kaʻina hana no ka mea he paʻakikī loa lākou no ka poʻe ʻaʻole loea, akā i ka pōkole, hiki i nā ʻepekema ke hoʻohana i ka infographic ma luna e hoʻomaopopo ai inā ua holo mālie ke kaʻina hana sequencing DNA a me nā pilikia i kū mai.

Loaʻa i kēia lawelawe nā mea ʻē aʻe, nā papahana desktop. Akā ʻo fastq.bio hiki iā ʻoe ke wikiwiki i kāu hana ma ka nānā ʻana i ka ʻikepili. I ka nui o nā hihia ʻē aʻe, pono ʻoe e hana me ka laina kauoha, akā ʻaʻole nā ​​geneticists a pau ka ʻike kūpono.

Hana maʻalahi nā mea a pau. ʻO ka hoʻokomo ka ʻikepili i hōʻike ʻia ma ke ʻano o kahi faila kikokikona. Hoʻokumu ʻia kēia faila e nā mea hana sequencing kūikawā. Aia ka waihona i ka papa inoa o nā kaʻina DNA a me ka helu maikaʻi no kēlā me kēia nucleotide. ʻO .fastq ka waihona waihona, ʻo ia ke kumu i loaʻa ai ka inoa o ka lawelawe.

Hoʻokō i ka JavaScript

ʻO ka hana mua o ka mea hoʻohana i ka hana ʻana me fastq.bio e koho i ka faila kūpono. Ke hoʻohana nei i ka mea File, heluhelu ka palapala noi i kahi laʻana o ka ʻikepili mai kahi faila a me nā kaʻina hana i kēlā pūʻulu. ʻO ka hana a JavaScript ma aneʻi ʻo ka hana ʻana i nā hana string maʻalahi a me ka helu ʻana i nā ana. ʻO kekahi o lākou ka helu o nā nucleotides A, C, G a me T ma nā ʻāpana DNA like ʻole.

Ma hope o ka helu ʻana i nā hōʻailona kūpono, ʻike ʻia lākou me ka hoʻohana ʻana iā Plotly.js, a hoʻomaka ka lawelawe e hana me kahi hōʻailona ʻikepili hou. Hana ʻia ka chunking e hoʻomaikaʻi i ka maikaʻi o ka UX. Inā ʻoe e hana me nā ʻikepili a pau i ka manawa hoʻokahi, e maloʻo ke kaʻina hana no kekahi manawa, no ka mea, ʻo nā faila me nā hopena sequencing e lawe i nā haneli gigabytes o ka waihona. Lawe ka lawelawe i nā ʻāpana o ka ʻikepili mai ka 0,5 a i ka 1 MB a hana pū me lākou i kēlā me kēia pae, kūkulu i ka ʻikepili kiʻi.

Penei ka hana ana:

Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

Aia ka ʻāpana ʻulaʻula i ka algorithm hoʻololi string no ka loaʻa ʻana o ka ʻike. ʻO kēia ka ʻāpana koʻikoʻi loa o ka lawelawe. Pono e ho'āʻo e hoʻololi iā ia me Wasm.

Ke ho'āʻo nei i ka WebAssembly

No ka loiloi ʻana i ka hiki ke hoʻohana iā Wasm, ua hoʻomaka ka hui papahana e ʻimi i nā hopena i mākaukau no ka hana ʻana i nā metric QC (QC - quality control) e pili ana i nā faila fastq. Ua hana ʻia ka ʻimi ma waena o nā mea hana i kākau ʻia ma C, C++ a i ʻole Rust, i hiki ke hoʻokomo i ke code i WebAssembly. Eia kekahi, ʻaʻole pono e "raw" ka mea hana; ua koi ʻia kahi lawelawe i hoʻāʻo ʻia e nā ʻepekema.

ʻO ka hopena, ua hoʻoholo ʻia ke koho seqtk. He mea kaulana loa ka noi, he open-source, ʻo C ka ʻōlelo kumu.

Ma mua o ka hoʻololi ʻana iā Wasm, pono e nānā i ke kumu hoʻohui o seqtk no ka pākaukau. Wahi a ka Makefile, eia kāu mea e pono ai:

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

Ma ke kumu, hiki iā ʻoe ke hōʻuluʻulu i ka seqtk me ka hoʻohana ʻana iā Emscripten. Inā ʻaʻole ma laila, hana mākou. Kiʻi Docker.

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

Inā makemake ʻia Hiki iā ʻoe ke hōʻuluʻulu iā ʻoe iho, akā pono ka manawa.

I loko o kahi pahu, hiki iā ʻoe ke hoʻohana maʻalahi i ka emcc ma ke ʻano he ʻokoʻa i ka gcc:

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

Nā hoʻololi liʻiliʻi:

Ma kahi o ka hoʻopuka ʻana i kahi faila binary, hoʻohana ʻo Emscripten i ka .wasm a me .js e hana i nā faila, i hoʻohana ʻia e holo i ka module WebAssemby.

Hoʻohana ʻia ka hae USE_ZLIB e kākoʻo i ka waihona zlib. Ua māhele ʻia ka waihona a lawe ʻia i WebAssembly, a ua hoʻokomo ʻia ʻo Emscripten i loko o ka papahana.

Hoʻohana ʻia ka ʻōnaehana faila virtual Emscripten. ʻO kēia FS like me POSIX, e holo ana ma RAM i loko o ka polokalamu kele pūnaewele. Ke hōʻano hou ʻia ka ʻaoʻao, holoi ʻia ka hoʻomanaʻo.

No ka hoʻomaopopo ʻana i ke kumu e pono ai ka ʻōnaehana file virtual, pono e hoʻohālikelike i ke ala āu e holo ai i ka seqtk mai ka laina kauoha me ke ʻano o kāu holo ʻana i kahi module WebAssembly i hui ʻia.

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

Pono ka loaʻa ʻana i ka ʻōnaehana faila virtual i ʻole e kākau hou i ka seqtk no ke kaula ma mua o ka hoʻokomo faila. I kēia hihia, hōʻike ʻia ka ʻāpana ʻikepili ma ke ʻano he data.fastq file i ka virtual FS me kahi kelepona i ka main() seqtk ma luna.

Eia ka hale hana hou:

Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

Hōʻike ke kiʻi ma kahi o ka helu ʻana ma ka pae polokalamu kele nui, WebWorkers. Hāʻawi kēia ʻano hana iā ʻoe e hana i ka helu ʻana ma kahi pae hope me ka ʻole o ka pili ʻana i ka pane ʻana o ka polokalamu kele pūnaewele. ʻAe, hoʻomaka ka mea hoʻoponopono WebWorker i ka Worker, e hoʻokele ana i kāna pilina me ka pae nui.

Hoʻohana ʻia ke kauoha seqtk me ka hoʻohana ʻana i ka Worker ma ka faila i kau ʻia. Ma hope o ka pau ʻana o ka hoʻokō ʻana, hoʻopuka ka mea hana i kahi hopena ma ke ʻano o kahi ʻōlelo hoʻohiki. I ka loaʻa ʻana o kahi memo e ka pae nui, hoʻohana ʻia ka hopena e hoʻonui i nā kiʻi. A pēlā aku ma kekahi mau hoʻololi.

Pehea e pili ana i ka hana WebAssembly?

I mea e loiloi ai i ka hoʻololi ʻana o ka hana, ua hoʻohana ka hui papahana i nā hana heluhelu i kēlā me kēia kekona. ʻAʻole noʻonoʻo ʻia ka manawa e hana ai i nā kiʻi pāʻani no ka mea ua hoʻohana nā hoʻokō ʻelua i ka JavaScript.

I ka hoʻohana ʻana i ka hoʻonā o waho o ka pahu, ʻeiwa ka piʻi ʻana o ka hana.

Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

He hopena maikaʻi loa kēia, akā, e like me ka mea i ʻike ʻia, aia kahi manawa e hoʻonui ai. ʻO ka ʻoiaʻiʻo, ʻaʻole i hoʻohana ʻia ka nui o nā hopena loiloi QC e seqtk, no laila hiki ke hoʻopau ʻia. Inā ʻoe e hana i kēia, hoʻomaikaʻi ka hopena ma 13 mau manawa i hoʻohālikelike ʻia me JS.

Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

Ua hoʻokō ʻia ma ka ʻōlelo wale ʻana i nā kauoha printf().

Akā ʻaʻole ʻo ia wale nō. ʻO ka ʻoiaʻiʻo ma kēia pae, loaʻa iā fastq.bio nā hopena loiloi ma ke kāhea ʻana i nā hana C like ʻole. Hoʻohālikelike kēlā me kēia o lākou i kāna mau hiʻohiʻona ponoʻī, i heluhelu ʻia kēlā me kēia ʻāpana o ka faila.

I mea e hoʻoponopono ai i kēia pilikia, ua hoʻoholo ʻia e hoʻohui i ʻelua mau hana i hoʻokahi. ʻO ka hopena, ua hoʻonui ʻia ka huahana e 20 mau manawa.

Pehea mākou i hoʻohana ai i ka WebAssembly e wikiwiki i kahi noi pūnaewele 20 mau manawa

He mea pono e hoʻomaopopo ʻaʻole hiki ke hoʻokō mau ʻia kahi hopena koʻikoʻi. I kekahi mau hihia, e hāʻule ana ka hana, no laila pono e loiloi i kēlā me kēia hihia.

I ka hopena, hiki iā mākou ke ʻōlelo e hāʻawi ʻo Wasm i kahi manawa e hoʻomaikaʻi ai i ka hana noi, akā pono ʻoe e hoʻohana me ke akamai.

Manaʻo ʻo Skillbox:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka