WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

ይህ መጣጥፍ የጃቫ ስክሪፕት ስሌቶችን በ WebAssembly በመተካት የአሳሽ አፕሊኬሽን የማፍጠን ጉዳይን ያብራራል።

WebAssembly - ምንድን ነው?

ባጭሩ ይህ ቁልል ላይ ለተመሰረተ ቨርችዋል ማሽን የሁለትዮሽ መመሪያ ቅርጸት ነው። Wasm (አጭር ስም) ብዙውን ጊዜ የፕሮግራም ቋንቋ ተብሎ ይጠራል, ግን አይደለም. የመመሪያው ቅርጸት ከጃቫስክሪፕት ጋር በአሳሹ ውስጥ ይከናወናል.

እንደ C / C ++ ፣ Rust ፣ Go ባሉ ቋንቋዎች ምንጮችን በማጠናቀር WebAssembly ማግኘት መቻሉ አስፈላጊ ነው። ስታትስቲካዊ ትየባ እና ጠፍጣፋ ሜሞሪ ሞዴል የሚባለውን ይጠቀማል። ከላይ እንደተገለፀው ኮዱ በተጨናነቀ ሁለትዮሽ ፎርማት ውስጥ ተቀምጧል፣ ይህም አፕሊኬሽኑ ከትእዛዝ መስመሩ የሄደ ያህል ፈጣን ያደርገዋል። እነዚህ ባህሪያት የ WebAssembly ተወዳጅነት እንዲጨምር ምክንያት ሆኗል.

እኛ እናስታውስዎታለን- ለሁሉም የ "ሀብር" አንባቢዎች - የ "Habr" የማስተዋወቂያ ኮድን በመጠቀም በማንኛውም የ Skillbox ኮርስ ውስጥ ሲመዘገቡ የ 10 ሩብልስ ቅናሽ.

Skillbox ይመክራል፡ ተግባራዊ ኮርስ "ሞባይል ገንቢ PRO".

Wasm በአሁኑ ጊዜ በብዙ አፕሊኬሽኖች ውስጥ ጥቅም ላይ ይውላል፣ እንደ Doom 3 ካሉ ጨዋታዎች እስከ እንደ አውቶካድ እና Figma ባሉ በድር ወደተተላለፉ መተግበሪያዎች። Wasm እንደ አገልጋይ አልባ ኮምፒውቲንግ ባሉ መስኮችም ይተገበራል።

ይህ መጣጥፍ የትንታኔ ድር አገልግሎትን ለማፋጠን Wasm የመጠቀም ምሳሌን ይሰጣል። ግልፅ ለማድረግ፣ በC የተጻፈ የስራ ማመልከቻ ወስደናል፣ እሱም ወደ WebAssembly ይጠናቀቃል። ውጤቱ ዝቅተኛ አፈጻጸም JS ክፍሎችን ለመተካት ጥቅም ላይ ይውላል.

የመተግበሪያ ለውጥ

ምሳሌው ለጄኔቲክስ ባለሙያዎች የታሰበውን fastq.bio አሳሽ አገልግሎት ይጠቀማል። መሳሪያው የዲኤንኤ ቅደም ተከተል (ዲኮዲንግ) ጥራትን ለመገምገም ይፈቅድልዎታል.

በተግባር ላይ ያለ አንድ ምሳሌ ይኸውና፡

WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

የሂደቱ ዝርዝሮች ልዩ ላልሆኑ ሰዎች በጣም ውስብስብ ስለሆኑ መሰጠት አያስፈልግም, ነገር ግን በአጭሩ ሳይንቲስቶች የዲኤንኤ ቅደም ተከተል ሂደት በተቀላጠፈ ሁኔታ መከናወኑን እና ምን ችግሮች እንደተፈጠሩ ለመረዳት ከላይ ያለውን የመረጃ ቋት መጠቀም ይችላሉ.

ይህ አገልግሎት አማራጮች አሉት, የዴስክቶፕ ፕሮግራሞች. ነገር ግን fastq.bio ውሂቡን በምስል በመመልከት ነገሮችን እንዲያፋጥኑ ያስችልዎታል። በአብዛኛዎቹ ሁኔታዎች, ከትዕዛዝ መስመሩ ጋር መስራት መቻል አለብዎት, ነገር ግን ሁሉም የጄኔቲክስ ባለሙያዎች አስፈላጊው ልምድ የላቸውም.

ሁሉም ነገር በቀላሉ ይሰራል. ግብአቱ እንደ የጽሑፍ ፋይል የቀረበ ውሂብ ነው። ይህ ፋይል በልዩ የቅደም ተከተል መሣሪያዎች የተፈጠረ ነው። ፋይሉ የዲኤንኤ ቅደም ተከተሎች ዝርዝር እና ለእያንዳንዱ ኑክሊዮታይድ የጥራት ነጥብ ይዟል። የፋይል ቅርጸቱ .fastq ነው, ስለዚህም የአገልግሎቱ ስም.

