Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

Tha an artaigil seo a’ beachdachadh air cùis airson tagradh brobhsair a luathachadh le bhith a’ cur WebAssembly an àite àireamhachadh JavaScript.

WebAssembly - dè a th' ann?

Ann an ùine ghoirid, is e cruth stiùiridh dà-chànanach a tha seo airson inneal brìgheil stèidhichte air stac. Canar cànan prògramaidh gu tric ri Wasm (ainm goirid), ach chan eil. Tha an cruth stiùiridh air a chuir gu bàs sa bhrobhsair còmhla ri JavaScript.

Tha e cudromach gum faighear WebAssembly le bhith a’ cur ri chèile stòran ann an cànanan leithid C/C++, Rust, Go. An seo thathas a’ cleachdadh clò-sgrìobhadh staitistigeil agus am modal cuimhne rèidh ris an canar. Tha an còd, mar a chaidh ainmeachadh gu h-àrd, air a stòradh ann an cruth binary teann, ga dhèanamh cha mhòr cho luath ri bhith a’ ruith an aplacaid leis an loidhne-àithne. Tha na comasan sin air leantainn gu fàs mòr-chòrdte WebAssembly.

Tha sinn a ’cur nar cuimhne: airson a h-uile leughadair de "Habr" - lasachadh de 10 rubles nuair a chlàraicheas tu ann an cùrsa sam bith Skillbox a 'cleachdadh a' chòd adhartachaidh "Habr".

Tha Skillbox a’ moladh: Cùrsa practaigeach "Mobile Developer PRO".

An-dràsta, tha Wasm air a chleachdadh ann an iomadh tagradh, bho gheamannan mar Doom 3 gu tagraidhean air an lìon mar Autocad agus Figma. Tha Wasm cuideachd air a chleachdadh ann an raointean leithid coimpiutaireachd gun fhrithealaiche.

Tha an artaigil seo a’ toirt seachad eisimpleir de bhith a’ cleachdadh Wasm gus seirbheis lìn anailis a luathachadh. Airson soilleireachd, ghabh sinn ri tagradh obrach sgrìobhte ann an C, a tha air a chur ri chèile ann an WebAssembly. Thèid an toradh a chleachdadh an àite earrannan de JS nach eil cho math.

Atharrachadh Iarrtas

Cleachdaidh an eisimpleir an t-seirbheis brabhsair fastq.bio, a tha airson luchd-ginteachd. Leigidh an t-inneal dhut measadh a dhèanamh air càileachd an t-sreath DNA (deciphering).

Seo eisimpleir den iarrtas ann an gnìomh:

Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

Chan fhiach mion-fhiosrachadh a’ phròiseis a dhol a-steach leis gu bheil iad gu math toinnte do dhaoine nach eil nan eòlaichean, ach ann an ùine ghoirid, faodaidh luchd-saidheans an infographic gu h-àrd a chleachdadh gus tuigsinn an deach am pròiseas seicheamhachaidh DNA gu rèidh agus dè na duilgheadasan a dh’ èirich.

Tha roghainnean eile aig an t-seirbheis seo, prògraman deasg. Ach leigidh fastq.bio leat do chuid obrach a luathachadh le bhith a’ faicinn an dàta. Anns a 'mhòr-chuid de chùisean eile, feumaidh tu a bhith comasach air obrachadh leis an loidhne-àithne, ach chan eil an eòlas riatanach aig a h-uile eòlaiche ginteil.

Bidh a h-uile dad ag obair gu sìmplidh. Is e an cuir a-steach dàta air a thaisbeanadh ann an cruth faidhle teacsa. Tha am faidhle seo ga chruthachadh le innealan seicheamhachaidh sònraichte. Anns an fhaidhle tha liosta de shreathan DNA agus sgòr càileachd airson gach nucleotide. Is e .fastq am fòrmat faidhle, agus is e sin as coireach gun d’ fhuair an t-seirbheis ainm.

Cur an gnìomh ann an javascript

