Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Бул макалада JavaScript эсептөөлөрүн WebAssembly менен алмаштыруу аркылуу серепчи тиркемесин тездетүү маселеси талкууланат.

WebAssembly - бул эмне?

Кыскача айтканда, бул стекке негизделген виртуалдык машина үчүн бинардык нускама форматы. Wasm (кыска аты) көбүнчө программалоо тили деп аталат, бирок андай эмес. Көрсөтмө формат JavaScript менен бирге браузерде аткарылат.

WebAssembly C/C++, Rust, Go сыяктуу тилдердеги булактарды чогултуу аркылуу алынышы маанилүү. Бул жерде статистикалык терүү жана жалпак эс тутум модели колдонулат. Код, жогоруда айтылгандай, компакт экилик форматта сакталып, аны буйрук сабын колдонуп тиркемени иштеткендей ылдам кылат. Бул мүмкүнчүлүктөр WebAssembly популярдуулугунун өсүшүнө алып келди.

Биз эсиңизге салабыз: "Хабрдын" бардык окурмандары үчүн - "Habr" промо-кодун колдонуу менен каалаган Skillbox курсуна катталганда 10 000 рубль арзандатуу.

Skillbox сунуштайт: Практикалык курс "Мобилдик иштеп чыгуучу PRO".

Учурда Wasm көптөгөн тиркемелерде, Doom 3 сыяктуу оюндардан баштап, Autocad жана Figma сыяктуу веб-порталдарга чейин колдонулат. Wasm ошондой эле серверсиз эсептөө сыяктуу тармактарда колдонулат.

Бул макалада аналитика желе кызматын тездетүү үчүн Wasm колдонуунун мисалы келтирилген. Түшүнүктүү болуу үчүн биз C тилинде жазылган жумушчу тиркемени алдык, ал WebAssemblyге түзүлөт. Натыйжа JSтин начар иштеген бөлүмдөрүн алмаштыруу үчүн колдонулат.

Колдонмонун трансформациясы

Мисалда генетиктерге арналган fastq.bio браузер кызматы колдонулат. Курал ДНК секвенирлөөнүн сапатын баалоого мүмкүндүк берет (дешифрлөө).

Бул жерде колдонуунун бир мисалы болуп саналат:

Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Процесстин чоо-жайы адис эместер үчүн өтө татаал, бирок кыскача айтканда, окумуштуулар ДНКнын секвенирлөө процесси жылмакай өткөнүн жана кандай көйгөйлөр пайда болгонун түшүнүү үчүн жогорудагы инфографикадан пайдалана алышат.

Бул кызматтын альтернативалары, рабочий программалары бар. Бирок fastq.bio сизге маалыматтарды визуализациялоо менен жумушуңузду тездетүүгө мүмкүндүк берет. Көпчүлүк башка учурларда, сиз буйрук сабы менен иштей билүү керек, бирок бардык генетиктер зарыл тажрыйбага ээ эмес.

Баары жөнөкөй иштейт. Киргизүү текст файлы түрүндө берилген маалыматтар. Бул файл атайын секвенирлөө куралдары менен түзүлөт. Файлда ДНК тизмегинин тизмеси жана ар бир нуклеотид үчүн сапат баллы бар. Файлдын форматы .fastq, ошондуктан кызмат өзүнүн атын алган.

JavaScript'те ишке ашыруу

fastq.bio менен иштөөдө колдонуучунун биринчи кадамы тиешелүү файлды тандоо болуп саналат. File объектинин жардамы менен, колдонмо файлдан маалыматтардын туш келди үлгүсүн окуйт жана ал пакетти иштетет. Бул жерде JavaScriptтин милдети жөнөкөй сап операцияларын аткаруу жана метрикаларды эсептөө. Алардын бири - ар кандай ДНК фрагменттериндеги A, C, G жана T нуклеотиддеринин саны.

Керектүү көрсөткүчтөрдү эсептеп чыккандан кийин, алар Plotly.js аркылуу визуализацияланат жана кызмат жаңы маалымат үлгүсү менен иштей баштайт. Бөлүштүрүү UX сапатын жакшыртуу үчүн жасалат. Эгер сиз бир эле учурда бардык маалыматтар менен иштесеңиз, процесс бир нече убакытка тоңуп калат, анткени секвенирлөө натыйжалары бар файлдар жүздөгөн гигабайт файл мейкиндигин ээлейт. Кызмат көлөмү 0,5тен 1 МБга чейин болгон маалыматтардын бөлүктөрүн алат жана алар менен кадам сайын иштейт, графикалык маалыматтарды түзөт.

Бул жерде иштейт:

Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Кызыл тик бурчтук визуализацияны алуу үчүн сапты өзгөртүү алгоритмин камтыйт. Бул кызматтын эң эсептөө интенсивдүү бөлүгү. Аны Wasm менен алмаштырууга аракет кылуу керек.

WebAssembly сыналууда

