اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

هي آرٽيڪل هڪ ڪيس تي بحث ڪري ٿو برائوزر ايپليڪيشن کي تيز ڪرڻ لاءِ JavaScript حسابن کي WebAssembly سان تبديل ڪندي.

WebAssembly - اهو ڇا آهي؟

مختصر ۾، هي هڪ اسٽيڪ تي ٻڌل ورچوئل مشين لاءِ بائنري هدايتون فارميٽ آهي. Wasm (مختصر نالو) کي اڪثر پروگرامنگ ٻولي سڏيو ويندو آهي، پر اهو ناهي. هدايتون فارميٽ برائوزر ۾ جاوا اسڪرپٽ سان گڏ ڪيو ويندو آهي.

اهو ضروري آهي ته WebAssembly ٻولين ۾ ذريعن کي گڏ ڪري حاصل ڪري سگهجي ٿو جهڙوڪ C/C++, Rust, Go. هتي شمارياتي ٽائپنگ ۽ نام نهاد فليٽ ميموري ماڊل استعمال ٿيندا آهن. ڪوڊ، جيئن مٿي ذڪر ڪيو ويو آهي، هڪ ڪمپيڪٽ بائنري فارميٽ ۾ محفوظ ڪيو ويو آهي، ان کي ڪمانڊ لائن استعمال ڪندي ايپليڪيشن کي هلائڻ جي طور تي لڳ ڀڳ تيز بڻائي ٿو. اهي صلاحيتون WebAssembly جي مقبوليت ۾ واڌ جو سبب بڻيون آهن.

اسان توهان کي ياد ڏياريون ٿا: "Habr" جي سڀني پڙهندڙن لاءِ - 10 روبل جي رعايت جڏهن "Habr" پروموشنل ڪوڊ استعمال ڪندي ڪنهن به اسڪل باڪس ڪورس ۾ داخلا.

Skillbox سفارش ڪري ٿو: عملي ڪورس "موبائل ڊولپر پرو".

في الحال، Wasm ڪيترن ئي ايپليڪيشنن ۾ استعمال ڪيو ويندو آهي، رانديون جهڙوڪ Doom 3 کان وٺي ويب پورٽ ٿيل ايپليڪيشنن جهڙوڪ Autocad ۽ Figma تائين. Wasm پڻ استعمال ڪيو ويندو آهي اهڙن علائقن ۾ سرور بي ترتيب ڪمپيوٽنگ.

هي آرٽيڪل تجزياتي ويب سروس کي تيز ڪرڻ لاءِ Wasm استعمال ڪرڻ جو هڪ مثال فراهم ڪري ٿو. وضاحت لاءِ، اسان ورتو سي ۾ لکيل ڪم ڪندڙ ايپليڪيشن، جيڪا مرتب ٿيل آهي WebAssembly. نتيجو استعمال ڪيو ويندو JS جي غير ڪارڪردگي حصن کي تبديل ڪرڻ لاء.

ايپليڪيشن ٽرانسفارميشن

مثال استعمال ڪندو fastq.bio برائوزر سروس، جنهن جو مقصد جينياتي ماهرن لاءِ آهي. اوزار توهان کي ڊي اين اي جي ترتيب جي معيار جو جائزو وٺڻ جي اجازت ڏئي ٿو.

هتي عمل ۾ ايپليڪيشن جو هڪ مثال آهي:

اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

پروسيس جا تفصيل ان ۾ وڃڻ جي لائق نه آهن ڇاڪاڻ ته اهي غير ماهرن لاءِ ڪافي پيچيده آهن، پر مختصر ۾، سائنسدان مٿي ڄاڻايل انفراگرافڪ کي استعمال ڪري سمجهي سگهن ٿا ته ڇا ڊي اين اي ترتيب ڏيڻ وارو عمل آسانيءَ سان هليو ويو ۽ ڪهڙا مسئلا پيدا ٿيا.

ھن خدمت ۾ متبادل آھن، ڊيسڪ ٽاپ پروگرام. پر fastq.bio توهان کي ڊيٽا کي ڏسڻ سان توهان جي ڪم کي تيز ڪرڻ جي اجازت ڏئي ٿو. ٻين اڪثر ڪيسن ۾، توهان کي ڪمانڊ لائن سان ڪم ڪرڻ جي قابل ٿيڻ جي ضرورت آهي، پر سڀني جينياتي ماهرن وٽ ضروري تجربو ناهي.

سڀ ڪجھ ڪم ڪري ٿو سادو. ان پٽ هڪ ٽيڪسٽ فائل جي صورت ۾ پيش ڪيل ڊيٽا آهي. هي فائل خاص ترتيب ڏيڻ واري اوزار ذريعي ٺاهي وئي آهي. فائل ۾ ڊي اين جي ترتيبن جي هڪ فهرست ۽ هر نيوڪليوٽائيڊ لاءِ معيار جو نمبر شامل آهي. فائل فارميٽ آهي .fastq، جنهن ڪري هن سروس جو نالو پيو.

جاوا اسڪرپٽ ۾ عمل درآمد

