Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Ev gotar dozek ji bo bilezkirina serîlêdana gerokek bi guheztina hesabên JavaScript bi WebAssembly re nîqaş dike.

WebAssembly - ew çi ye?

Bi kurtasî, ev ji bo makîneyek virtual-based stack formatek rêwerzek binary e. Wasm (kurtnav) bi gelemperî wekî zimanek bernamekirinê tê gotin, lê ne wusa ye. Forma rêwerzê di gerokê de digel JavaScriptê tê darve kirin.

Girîng e ku WebAssembly bi berhevkirina çavkaniyên bi zimanên wekî C/C++, Rust, Go were bidestxistin. Li vir tîpkirina îstatîstîkî û modela ku jê re tê gotin modela bîranîna daîre tê bikar anîn. Kod, wekî ku li jor hatî behs kirin, di formatek binaryî ya kompakt de tê hilanîn, ku ew hema hema bi leza xebitandina serîlêdanê bi karanîna rêzika fermanê re dike. Van hêzan bûne sedema mezinbûna populerbûna WebAssembly.

Em bînin bîra xwe: ji bo hemî xwendevanên "Habr" - dema ku hûn beşdarî qursek Skillbox-ê bi karanîna koda danasînê ya "Habr" têne qeyd kirin 10 rubleyan dakêşin.

Skillbox pêşniyar dike: Kursa pratîk "Pêşvebirê Mobîl PRO".

Heya nuha, Wasm di gelek serîlêdanan de tê bikar anîn, ji lîstikên mîna Doom 3 heya serîlêdanên web-portkirî yên mîna Autocad û Figma. Wasm di warên weha de wekî komputera bê server jî tê bikar anîn.

Vê gotarê mînakek karanîna Wasm peyda dike da ku karûbarek webê ya analîtîk bilez bike. Ji bo zelaliyê, me serîlêdanek xebatê ya ku bi C-yê hatî nivîsandin, ku di WebAssembly de hatî berhev kirin, girt. Encam dê ji bo cîhgirtina beşên kêmperformansa JS-ê were bikar anîn.

Veguherîna Serlêdanê

Nimûne dê karûbarê geroka fastq.bio bikar bîne, ku ji bo genetîkzanan hatî armanc kirin. Amûr dihêle hûn qalîteya rêzgirtina DNA (deşîfrekirin) binirxînin.

Li vir mînakek serîlêdanê di çalakiyê de ye:

Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Hûrguliyên pêvajoyê ne hêja ne ku werin nav ji ber ku ew ji bo ne-pisporan pir tevlihev in, lê bi kurtî, zanyar dikarin infografiya jorîn bikar bînin da ku fêm bikin ka pêvajoya rêzkirina DNA bi rêkûpêk derbas bû û çi pirsgirêk derketin.

Vê xizmetê alternatîf, bernameyên sermaseyê hene. Lê fastq.bio dihêle hûn bi dîtina daneyan xebata xwe bilezînin. Di pir rewşên din de, hûn hewce ne ku hûn bi rêzika fermanê re bixebitin, lê ne hemî genetîkzan xwedî ezmûna pêwîst in.

Her tişt bi hêsanî dixebite. Ketina daneyan e ku di forma pelek nivîsê de têne pêşkêş kirin. Ev pel ji hêla amûrên rêzikên pispor ve hatî çêkirin. Di pelê de lîsteyek rêzikên ADNyê û ji bo her nukleotîdê xalek kalîteyê heye. Forma pelê .fastq e, ji ber vê yekê xizmetê navê xwe girt.

Pêkanîna di JavaScriptê de

Gava yekem a bikarhêner gava ku bi fastq.bio re dixebite ev e ku pelê guncan hilbijêrin. Bi karanîna tişta Pelê, serîlêdan nimûneyek rasthatî ya daneyan ji pelek dixwîne û wê komê pêvajo dike. Karê JavaScript-ê li vir ev e ku meriv operasyonên rêzê yên hêsan pêk bîne û metrîkan hesab bike. Yek ji wan hejmara nukleotîdên A, C, G û T yên li ser perçeyên ADNyê yên cihê ye.

Piştî hesabkirina nîşaneyên pêwîst, ew bi karanîna Plotly.js têne xuyang kirin, û karûbar bi nimûneyek daneya nû dest bi xebatê dike. Kulîlk ji bo baştirkirina kalîteya UX-ê tête kirin. Ger hûn bi yekcarî bi hemî daneyan re bixebitin, pêvajo dê ji bo demekê bicemidîne, ji ber ku pelên bi encamên rêzkirinê re bi sedan gigabayt cîhê pelê digirin. Karûbar perçeyên daneyan ji 0,5 heta 1 MB-ê digire û bi wan re gav bi gav dixebite, daneyên grafîkî ava dike.

Ev çawa dixebite:

Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Çargoşeya sor algorîtmaya veguherîna rêzikê ji bo bidestxistina dîtbariyê vedihewîne. Ev beşa karûbarê ji hêla hesabkerî ya herî giran e. Hêja ye ku meriv wê bi Wasm veguherîne.

Testkirina WebAssembly

