Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Edemede a na-atụle ikpe maka ịgbalite ngwa ihe nchọgharị site na iji WebAssembly dochie mkpokọta Javascript.

WebAssembly - kedu ihe ọ bụ?

Na nkenke, nke a bụ usoro nkuzi ọnụọgụ abụọ maka igwe mebere nke dabere na stack. A na-akpọkarị Wasm (aha dị mkpirikpi) asụsụ mmemme, mana ọ bụghị. A na-eme usoro nkuzi na ihe nchọgharị yana Javascript.

Ọ dị mkpa na enwere ike nweta WebAssembly site n'ịchịkọta isi mmalite n'asụsụ dị ka C/C++, Rust, Go. N'ebe a, a na-eji akara ndekọ ọnụ ọgụgụ na ihe a na-akpọ flat memory model. A na-echekwa koodu ahụ, dị ka ekwuru n'elu, na usoro ọnụọgụ abụọ kọmpat, na-eme ka ọ fọrọ nke nta ka ọ bụrụ ngwa ngwa na-eji usoro iwu. Ike ndị a emela ka ewu ewu WebAssembly tolite.

Anyị na -echetara: maka ndị na-agụ Habr niile - ego 10 ruble mgbe ị na-edebanye aha na nkuzi Skillbox ọ bụla site na iji koodu mgbasa ozi Habr.

Skillbox na-atụ aro: Usoro bara uru "Mobile Developer PRO".

Ugbu a, a na-eji Wasm n'ọtụtụ ngwa, site na egwuregwu dị ka Doom 3 gaa na ngwa webụ dị ka Autocad na Figma. A na-ejikwa Wasm na mpaghara ndị dị ka kọmputa enweghị ihe nkesa.

Edemede a na-enye ihe atụ nke iji Wasm iji mee ka ọrụ weebụ nyocha dị ngwa. Maka idoanya, anyị were ngwa ọrụ edere na C, nke achịkọtara na WebAssembly. A ga-eji nsonaazụ ya dochie akụkụ ndị na-adịghị arụ ọrụ nke JS.

Ngbanwe ngwa

Ihe atụ ga-eji ọrụ nchọgharị fastq.bio, nke ezubere maka ndị na-ahụ maka mkpụrụ ndụ ihe nketa. Ngwá ọrụ na-enye gị ohere inyocha ogo nke usoro DNA (deciphering).

Nke a bụ ọmụmaatụ nke ngwa a na-arụ ọrụ:

Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Nkọwa nke usoro ahụ abaghị uru ịbanye n'ihi na ọ dị mgbagwoju anya maka ndị na-abụghị ndị ọkachamara, ma na nkenke, ndị ọkà mmụta sayensị nwere ike iji infographic dị n'elu iji ghọta ma usoro DNA na-aga nke ọma na nsogbu ndị bilitere.

Ọrụ a nwere ụzọ ọzọ, mmemme desktọpụ. Mana fastq.bio na-enye gị ohere ime ka ọrụ gị dị ngwa site n'ichepụta data ahụ anya. N'ọtụtụ ọnọdụ ndị ọzọ, ịkwesịrị inwe ike ịrụ ọrụ na ahịrị iwu, mana ọ bụghị ndị ọkà mmụta mkpụrụ ndụ ihe nketa niile nwere ahụmịhe dị mkpa.

Ihe niile na-arụ ọrụ dị mfe. Ntinye bụ data ewepụtara n'ụdị faịlụ ederede. Emepụtara faịlụ a site na ngwaọrụ nhazi pụrụ iche. Faịlụ ahụ nwere ndepụta usoro DNA na akara mma maka nucleotide ọ bụla. Ụdị faịlụ bụ .fastq, nke mere ọrụ ahụ ji nweta aha ya.

Mmejuputa na Javascript

Nzọụkwụ mbụ nke onye ọrụ mgbe ị na-arụ ọrụ na fastq.bio bụ ịhọrọ faịlụ kwesịrị ekwesị. N'iji ihe Faịlụ ahụ, ngwa a na-agụ ụdị data na-enweghị usoro sitere na faịlụ yana usoro na-abata. Ọrụ Javascript ebe a bụ ịrụ ọrụ eriri dị mfe yana gbakọọ metrik. Otu n'ime ha bụ ọnụọgụ nke nucleotides A, C, G na T na DNA dị iche iche.

Mgbe ha gbakọchara ihe ngosi ndị dị mkpa, a na-ahụ ha anya site na iji Plotly.js, ọrụ ahụ wee malite iji ihe nlele data ọhụrụ rụọ ọrụ. A na-eme chunking iji melite ogo UX. Ọ bụrụ na ị na-arụ ọrụ na data niile n'otu oge, usoro a ga-ajụ oyi ruo oge ụfọdụ, ebe ọ bụ na faịlụ ndị nwere nsonaazụ usoro na-ewe ọtụtụ narị gigabytes nke ohere faịlụ. Ọrụ ahụ na-ewe iberibe data sitere na 0,5 ruo 1 MB ma soro ha rụọ ọrụ site na nzọụkwụ, na-ewu data eserese.

Nke a bụ otu o si arụ ọrụ:

Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Rektangulu uhie nwere eriri mgbanwe algọridim maka inweta ọhụhụ. Nke a bụ akụkụ kacha sie ike nke ọrụ ahụ. Ọ bara uru ịgbalị iji Wasm dochie ya.

Na-anwale WebAssembly

