ProHoster > Блог > Whakahaerenga > Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa
Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa
Ka matapakihia e tenei tuhinga tetahi keehi mo te tere ake i te tono tirotiro ma te whakakapi i nga tatauranga JavaScript me te WebAssembly.
WebAssembly - he aha tena?
Hei poto, he whakatakotoranga ako-rua tenei mo te miihini mariko i runga i te puranga. Ko te Wasm (ingoa poto) e kiia ana he reo papatono, engari ehara. Ko te whakatakotoranga tohutohu ka mahia i roto i te kaitirotiro me te JavaScript.
He mea nui kia whiwhi a WebAssembly ma te whakahiato puna ki nga reo penei i te C/C++, Rust, Go. I konei ka whakamahia te patopato tauanga me te tauira mahara papatahi. Ko te waehere, pera i te korero i runga ake nei, kei te rongoa i roto i te whakatakotoranga rua kiato, ka tata te tere o te whakahaere i te tono ma te whakamahi i te raina whakahau. Na enei kaha i piki ake te rongonui o WebAssembly.
Ka whakamahara matou:mo nga kaipānui katoa o "Habr" - he utu mo te 10 rubles i te wa e whakauru ana ki tetahi akoranga Skillbox ma te whakamahi i te waehere whakatairanga "Habr".
I tenei wa, ka whakamahia a Wasm i roto i nga tono maha, mai i nga keemu penei i a Doom 3 ki nga tono tuku-tukutuku penei i a Autocad me Figma. Ka whakamahia ano te Wasm ki nga waahi penei i te rorohiko kore-tumau.
Ko tenei tuhinga he tauira mo te whakamahi Wasm ki te tere ake i te ratonga paetukutuku tātari. Mo te whakamarama, i mauhia e matou he tono mahi kua tuhia ki te C, kua whakahiatohia ki te WebAssembly. Ka whakamahia te hua ki te whakakapi i nga waahanga ngoikore o te JS.
Huringa Taupānga
Ka whakamahia e te tauira te ratonga tirotiro fastq.bio, he mea mo nga tohunga ira. Ko te taputapu ka taea e koe te aromatawai i te kounga o te raupapa DNA (whakaahua).
Anei tetahi tauira o te tono e mahi ana:
Ko nga korero o te tukanga kaore e pai ki te whakauru i te mea he tino uaua mo nga tohunga kore, engari i roto i te poto, ka taea e nga kaiputaiao te whakamahi i nga korero o runga ake nei ki te mohio mehemea i pai te haere o te tukanga raupapa DNA me nga raruraru i puta.
Kei tenei ratonga etahi atu, he kaupapa papamahi. Engari ko te fastq.bio ka taea e koe te tere ake i to mahi ma te tiro i nga raraunga. I te nuinga atu o nga keehi, me kaha koe ki te mahi me te raina whakahau, engari kaore nga tohunga ira katoa e whai wheako e tika ana.
Ka mahi noa nga mea katoa. Ko te whakauru ko nga raraunga ka whakaatuhia i te ahua o te konae tuhinga. He mea hanga tenei konae e nga taputapu raupapa motuhake. Kei roto i te konae he rarangi o nga raupapa DNA me te kaute kounga mo ia nucleotide. Ko te whakatakotoranga konae he .fastq, na reira i tapaina ai te ingoa o te ratonga.
Te whakatinanatanga i roto i te JavaScript
Ko te mahi tuatahi a te kaiwhakamahi ka mahi tahi me fastq.bio ko te kowhiri i te konae e tika ana. Ma te whakamahi i te ahanoa Kōnae, ka panuihia e te tono he tauira matapōkere o te raraunga mai i te konae me nga tukanga o taua puranga. Ko te mahi a JavaScript i konei ko te mahi aho ngawari me te tatau ine. Ko tetahi o enei ko te maha o nga nucleotides A, C, G me T i runga i nga wahanga DNA rereke.
I muri i te tatau i nga tohu e tika ana, ka whakaatuhia ma te whakamahi i te Plotly.js, ka timata te mahi ki te mahi me tetahi tauira raraunga hou. Ka mahia te tarai ki te whakapai ake i te kounga o te UX. Mena ka mahi tahi koe me nga raraunga katoa i te wa kotahi, ka whakatio te mahi mo etahi wa, na te mea ko nga konae me nga hua raupapa ka pau nga rau gigabytes mokowā kōnae. Ka tangohia e te ratonga etahi waahanga raraunga mai i te 0,5 ki te 1 MB me te mahi tahi me ratou i ia taahiraa, hanga raraunga kauwhata.
Ko te mahi tenei:
Kei roto i te tapawhā tapawhā whero te hātepe huringa aho mō te whakakitenga. Koinei te waahanga tino kaha o te mahi rorohiko. He pai te ngana ki te whakakapi ki a Wasm.
Whakamatau WebAssembly
Hei aromatawai i te kaha ki te whakamahi i te Wasm, i timata te roopu kaupapa ki te rapu otinga kua rite mo te hanga ine QC (QC - mana kounga) i runga i nga konae fastq. I mahia te rapunga i waenga i nga taputapu kua tuhia ki te C, C++, ki te Rust ranei, kia taea ai te kawe i te waehere ki WebAssembly. Hei taapiri, kaua e "mata" te taputapu; he ratonga kua whakamatauria e nga kaiputaiao.
Ko te mutunga, ko te kowhiringa i pai ai tuakoi. He tino rongonui te tono, he tuwhera-puna, ko te reo puna ko C.
I mua i te huri ki Wasm, he pai ki te titiro ki te kaupapa whakahiato o seqtk mo te papamahi. E ai ki te Makefile, koinei nga mea e hiahia ana koe:
Engari ki te whakaputa ki te konae rua, ka whakamahia e Emscripten te .wasm me te .js hei whakaputa i nga konae, ka whakamahia hei whakahaere i te waahanga WebAssemby.
Ka whakamahia te haki USE_ZLIB hei tautoko i te whare pukapuka zlib. Kua tohatohahia te wharepukapuka me te kawe ki te WebAssembly, a ka whakaurua e Emscripten ki roto i te kaupapa.
Kua whakahohehia te punaha konae mariko Emscripten. Tenei POSIX-rite FS, rere i roto i te RAM i roto i te pūtirotiro. Ina tāmatahia te wharangi, ka whakawāteatia te pūmahara.
Kia mohio ai koe he aha te mea e hiahiatia ana he punaha konae mariko, he mea tika ki te whakataurite i te huarahi e whakahaere ai koe i te seqtk mai i te raina whakahau me te huarahi e whakahaere ana koe i tetahi waahanga WebAssembly kua whakahiato.
# On the command line
$ ./seqtk fqchk data.fastq
# In the browser console
> Module.callMain(["fqchk", "data.fastq"])
Ko te whai waahi ki te punaha konae mariko he mea tika kia kore e tuhia ano te seqtk mo te aho, kaua ki te whakauru i te konae. I tenei keehi, ka whakaatuhia te waahanga raraunga hei konae data.fastq i roto i te FS mariko me te waea ki te matua() seqtk ki runga.
Anei te hoahoanga hou:
E whakaatu ana te whika hei utu mo nga tatauranga i roto i te miro tirotiro matua, Kaimahi Tukutuku. Ma tenei tikanga ka taea e koe te mahi tatauranga i roto i te miro papamuri me te kore e pa ki te aro o te tirotiro. Ana, ka timata te kaiwhakahaere WebWorker i te Kaimahi, te whakahaere i tana taunekeneke me te miro matua.
Ka whakahaerehia te whakahau seqtk ma te whakamahi i te Kaimahi i runga i te konae kua eke. I muri i te whakaotinga o te mahi, ka puta he hua o te Kaimahi i roto i te ahua o te Whakaaetanga. Ina tae mai he karere e te miro matua, ka whakamahia te hua hei whakahou i nga kauwhata. A pera i roto i te maha whitiwhitinga.
He aha te mahi a WebAssembly?
Hei arotake i te huringa o te mahi, i whakamahia e te roopu kaupapa nga mahi panui mo ia tawhā tuarua. Ko te waa ki te hanga kauwhata tauwhitinga kaore e whakaarohia mai i te mea ka whakamahia e nga whakatinanatanga e rua te JavaScript.
I te whakamahi i te otinga o waho o te pouaka, e iwa nga wa o te pikinga o nga mahi.
He hua tino pai tenei, engari, i te mea ka puta, he waahi ki te arotau ano hoki. Ko te meka ko te maha o nga hua tātaritanga QC kaore i te whakamahia e te seqtk, na reira ka taea te whakakore. Mena ka mahi koe i tenei, ka pai ake te hua ma te 13 nga wa ka whakaritea ki a JS.
I tutuki ma te korero noa i nga whakahau printf().
Engari ehara i te mea ko tera anake. Ko te meka i tenei wa, ka whiwhi a fastq.bio i nga hua tātaritanga ma te karanga i nga momo mahi C. Ka tatauhia e ia o raatau ake ahuatanga, kia rua nga panui o ia wahanga o te konae.
Hei whakatika i tenei raru, i whakatauhia kia whakakotahi nga mahi e rua ki te kotahi. Ko te mutunga mai, 20 nga wa i piki ake ai te hua.
He mea tika kia mohio ko tenei hua tino pai kaore e taea te whakatutuki i nga wa katoa. I etahi wa, ka heke te mahi, no reira he pai ki te arotake i ia keehi.
Hei whakatau, ka taea e taatau te kii ka whai waahi a Wasm ki te whakapai ake i nga mahi tono, engari me whakamahi tika koe.