Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

Wannan labarin yana magana ne akan wani lamari don hanzarta aikace-aikacen burauza ta hanyar maye gurbin lissafin JavaScript tare da WebAssembly.

WebAssembly - menene?

A taƙaice, wannan sigar koyarwa ce ta binary don injin kama-da-wane na tushen tari. Wasm (gajeren suna) galibi ana kiransa da yaren shirye-shirye, amma ba haka bane. Ana aiwatar da tsarin koyarwa a cikin mai bincike tare da JavaScript.

Yana da mahimmanci cewa ana iya samun WebAssembly ta hanyar tattara tushe a cikin harsuna kamar C/C++, Tsatsa, Go. Anan ana amfani da bugun ƙididdiga da abin da ake kira ƙirar ƙwaƙwalwar ajiya. Lambar, kamar yadda aka ambata a sama, ana adana shi a cikin ƙaramin tsari na binary, yana mai da shi kusan saurin aiwatar da aikace-aikacen ta amfani da layin umarni. Waɗannan iyawar sun haifar da haɓakar shaharar WebAssembly.

Muna tunatarwa: ga duk masu karatu na "Habr" - rangwame na 10 rubles lokacin yin rajista a kowane kwas na Skillbox ta amfani da lambar talla "Habr".

Skillbox yana ba da shawarar: Hakikanin hanya "Mobile Developer PRO".

A halin yanzu, ana amfani da Wasm a aikace-aikace da yawa, daga wasanni kamar Doom 3 zuwa aikace-aikacen da aka aika ta yanar gizo kamar Autocad da Figma. Ana kuma amfani da Wasm a irin waɗannan wuraren kamar kwamfuta mara amfani.

Wannan labarin yana ba da misali na amfani da Wasm don haɓaka sabis na yanar gizo na nazari. Don bayyanawa, mun ɗauki aikace-aikacen aiki da aka rubuta a cikin C, wanda aka haɗa cikin Gidan Yanar Gizo. Za a yi amfani da sakamakon don maye gurbin sassan JS marasa aiki.

Canjin Aikace-aikacen

Misalin zai yi amfani da sabis ɗin mai lilo na fastq.bio, wanda aka yi niyya don masu ilimin halitta. Kayan aiki yana ba ku damar kimanta ingancin jerin DNA (deciphering).

Ga misalin aikace-aikacen da ke aiki:

Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

Cikakkun bayanai na tsarin ba su cancanci shiga ba saboda suna da rikitarwa ga waɗanda ba ƙwararru ba, amma a taƙaice, masana kimiyya na iya amfani da bayanan da ke sama don fahimtar ko tsarin jerin DNA ya tafi daidai da matsalolin da suka taso.

Wannan sabis ɗin yana da madadin, shirye-shiryen tebur. Amma fastq.bio yana ba ku damar hanzarta aikinku ta hanyar hango bayanan. A mafi yawancin lokuta, kuna buƙatar samun damar yin aiki tare da layin umarni, amma ba duk masu ilimin halitta suna da ƙwarewar da suka dace ba.

Komai yana aiki a sauƙaƙe. An gabatar da shigarwar bayanan ta hanyar fayil ɗin rubutu. An samar da wannan fayil ta kayan aikin jeri na musamman. Fayil ɗin ya ƙunshi jerin jerin DNA da ƙimar ƙimar kowane nucleotide. Tsarin fayil ɗin shine .fastq, wanda shine dalilin da yasa sabis ɗin ya sami sunansa.

Aiwatar a cikin JavaScript

Mataki na farko na mai amfani lokacin aiki tare da fastq.bio shine don zaɓar fayil ɗin da ya dace. Yin amfani da abin Fayil, aikace-aikacen yana karanta samfurin bazuwar bayanai daga fayil da aiwatar da tsari. Aikin JavaScript anan shine aiwatar da ayyuka masu sauƙi da kirga ma'auni. Ɗayan su shine adadin nucleotides A, C, G da T akan guntuwar DNA daban-daban.

Bayan ƙididdige alamun da ake buƙata, ana ganin su ta amfani da Plotly.js, kuma sabis ɗin ya fara aiki tare da sabon samfurin bayanai. Ana yin chunking don inganta ingancin UX. Idan kun yi aiki tare da duk bayanan lokaci ɗaya, tsarin zai daskare na ɗan lokaci, tun da fayilolin da ke da sakamakon sakamakon suna ɗaukar ɗaruruwan gigabytes na sararin fayil. Sabis ɗin yana ɗaukar yanki na bayanai masu girma daga 0,5 zuwa 1 MB kuma yana aiki tare da su mataki-mataki, gina bayanan hoto.

Ga yadda yake aiki:

Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

Jajayen murabba'i yana ƙunshe da algorithm na canza kirtani don samun gani. Wannan shine mafi girman ɓangaren sabis ɗin. Yana da daraja ƙoƙarin maye gurbin shi da Wasm.

Gwajin Yanar Gizo