صارف جو پهريون قدم جڏهن fastq.bio سان ڪم ڪري رهيو آهي مناسب فائل چونڊڻ آهي. فائل اعتراض کي استعمال ڪندي، ايپليڪيشن فائل مان ڊيٽا جو بي ترتيب نموني پڙهي ٿو ۽ انهي بيچ کي پروسيس ڪري ٿو. JavaScript جو ڪم ھتي آھي سادو اسٽرنگ آپريشن ڪرڻ ۽ حساب ڪتاب ڪرڻ. انهن مان هڪ آهي نيوڪليوٽائڊس A، C، G ۽ T جو تعداد مختلف ڊي اين اي ٽڪڙن تي.

ضروري اشارن جي ڳڻپ ڪرڻ کان پوءِ، اھي Plotly.js استعمال ڪندي نظر اچن ٿا، ۽ خدمت ھڪڙي نئين ڊيٽا نموني سان ڪم ڪرڻ شروع ڪري ٿي. chunking ڪيو ويو آهي UX جي معيار کي بهتر ڪرڻ لاء. جيڪڏهن توهان هڪ ئي وقت ۾ سڀني ڊيٽا سان ڪم ڪريو ٿا، اهو عمل ڪجهه وقت لاءِ منجمد ٿي ويندو، ڇاڪاڻ ته ترتيب واري نتيجن سان فائلون سوين گيگا بائيٽ فائل اسپيس وٺن ٿيون. خدمت 0,5 کان 1 MB تائين سائيز ۾ ڊيٽا جا ٽڪرا کڻي ٿي ۽ انهن سان قدم قدم تي ڪم ڪري ٿي، گرافڪ ڊيٽا ٺاهي ٿي.

اھو آھي اھو ڪيئن ڪم ڪري ٿو:

اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

ڳاڙھو مستطيل بصري حاصل ڪرڻ لاءِ اسٽرنگ ٽرانسفارميشن الگورٿم تي مشتمل آھي. هي خدمت جو سڀ کان وڌيڪ computationally گهڻي حصو آهي. ان کي Wasm سان تبديل ڪرڻ جي ڪوشش ڪرڻ جي قابل آهي.

ٽيسٽنگ WebAssembly

Wasm استعمال ڪرڻ جي امڪان کي جانچڻ لاءِ، پروجيڪٽ ٽيم فاسٽق فائلن جي بنياد تي QC ميٽرڪس (QC - ڪوالٽي ڪنٽرول) ٺاهڻ لاءِ تيار ڪيل حل ڳولڻ شروع ڪيا. ڳولا C, C++ يا Rust ۾ لکيل اوزارن جي وچ ۾ ڪئي وئي، انهي ڪري اهو ممڪن هو ته ڪوڊ کي WebAssembly ڏانهن پورٽ ڪرڻ. ان کان علاوه، اوزار کي "خام" نه هجڻ گهرجي؛ هڪ خدمت جيڪا اڳ ۾ ئي سائنسدانن طرفان آزمائي وئي هئي گهربل هئي.

نتيجي طور، چونڊ جي حق ۾ ڪيو ويو seqtk. ايپليڪيشن ڪافي مشهور آهي، اها اوپن سورس آهي، ماخذ ٻولي آهي C.

Wasm ۾ تبديل ڪرڻ کان پهريان، ڊيسڪ ٽاپ لاءِ seqtk جي تاليف واري اصول کي ڏسڻ جي قابل آهي. ميڪفائل جي مطابق، هتي آهي جيڪو توهان کي گهرجي:

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

اصول ۾، توھان مرتب ڪري سگھو ٿا seqtk استعمال ڪندي Emscripten. جيڪڏهن اهو اتي ناهي، اسان ڪندا آهيون. ڊاکر تصوير.

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

جيڪڏھن گھري توهان ان کي پاڻ گڏ ڪري سگهو ٿا، پر اهو وقت وٺندو آهي.

هڪ ڪنٽينر اندر، توهان آساني سان استعمال ڪري سگهو ٿا ايم سي سي کي متبادل طور gcc:

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

گھٽ ۾ گھٽ تبديليون:

بائنري فائل ۾ آئوٽ ڪرڻ جي بدران، ايم اسڪرپٽ فائلن کي ٺاهڻ لاءِ .wasm ۽ .js استعمال ڪري ٿو، جيڪو WebAssemby ماڊل کي هلائڻ لاءِ استعمال ڪيو ويندو آهي.

USE_ZLIB پرچم zlib لائبريري جي مدد لاء استعمال ڪيو ويندو آهي. لائبريري کي تقسيم ڪيو ويو آهي ۽ WebAssembly ڏانهن پورٽ ڪيو ويو آهي، ۽ Emscripten ان کي پروجيڪٽ ۾ شامل ڪري ٿو.

Emscriptten ورچوئل فائل سسٽم چالو ڪيو ويو آهي. هي POSIX جهڙو FS، برائوزر اندر رام ۾ ڊوڙندو. جڏهن صفحو تازو ڪيو ويندو آهي، ياداشت صاف ٿي ويندي آهي.