Iji nyochaa ohere nke iji Wasm, ndị otu ọrụ ahụ malitere ịchọ ihe ngwọta dị njikere maka ịmepụta metrics QC (QC - njikwa mma) dabere na faịlụ fastq. Emere ọchụchọ ahụ n'etiti ngwaọrụ ndị edere na C, C ++ ma ọ bụ nchara, ka o wee nwee ike ibubata koodu ahụ na WebAssembly. Na mgbakwunye, ngwá ọrụ ahụ ekwesịghị ịbụ “raw”; a chọrọ ọrụ nke ndị ọkà mmụta sayensị nwalerelarị.

N'ihi ya, e mere nhọrọ maka nkwado seqtk. Ngwa a na-ewu ewu nke ukwuu, ọ bụ isi mmalite, asụsụ isi mmalite bụ C.

Tupu ịtụgharị na Wasm, ọ bara uru ilele ụkpụrụ nchịkọta nke seqtk maka desktọpụ. Dabere na Makefile, nke a bụ ihe ịchọrọ:

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

Na ụkpụrụ, ị nwere ike chịkọta seqtk site na iji Emscripten. Ọ bụrụ na ọ bụghị n'ebe ahụ, anyị na-eme. Foto docker.

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

Ọ bụrụ na achọrọ Ị nwere ike ịgbakọta ya n'onwe gị, ma ọ na-ewe oge.

N'ime akpa, ị nwere ike iji emcc dị ka ihe ọzọ na gcc:

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

Mgbanwe kacha nta:

Kama ịwepụta na faịlụ ọnụọgụ abụọ, Emscripten na-eji .wasm na .js mepụta faịlụ, nke a na-eji na-agba ọsọ WebAssemby modul.

A na-eji ọkọlọtọ USE_ZLIB iji kwado ọba akwụkwọ zlib. E kesaala ọbá akwụkwọ ahụ ma bufee ya na WebAssembly, Emscripten gụnyekwara ya na ọrụ ahụ.

Emscrippten mebere faịlụ si arụ ọrụ. Nke a POSIX dị ka FS, na-agba ọsọ na RAM n'ime ihe nchọgharị ahụ. Mgbe eweghachiri ibe ahụ, a na-ehichapụ ebe nchekwa ahụ.

Iji ghọta ihe kpatara achọrọ sistemụ faịlụ mebere, ọ bara uru iji otu ị na-agba seqtk site na ahịrị iwu na otu ị si agba modul WebAssembly chịkọtara.

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

Inweta ohere na sistemụ faịlụ mebere dị mkpa ka ị ghara idegharị seqtk maka eriri kama ntinye faịlụ. N'okwu a, a na-egosipụta iberibe data dị ka faịlụ data.fastq na FS mebere ya na oku na-aga isi () seqtk na ya.

Nke a bụ ụkpụrụ ụlọ ọhụrụ:

Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Ọnụ ọgụgụ ahụ na-egosi na kama ịgbakọ na eri ihe nchọgharị bụ isi, Ndị na-arụ ọrụ Web. Usoro a na-enye gị ohere ịme mgbako na eriri azụ na-emetụtaghị nnabata ihe nchọgharị. Ọfọn, onye na-ahụ maka WebWorker na-amalite Onye ọrụ ahụ, na-ejikwa mmekọrịta ya na isi eri.

A na-eme iwu seqtk site na iji Worker na faịlụ agbakwunyere. Mgbe emechara ogbugbu, onye ọrụ na-arụpụta nsonaazụ n'ụdị Nkwa. Mgbe isi eri natara ozi, a na-eji nsonaazụ emelite eserese. Ya mere, n'ọtụtụ itiration.

Kedu maka arụmọrụ WebAssembly?

Iji nyochaa mgbanwe na arụmọrụ, ndị otu oru ngo na-eji ọrụ ịgụ ihe kwa nkeji nke abụọ. A naghị echebara oge ọ na-ewe iji wuo eserese mmekọrịta ebe ọ bụ na mmejuputa abụọ a na-eji Javascript.

Mgbe ị na-eji ngwọta na-apụ apụ, mmụba arụmọrụ bụ ugboro itoolu.

Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Nke a bụ nsonaazụ magburu onwe ya, ma, dị ka ọ na-apụta, enwere ohere iji bulie ya kwa. Nke bụ eziokwu bụ na ọnụ ọgụgụ buru ibu nke nyocha QC anaghị eji seqtk eme ihe, yabụ enwere ike ihichapụ ha. Ọ bụrụ na ịmee nke a, nsonaazụ ga-akawanye mma site ugboro iri na atọ ma e jiri ya tụnyere JS.

Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Emere ya site na ịza ajụjụ naanị printf() iwu.

Ma ọ bụghị naanị nke ahụ. Nke bụ eziokwu bụ na n'oge a, fastq.bio na-enweta nsonaazụ nyocha site n'ịkpọ ọrụ C dị iche iche. Onye ọ bụla n'ime ha na-agbakọ njirimara nke ya, nke mere na a na-agụ akụkụ ọ bụla nke faịlụ ahụ ugboro abụọ.

Iji nweta nsogbu a, e kpebiri ijikọ ọrụ abụọ n'ime otu. N'ihi ya, arụpụtaghị ihe mụbara ugboro 20.

Otu anyị si jiri WebAssembly mee ngwa ngwa webụ ugboro 20

Ọ dị mma ịmara na ọ bụghị mgbe niile ka enwere ike nweta nsonaazụ pụtara ìhè. N'ọnọdụ ụfọdụ, arụmọrụ ga-adaba, ya mere ọ bara uru ịtụle ikpe ọ bụla.

Dịka mmechi, anyị nwere ike ịsị na Wasm na-enye ohere iji melite arụmọrụ ngwa, mana ịkwesịrị iji ya mee ihe nke ọma.

Skillbox na-atụ aro:

isi: www.habr.com

Tinye a comment