በጃቫስክሪፕት መተግበር

ከ fastq.bio ጋር ሲሰራ ለተጠቃሚው የመጀመሪያው እርምጃ ተገቢውን ፋይል መምረጥ ነው. የፋይል ነገርን በመጠቀም አፕሊኬሽኑ የዘፈቀደ ናሙና ከፋይሉ ላይ ያነባል እና ይህን ስብስብ ያስኬዳል። እዚህ የጃቫ ስክሪፕት ተግባር ቀላል የሕብረቁምፊ ስራዎችን ማከናወን እና አርቢዎችን ማስላት ነው። ከመካከላቸው አንዱ በተለያዩ የዲ ኤን ኤ ቁርጥራጮች ላይ ኑክሊዮታይድ A, C, G እና T ቁጥር ነው.

አስፈላጊዎቹን አመልካቾች ካሰሉ በኋላ, Plotly.js በመጠቀም ይታያሉ, እና አገልግሎቱ በአዲስ የውሂብ ናሙና መስራት ይጀምራል. የ UX ጥራትን ለማሻሻል ወደ ቁርጥራጮች መከፋፈል ይከናወናል. ሁሉንም መረጃዎች በአንድ ጊዜ ከሰሩ, ሂደቱ ለተወሰነ ጊዜ ይቆማል, ምክንያቱም የቅደም ተከተል ውጤቶች ያላቸው ፋይሎች በመቶዎች የሚቆጠሩ ጊጋባይት የፋይል ቦታን ይይዛሉ. በሌላ በኩል አገልግሎቱ ከ 0,5 እስከ 1 ሜባ መጠን ያላቸውን የውሂብ ክፍሎችን ይወስዳል እና ከእነሱ ጋር ደረጃ በደረጃ ይሰራል, ግራፊክ ውሂብን ይገነባል.

የሚሠራው በዚህ መንገድ ነው -

WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

ቀይ ሬክታንግል ለሥርዓት የሕብረቁምፊ ልወጣ ስልተ ቀመር ይዟል። ይህ በጣም በስሌት የተጫነው የአገልግሎቱ ክፍል ነው። በ Wasm ለመተካት መሞከር ጠቃሚ ነው.

WebAssembly በመሞከር ላይ

Wasm የመጠቀም እድልን ለመገምገም የፕሮጀክቱ ቡድን በ fastq ፋይሎች ላይ በመመስረት QC ሜትሪክ (QC - የጥራት ቁጥጥር) ለመፍጠር ዝግጁ የሆኑ መፍትሄዎችን መፈለግ ጀመረ። ፍለጋው የተካሄደው በ C, C ++ ወይም Rust በተጻፉ መሳሪያዎች መካከል ነው, ስለዚህም ኮዱን ወደ WebAssembly መላክ ይቻል ነበር. በተጨማሪም መሳሪያው "ጥሬ" መሆን የለበትም, ቀደም ሲል በሳይንቲስቶች የተፈተነ አገልግሎት ያስፈልጋል.

በውጤቱም, ምርጫው የሚደግፈው ነበር seqtk. አፕሊኬሽኑ በጣም ታዋቂ ነው፣ ክፍት ምንጭ ነው፣ የምንጭ ቋንቋው ሲ ነው።

ወደ Wasm ከመቀየርዎ በፊት ለዴስክቶፕ seqtk የማጠናቀር መርህን ማየት አለብዎት። በ Makefile መሠረት፣ የሚያስፈልገው እዚህ አለ፡-

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

በመርህ ደረጃ፣ Emscriptenን በመጠቀም seqtk ማጠናቀር ይችላሉ። እዚያ ከሌለ, እናልፋለን. ዶከር መንገድ.

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

ከተፈለገ እራስዎ መሰብሰብ ይችላሉግን ይህ ጊዜ ይወስዳል.

በመያዣው ውስጥ፣ emccን እንደ gcc በቀላሉ መውሰድ ይችላሉ።

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

አነስተኛ ለውጦች:

Emscripten ወደ ሁለትዮሽ ፋይል ከማውጣት ይልቅ ፋይሎችን ለማመንጨት .wasm እና .jsን ይጠቀማል ይህም የWebAssemby ሞጁሉን ለማስኬድ ይጠቅማል።

የUSE_ZLIB ባንዲራ የዝሊብ ቤተ-መጽሐፍትን ለመደገፍ ጥቅም ላይ ይውላል። ቤተ መፃህፍቱ ተሰራጭቶ ወደ WebAssembly ተላልፏል፣ እና Emscripten በፕሮጀክቱ ውስጥ ያካትታል።