Wasm колдонуу мүмкүнчүлүгүн баалоо үчүн долбоордун командасы fastq файлдарынын негизинде QC метрикасын (QC - сапатты көзөмөлдөө) түзүү үчүн даяр чечимдерди издей баштады. Издөө C, C++ же Rust тилдеринде жазылган инструменттер арасында жүргүзүлдү, андыктан кодду WebAssemblyге өткөрүү мүмкүн болду. Мындан тышкары, курал "чийки" болбошу керек, буга чейин окумуштуулар тарабынан сыналган кызмат талап кылынган.

Натыйжада, тандоо пайдасына жасалган seqtk. Тиркеме абдан популярдуу, бул ачык булак, булак тили C.

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

келсе, Сиз аны өзүңүз чогулта аласыз, бирок бул убакытты талап кылат.

Контейнердин ичинде сиз gccге альтернатива катары emccти оңой колдоно аласыз:

# 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 желеги zlib китепканасын колдоо үчүн колдонулат. Китепкана бөлүштүрүлдү жана WebAssemblyге көчүрүлдү жана Emscripten аны долбоорго камтыйт.

Emscrippten виртуалдык файл системасы жандырылды. Бул POSIX сыяктуу FS, браузердин ичиндеги RAMда иштейт. Барак жаңыланганда, эстутум тазаланат.

Виртуалдык файл тутумунун эмне үчүн керек экенин түшүнүү үчүн, seqtkти буйрук сабынан иштетүү ыкмасын компиляцияланган WebAssembly модулун иштетүү ыкмасы менен салыштыруу керек.

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

Виртуалдык файл тутумуна кирүү мүмкүнчүлүгүн алуу файл киргизүүгө эмес, сап үчүн seqtk кайра жазбаш үчүн зарыл. Бул учурда, берилиштердин фрагменти виртуалдык FSде main() seqtk чалуусу менен data.fastq файлы катары көрсөтүлөт.

Бул жерде жаңы архитектура:

Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Сүрөттө негизги серепчи жиптеги эсептөөлөрдүн ордуна, WebWorkers. Бул ыкма браузердин жооп берүү жөндөмдүүлүгүнө таасирин тийгизбестен, фондук жипте эсептөөлөрдү жүргүзүүгө мүмкүндүк берет. Ооба, WebWorker контроллери анын негизги жип менен өз ара аракеттенүүсүн башкарып, Workerди баштайт.

seqtk буйругу орнотулган файлдагы Worker аркылуу иштетилет. Аткаруу аяктагандан кийин, Жумушчу Убада түрүндө жыйынтык чыгарат. Билдирүү негизги жип тарабынан кабыл алынганда, натыйжа графиктерди жаңыртуу үчүн колдонулат. Жана дагы бир нече итерацияда.

WebAssembly аткаруу жөнүндө эмне айтууга болот?

Натыйжалуулуктун өзгөрүшүн баалоо үчүн долбоордун командасы секундасына окуу операцияларын колдонду. Интерактивдүү графиктерди курууга кеткен убакыт эсепке алынбайт, анткени эки ишке ашырууда тең JavaScript колдонулат.

Кутудан чыгарылган чечимди колдонууда өндүрүмдүүлүк тогуз эсе өстү.

Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Бул эң сонун жыйынтык, бирок, белгилүү болгондой, аны оптималдаштырууга да мүмкүнчүлүк бар. Чындыгында, көп сандагы QC анализинин натыйжалары seqtk тарабынан колдонулбайт, ошондуктан аларды жок кылууга болот. Эгер муну кылсаңыз, натыйжа JSге салыштырмалуу 13 эсеге жакшырат.

Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Бул жөн гана printf() буйруктарын комментарийлөө аркылуу жетишилген.

Бирок бул баары эмес. Чындыгында, бул этапта fastq.bio ар кандай C функцияларын чакырып талдоо натыйжаларын алат.Алардын ар бири өзүнүн мүнөздөмөлөрүнүн топтомун эсептейт, ошондуктан файлдын ар бир фрагменти эки жолу окулат.

Бул көйгөйдү чечүү үчүн эки функцияны бир функцияга бириктирүү чечими кабыл алынды. Натыйжада эмгек ендурумдуулугу 20 эсеге жогорулады.

Веб тиркемесин 20 эсе тездетүү үчүн WebAssembly кантип колдондук

Мындай көрүнүктүү натыйжага дайыма эле жетишүү мүмкүн эмес экенин белгилей кетүү керек. Кээ бир учурларда, өндүрүмдүүлүк төмөндөйт, андыктан ар бир ишти баалоо керек.

Жыйынтыктап айтканда, Wasm колдонмонун иштешин жакшыртууга мүмкүнчүлүк берет деп айта алабыз, бирок сиз аны акылдуулук менен колдонушуңуз керек.

Skillbox сунуштайт:

Source: www.habr.com

Комментарий кошуу