Is e a 'chiad cheum aig an neach-cleachdaidh nuair a bhios e ag obair le fastq.bio am faidhle iomchaidh a thaghadh. A’ cleachdadh an nì File, bidh an aplacaid a’ leughadh sampall air thuaiream de dhàta bho fhaidhle agus a’ pròiseasadh a’ bhaidse sin. Is e obair JavaScript an seo obair sreang sìmplidh a dhèanamh agus tomhas-tomhais obrachadh a-mach. Is e aon dhiubh an àireamh de nucleotides A, C, G agus T air diofar mhìrean DNA.

Às deidh na comharran riatanach obrachadh a-mach, tha iad air am fradharc le bhith a ’cleachdadh Plotly.js, agus bidh an t-seirbheis a’ tòiseachadh ag obair le sampall dàta ùr. Tha an gearradh air a dhèanamh gus càileachd an UX a leasachadh. Ma dh’ obraicheas tu leis an dàta gu lèir aig an aon àm, bidh am pròiseas a’ reothadh airson ùine, leis gu bheil na faidhlichean le toraidhean an t-sreath a’ gabhail suas ceudan de gigabytes de rùm faidhle. Bidh an t-seirbheis a’ toirt pìosan dàta ann am meud bho 0,5 gu 1 MB agus ag obair còmhla riutha ceum air cheum, a’ togail dàta grafaigeach.

Seo mar a tha e ag obair:

Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

Anns an ceart-cheàrnach dhearg tha an algairim cruth-atharrachaidh sreang airson fradharc fhaighinn. Is e seo am pàirt as dian den t-seirbheis a thaobh àireamhachadh. Is fhiach feuchainn ri Wasm a chuir na àite.

A’ dèanamh deuchainn air Webassembly

Gus measadh a dhèanamh air comasachd Wasm a chleachdadh, thòisich sgioba a’ phròiseict a’ coimhead airson fuasglaidhean deiseil airson a bhith a’ cruthachadh QC metrics (QC - càileachd smachd) stèidhichte air faidhlichean fastq. Chaidh an rannsachadh a dhèanamh am measg innealan sgrìobhte ann an C, C ++ no Rust, gus am biodh e comasach an còd a chuir gu WebAssembly. A bharrachd air an sin, cha bu chòir don inneal a bhith “amh”; bha feum air seirbheis a chaidh a dhearbhadh le luchd-saidheans mu thràth.

Mar thoradh air an sin, chaidh an roghainn a dhèanamh airson fàbhar seqtk. Tha fèill mhòr air an tagradh, tha e fosgailte, is e C an cànan tùsail.

Mus tionndaidh thu gu Wasm, is fhiach coimhead air prionnsapal cruinneachaidh seqtk airson an deasg. A rèir an Makefile, seo na tha a dhìth ort:

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

Ann am prionnsapal, faodaidh tu seqtk a chuir ri chèile a’ cleachdadh Emscripten. Mura h-eil e ann, bheir sinn oirnn dèanamh. Dealbh docker.

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

Ma tha thu ag iarraidh Faodaidh tu fhèin a chruinneachadh, ach bheir e ùine.

Taobh a-staigh soitheach, is urrainn dhut emcc a chleachdadh gu furasta mar roghainn eile an àite gcc:

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

Atharrachaidhean as ìsle:

An àite a bhith a’ cur a-mach gu faidhle binary, bidh Emscripten a’ cleachdadh .wasm agus .js gus na faidhlichean a ghineadh, a thathas a’ cleachdadh gus modal WebAssemby a ruith.

Bithear a’ cleachdadh a’ bhratach USE_ZLIB gus taic a thoirt don leabharlann zlib. Chaidh an leabharlann a sgaoileadh agus a ghluasad gu WebAssembly, agus tha Emscripten ga thoirt a-steach don phròiseact.

Tha siostam faidhle brìgheil Emscriptten air a chuir an gnìomh. Seo FS coltach ri POSIX, a 'ruith ann an RAM taobh a-staigh a' bhrabhsair. Nuair a thèid an duilleag ùrachadh, thèid an cuimhne a ghlanadh.