የEmscriptpten ምናባዊ ፋይል ስርዓት ነቅቷል። ይህ POSIX-እንደ FSበአሳሹ ውስጥ በ RAM ውስጥ ይሰራል። ገጹ ሲታደስ ማህደረ ትውስታው ይጸዳል።

ቨርቹዋል የፋይል ሲስተም ለምን እንደሚያስፈልግ ለመረዳት ከትዕዛዝ መስመሩ ላይ seqtkን የሚያስኬዱበትን መንገድ ከተጠናቀረ WebAssembly ሞጁል ጋር ማወዳደር ተገቢ ነው።

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

የፋይል ግቤት ሳይሆን seqtk ለህብር ግቤት እንደገና ላለመፃፍ የቨርቹዋል ፋይል ስርዓቱን ማግኘት አስፈላጊ ነው። በዚህ አጋጣሚ የዳታ ክፋይ እንደ data.fastq ፋይል በምናባዊ የፋይል ስርዓት ውስጥ ወደ ዋና() ሴክትክ ጥሪ ጋር ይታያል።

አዲሱ አርክቴክቸር እነሆ፡-

WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

ስዕሉ እንደሚያሳየው በዋናው አሳሽ ክር ውስጥ ከማስላት ይልቅ ይጠቀማል የድር ሰራተኞች. ይህ ዘዴ የአሳሹን ምላሽ ሳይቀንስ በጀርባ ክር ላይ ስሌቶችን ለማከናወን ያስችላል። ደህና፣ የዌብወርከር ተቆጣጣሪ ሰራተኛውን ይጀምራል፣ ከዋናው ክር ጋር ያለውን መስተጋብር ያስተዳድራል።

የ seqtk ትዕዛዙ የሚሄደው በተሰቀለ ፋይል ላይ ካለው ሰራተኛ ጋር ነው። አፈፃፀም ከተጠናቀቀ በኋላ ሰራተኛው ውጤቱን በቃል ኪዳን መልክ ይሰጣል. መልእክቱ በዋናው ክር ሲደርስ ውጤቱ ግራፎችን ለማዘመን ጥቅም ላይ ይውላል. እና ለብዙ ድግግሞሾች።

ስለ WebAssembly አፈጻጸምስ?

የአፈፃፀም ለውጥን ለመገምገም የፕሮጀክት ቡድኑ የማንበብ ስራዎችን በሰከንድ መለኪያ ተጠቅሟል። በሁለቱም አተገባበር ውስጥ ጃቫ ስክሪፕት ጥቅም ላይ ስለሚውል በይነተገናኝ የዕቅድ ጊዜ ግምት ውስጥ አይገባም።

ከሳጥን ውጭ ያለውን መፍትሄ ሲጠቀሙ የአፈፃፀም ትርፉ ዘጠኝ ጊዜ ነበር.

WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

ይህ በጣም ጥሩ ውጤት ነው, ነገር ግን እንደ ተለወጠ, እሱን ለማመቻቸት እድሉ አለ. እውነታው ግን ብዙ ቁጥር ያላቸው የ QC ትንተና ውጤቶች በ seqtk ጥቅም ላይ አይውሉም, ስለዚህ ሊሰረዙ ይችላሉ. ይህ ከተሰራ, ውጤቱ ከ JS 13 እጥፍ ይበልጣል.

WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

የ printf() ትዕዛዞችን በቀላሉ አስተያየት በመስጠት ነው የተገኘው።

ግን ያ ብቻ አይደለም። ነጥቡ በዚህ ደረጃ fastq.bio የተለያዩ የ C ተግባራትን በመጥራት የትንተናውን ውጤት ይቀበላል.እያንዳንዳቸው የየራሳቸውን ባህሪያት ያሰላሉ, ስለዚህም እያንዳንዱ የፋይሉ ቁራጭ ሁለት ጊዜ ይነበባል.

ይህንን ችግር ለመፍታት ሁለቱን ተግባራት በአንድ ላይ ለማጣመር ተወስኗል. በውጤቱም, ምርታማነት በ 20 እጥፍ ጨምሯል.

WebAssemblyን በመጠቀም የድር መተግበሪያን 20 ጊዜ እንዴት እንዳፋጠንነው

እንዲህ ዓይነቱ አስደናቂ ውጤት ሁልጊዜ ሊገኝ እንደማይችል ልብ ሊባል ይገባል. በአንዳንድ ሁኔታዎች አፈጻጸሙ ይቀንሳል, ስለዚህ እያንዳንዱን ልዩ ጉዳይ መገምገም ጠቃሚ ነው.

እንደ ማጠቃለያ, Wasm የመተግበሪያውን አፈፃፀም ለማሻሻል እድል ይሰጣል, ግን በጥበብ ጥቅም ላይ መዋል አለበት ማለት እንችላለን.

Skillbox ይመክራል፡

ምንጭ: hab.com

አስተያየት ያክሉ