Ji bo nirxandina îmkana karanîna Wasm, tîmê projeyê dest bi lêgerîna çareseriyên amade kir ji bo afirandina metrîkên QC (QC - kontrolkirina kalîteyê) li ser bingeha pelên fastq. Lêgerîn di nav amûrên ku bi C, C++ an Rust hatine nivîsandin de hate kirin, da ku gengaz bû ku kodê li WebAssembly were veguheztin. Wekî din, pêdivî ye ku amûr ne "xav" be; karûbarek ku berê ji hêla zanyaran ve hatî ceribandin hewce bû.

Di encamê de, hilbijartin di berjewendiyê de hate kirin seqtk. Serlêdan pir populer e, ew çavkaniyek vekirî ye, zimanê çavkaniyê C ye.

Berî ku hûn veguherînin Wasm, hêja ye ku li prensîba berhevkirina seqtk ji bo sermaseyê binihêrin. Li gorî Makefile, li vir tiştê ku hûn hewce ne ev e:

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

Di prensîbê de, hûn dikarin seqtk bi karanîna Emscripten berhev bikin. Ger ne li wir be, em dikin. Wêne Docker.

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

Ger bixwaze Hûn dikarin wê bi xwe kom bikin, lê ew dem digire.

Di hundurê konteynerek de, hûn dikarin bi hêsanî emcc wekî alternatîfek gcc bikar bînin:

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

Guhertinên herî kêm:

Emscripten li şûna ku pelek binary derxe, .wasm û .js bikar tîne da ku pelan çêbike, ku ji bo xebitandina modula WebAssemby tê bikar anîn.

Ala USE_ZLIB ji bo piştgirîkirina pirtûkxaneya zlib tê bikar anîn. Pirtûkxane li WebAssembly hatiye belavkirin û barkirin, û Emscripten wê di projeyê de vedihewîne.

Pergala pelê virtual ya Emscrippten tê çalak kirin. Ev POSIX-wek FS, di RAM-ê de di hundurê gerokê de dixebite. Dema ku rûpel tê nûve kirin, bîranîn tê paqij kirin.

Ji bo ku hûn fêm bikin ka çima pergalek pelê ya virtual hewce ye, hêja ye ku hûn awayê ku hûn seqtk ji rêza fermanê dimeşînin bi awayê ku hûn modulek WebAssembly ya berhevkirî dimeşînin berhev bikin.

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

Gihîştina pergala pelê ya virtual pêdivî ye ku ji bo têketina pelê ji nû ve seqtk ji rêzê re neyê nivîsandin. Di vê rewşê de, perçeya daneyê wekî pelek data.fastq di FS-ya virtual de bi banga sereke () seqtk li ser tê xuyang kirin.

Li vir mîmariya nû ye:

Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Wêne nîşan dide ku li şûna hesabên di mijara geroka sereke de, WebWorkers. Vê rêbazê dihêle hûn hesabên di xêzek paşîn de bikin bêyî ku bandorê li bersivdana gerokê bike. Welê, kontrolkerê WebWorker Karker dest pê dike, danûstendina xwe bi mijara sereke re rêve dibe.

Fermana seqtk bi karûbarê Worker li ser pelê lêkirî tê xebitandin. Piştî qedandina darvekirinê, Karker di forma Sozê de encamek derdixe. Dema ku peyamek ji hêla mijara sereke ve tê wergirtin, encam ji bo nûvekirina grafîkan tê bikar anîn. Û bi vî awayî di çend dubareyan de.

Li ser performansa WebAssembly çi ye?

Ji bo ku guheztina performansê binirxîne, tîmê projeyê operasyonên xwendinê ji bo parametreya duyemîn bikar anîn. Wextê ku ji bo avakirina grafikên înteraktîf digire nayê hesibandin ji ber ku her du pêkanîn JavaScript bikar tînin.

Dema ku çareseriya derveyî-çarçoveyê bikar tîne, zêdebûna performansê neh carî bû.

Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Ev encamek hêja ye, lê, wekî ku xuya dibe, fersendek heye ku wê jî xweşbîn bike. Rastî ev e ku hejmareke mezin ji encamên analîza QC ji hêla seqtk ve nayên bikar anîn, ji ber vê yekê ew dikarin werin jêbirin. Ger hûn wiya bikin, encam li gorî JS 13 carî çêtir dibe.

Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Ew bi tenê şîrovekirina fermanên printf () hate bidestxistin.

Lê ev ne hemû ye. Rastî ev e ku di vê qonaxê de, fastq.bio encamên analîzê bi gazîkirina fonksiyonên C-ya cihê distîne. Her yek ji wan komek taybetmendiyên xwe hesab dike, da ku her perçeyek pelê du caran were xwendin.

Ji bo ku hûn li dora vê pirsgirêkê derbikevin, biryar hate girtin ku du fonksiyonan di yek de hev bikin. Di encamê de, hilberîna 20 carî zêde bû.

Çawa me WebAssembly bikar anî da ku serîlêdanek malperê 20 carî bilez bike

Hêjayî gotinê ye ku encamek wusa berbiçav her gav nikare were bidestxistin. Di hin rewşan de, performans dê dakeve, ji ber vê yekê hêja ye ku her dozê binirxînin.

Wekî encamek, em dikarin bibêjin ku Wasm ji bo baştirkirina performansa serîlêdanê fersendek peyda dike, lê hûn hewce ne ku wê bi aqilmendî bikar bînin.

Skillbox pêşniyar dike:

Source: www.habr.com

Add a comment