Gus tuigsinn carson a tha feum air siostam faidhle brìgheil, is fhiach coimeas a dhèanamh eadar an dòigh sa bheil thu a’ ruith seqtk bhon loidhne-àithne leis an dòigh sa bheil thu a’ ruith modal WebAssembly cruinnichte.

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

Tha feum air cothrom fhaighinn air an t-siostam faidhle mas-fhìor gus nach ath-sgrìobhadh seqtk airson sreang seach cuir a-steach faidhle. Anns a’ chùis seo, tha am criomag dàta air a thaisbeanadh mar fhaidhle data.fastq anns an FS brìgheil le gairm gu prìomh() seqtk air.

Seo an ailtireachd ùr:

Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

Tha am figear a’ sealltainn, an àite àireamhachadh ann am prìomh snàithlean a’ bhrobhsair, Luchd-obrach lìn. Leigidh an dòigh seo leat àireamhachadh a dhèanamh ann an snàithlean cùl-fhiosrachaidh gun a bhith a’ toirt buaidh air freagairteachd brabhsair. Uill, bidh rianadair WebWorker a’ tòiseachadh an Neach-obrach, a’ riaghladh an eadar-obrachadh leis a’ phrìomh snàithlean.

Tha an àithne seqtk air a ruith le bhith a’ cleachdadh Worker air am faidhle air a chuir suas. Às deidh an coileanadh a chrìochnachadh, bidh an Neach-obrach a’ toirt a-mach toradh ann an cruth Gealladh. Nuair a gheibhear teachdaireachd leis a’ phrìomh snàithlean, thèid an toradh a chleachdadh gus na grafaichean ùrachadh. Agus mar sin air adhart ann an grunn thursan.

Dè mu dheidhinn coileanadh WebAssembly?

Gus measadh a dhèanamh air an atharrachadh ann an coileanadh, chleachd sgioba a’ phròiseict na h-obraichean leughaidh gach diog paramadair. Chan eilear a’ toirt aire don ùine a bheir e airson grafaichean eadar-ghnìomhach a thogail leis gu bheil an dà bhuileachadh a’ cleachdadh JavaScript.

Nuair a chaidh am fuasgladh taobh a-muigh a’ bhogsa a chleachdadh, bha an àrdachadh coileanaidh naoi tursan.

Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

Is e toradh sàr-mhath a tha seo, ach, mar a thionndaidh e, tha cothrom ann a mheudachadh cuideachd. Is e an fhìrinn nach eil àireamh mhòr de thoraidhean anailis QC air an cleachdadh le seqtk, agus mar sin faodar an toirt às. Ma nì thu seo, thig piseach air an toradh 13 tursan an taca ri JS.

Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

Chaidh a choileanadh le bhith dìreach a’ toirt iomradh air na h-òrdughan printf().

Ach chan e sin uile. Is e an fhìrinn gu bheil fastq.bio aig an ìre seo a 'faighinn toraidhean an sgrùdaidh le bhith a' gairm diofar ghnìomhan C. Bidh gach fear dhiubh a 'tomhas a sheata de fheartan fhèin, gus am bi gach criomag den fhaidhle air a leughadh dà uair.

Gus faighinn timcheall air an duilgheadas seo, chaidh co-dhùnadh dà ghnìomh a chur còmhla ann an aon. Mar thoradh air an sin, chaidh cinneasachd àrdachadh 20 uair.

Mar a chleachd sinn WebAssembly gus tagradh lìn a luathachadh 20 uair

'S fhiach toirt fa-near nach urrainn a leithid de thoradh air leth a choileanadh an-còmhnaidh. Ann an cuid de chùisean, bidh coileanadh a 'tuiteam, agus mar sin is fhiach measadh a dhèanamh air gach cùis.

Mar cho-dhùnadh, faodaidh sinn a ràdh gu bheil Wasm a’ toirt cothrom dhut coileanadh tagraidh a leasachadh, ach feumaidh tu a chleachdadh gu ciallach.

Tha Skillbox a’ moladh:

Source: www.habr.com

Cuir beachd ann