Don tantance yiwuwar amfani da Wasm, ƙungiyar aikin ta fara nemo hanyoyin da aka shirya don ƙirƙirar ma'aunin QC (QC - kula da inganci) dangane da fayilolin fastq. An gudanar da binciken ne a cikin kayan aikin da aka rubuta a cikin C, C++ ko Tsatsa, ta yadda zai yiwu a shigar da lambar zuwa WebAssembly. Bugu da kari, bai kamata kayan aikin ya zama “dannye” ba, ana buƙatar sabis ɗin da masana kimiyya suka gwada.

A sakamakon haka, an zaɓi zaɓi a cikin ni'imar seqtk. Aikace-aikacen ya shahara sosai, buɗaɗɗen tushe ne, harshen tushen shine C.

Kafin juyawa zuwa Wasm, yana da kyau a duba ka'idar tattarawa na seqtk don tebur. Bisa ga Makefile, ga abin da kuke buƙata:

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

A ka'ida, zaku iya tattara seqtk ta amfani da Emscripten. Idan ba a can, mu yi. Hoton Docker.

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

Idan ana so Kuna iya haɗa shi da kanku, amma yana ɗaukar lokaci.

A cikin akwati, zaka iya amfani da emcc cikin sauƙi azaman madadin gcc:

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

Ƙananan canje-canje:

Maimakon fitarwa zuwa fayil ɗin binary, Emscripten yana amfani da .wasm da .js don samar da fayiloli, waɗanda ake amfani da su don gudanar da tsarin WebAssemby.

Ana amfani da tutar USE_ZLIB don tallafawa ɗakin karatu na zlib. An rarraba ɗakin karatu kuma an tura shi zuwa WebAssembly, kuma Emscripten ya haɗa da shi a cikin aikin.

An kunna tsarin fayil ɗin kama-da-wane na Emscrippten. Wannan POSIX-kamar FS, yana aiki a cikin RAM a cikin browser. Lokacin da aka sabunta shafin, ana share ƙwaƙwalwar ajiya.

Don fahimtar dalilin da yasa ake buƙatar tsarin fayil na kama-da-wane, yana da kyau a kwatanta yadda kuke tafiyar da seqtk daga layin umarni da yadda kuke gudanar da tsarin WebAssembly da aka haɗa.

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

Samun dama ga tsarin fayil ɗin kama-da-wane ya zama dole don kar a sake rubuta seqtk don kirtani maimakon shigar da fayil. A wannan yanayin, ana nuna guntun bayanan azaman fayil ɗin data.fastq a cikin FS kama-da-wane tare da kira zuwa babban () seqtk akansa.

Ga sabon gine-gine:

Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

Adadin ya nuna cewa maimakon lissafi a cikin babban zaren browser, Masu aikin gidan yanar gizo. Wannan hanyar tana ba ku damar yin ƙididdigewa a cikin zaren baya ba tare da shafar amsawar mai bincike ba. To, mai sarrafa WebWorker yana fara Ma'aikaci, yana sarrafa hulɗar sa tare da babban zaren.

Ana gudanar da umarnin seqtk ta amfani da Ma'aikaci akan fayil ɗin da aka ɗora. Bayan kammala kisa, Ma'aikacin ya samar da sakamako ta hanyar Alkawari. Lokacin da babban zaren ya karɓi saƙo, ana amfani da sakamakon don sabunta jadawali. Da sauransu a cikin maimaitawa da yawa.

Me game da aikin WebAssembly?

Don kimanta canjin aiki, ƙungiyar aikin ta yi amfani da ayyukan karantawa a kowane siga na biyu. Ba'a la'akari da lokacin da ake ɗauka don gina hotuna masu mu'amala da juna tunda duka aiwatarwa suna amfani da JavaScript.

Lokacin amfani da mafita na waje, haɓaka aikin ya kasance sau tara.

Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

Wannan kyakkyawan sakamako ne, amma, kamar yadda ya fito, akwai damar inganta shi kuma. Gaskiyar ita ce babban adadin sakamakon binciken QC ba sa amfani da seqtk, don haka ana iya share su. Idan kayi haka, sakamakon yana inganta ta sau 13 idan aka kwatanta da JS.

Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

An cimma ta ta hanyar yin sharhi kawai ga umarnin printf().

Amma ba haka kawai ba. Gaskiyar ita ce, a wannan mataki, fastq.bio yana karɓar sakamakon bincike ta hanyar kiran ayyuka daban-daban na C. Kowannensu yana ƙididdige nau'in halayensa, don haka kowane guntu na fayil ana karanta sau biyu.

Don magance wannan matsala, an yanke shawarar haɗa ayyuka biyu zuwa ɗaya. A sakamakon haka, yawan aiki ya karu da sau 20.

Yadda muka yi amfani da WebAssembly don haɓaka aikace-aikacen yanar gizo sau 20

Ya kamata a lura da cewa irin wannan gagarumin sakamako ba za a iya cimma ko da yaushe. A wasu lokuta, aikin zai ragu, don haka yana da daraja a kimanta kowane harka.

A matsayin ƙarshe, zamu iya cewa Wasm yana ba da dama don inganta aikin aikace-aikacen, amma kuna buƙatar amfani da shi cikin hikima.

Skillbox yana ba da shawarar:

source: www.habr.com

Add a comment