سمجھڻ لاءِ ته هڪ ورچوئل فائل سسٽم جي ضرورت ڇو آهي، اهو توهان جي ڪمانڊ لائن مان seqtk هلائڻ جي طريقي سان مقابلو ڪرڻ جي قابل آهي جنهن طريقي سان توهان مرتب ڪيل WebAssembly ماڊل کي هلائيندا آهيو.

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

ورچوئل فائل سسٽم تائين رسائي حاصل ڪرڻ ضروري آهي ته جيئن فائل ان پٽ جي بجاءِ اسٽرنگ لاءِ seqtk کي ٻيهر نه لکجي. انهي صورت ۾، ڊيٽا جو ٽڪرو هڪ data.fastq فائل جي طور تي ورچوئل FS ۾ ڏيکاريو ويندو آهي جنهن تي هڪ ڪال to main() seqtk.

هتي نئون فن تعمير آهي:

اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

انگ اکر ڏيکاري ٿو ته مکيه برائوزر سلسلي ۾ حساب جي بدران، ويب ورڪرز. هي طريقو توهان کي اجازت ڏئي ٿو حساب ڪتاب جي پس منظر واري سلسلي ۾ بغير برائوزر جي ردعمل کي متاثر ڪرڻ جي. خير، WebWorker سنڀاليندڙ ڪم ڪندڙ کي شروع ڪري ٿو، ان جي رابطي کي منظم ڪندي مکيه موضوع سان.

seqtk ڪمانڊ هلائيندڙ فائل تي ورڪر استعمال ڪندي. عمل جي مڪمل ٿيڻ کان پوء، ڪم ڪندڙ هڪ وعدي جي صورت ۾ نتيجو پيدا ڪري ٿو. جڏهن هڪ پيغام مکيه سلسلي طرفان ملي ٿي، نتيجو گراف کي اپڊيٽ ڪرڻ لاء استعمال ڪيو ويندو آهي. ۽ پوء ڪيترن ئي ورهاڱي ۾.

WebAssembly ڪارڪردگي بابت ڇا؟

ڪارڪردگي ۾ تبديلي جو جائزو وٺڻ لاء، پروجيڪٽ ٽيم استعمال ڪيو ريڊ آپريشن في سيڪنڊ پيراميٽر. انٽرايڪٽو گرافس ٺاهڻ ۾ جيڪو وقت لڳندو آهي اهو حساب ۾ نه ورتو ويندو آهي ڇاڪاڻ ته ٻئي عمل جاوا اسڪرپٽ استعمال ڪندا آهن.

جڏهن ٻاهرئين دٻي جي حل کي استعمال ڪندي، ڪارڪردگي وڌائي نو ڀيرا هئي.

اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

اهو هڪ بهترين نتيجو آهي، پر، جيئن اهو نڪتو، اتي پڻ ان کي بهتر ڪرڻ جو هڪ موقعو آهي. حقيقت اها آهي ته QC تجزيي جي نتيجن جو هڪ وڏو تعداد seqtk پاران استعمال نه ڪيو ويو آهي، تنهنڪري انهن کي ختم ڪري سگهجي ٿو. جيڪڏھن توھان ھي ڪريو ٿا، نتيجو بهتر ٿيندو 13 ڀيرا JS جي مقابلي ۾.

اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

اهو صرف printf() حڪمن تي تبصرو ڪندي حاصل ڪيو ويو.

پر اهو سڀ ڪجهه ناهي. حقيقت اها آهي ته هن اسٽيج تي، fastq.bio مختلف C فنڪشنز کي ڪال ڪري تجزيي جا نتيجا حاصل ڪري ٿو، انهن مان هر هڪ پنهنجي خاصيتن جي سيٽ جي حساب سان حساب ڪري ٿو، ته جيئن فائل جي هر ٽڪري کي ٻه ڀيرا پڙهيو وڃي.

هن مسئلي جي چوڌاري حاصل ڪرڻ لاء، اهو فيصلو ڪيو ويو ته ٻن ڪمن کي گڏ ڪرڻ لاء هڪ ۾. نتيجي طور، پيداوار 20 ڀيرا وڌي وئي.

اسان ڪيئن استعمال ڪيو WebAssembly ويب ايپليڪيشن کي تيز ڪرڻ لاءِ 20 ڀيرا

اها ڳالهه نوٽ ڪرڻ گهرجي ته اهڙي هڪ شاندار نتيجو هميشه حاصل نه ٿو ڪري سگهجي. ڪجهه حالتن ۾، ڪارڪردگي گهٽجي ويندي، تنهنڪري اهو هر معاملي جو جائزو وٺڻ جي قابل آهي.

نتيجي طور، اسان چئي سگھون ٿا ته Wasm ايپليڪيشن ڪارڪردگي کي بهتر ڪرڻ جو موقعو فراهم ڪري ٿو، پر توهان کي ان کي عقلمندي سان استعمال ڪرڻ جي ضرورت آهي.

Skillbox سفارش ڪري ٿو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو