இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

ஜாவாஸ்கிரிப்ட் கணக்கீடுகளை WebAssembly மூலம் மாற்றுவதன் மூலம் உலாவி பயன்பாட்டை விரைவுபடுத்துவதற்கான ஒரு வழக்கை இந்தக் கட்டுரை விவாதிக்கிறது.

WebAssembly - அது என்ன?

சுருக்கமாக, இது அடுக்கு அடிப்படையிலான மெய்நிகர் இயந்திரத்திற்கான பைனரி அறிவுறுத்தல் வடிவமாகும். Wasm (குறுகிய பெயர்) பெரும்பாலும் நிரலாக்க மொழி என்று அழைக்கப்படுகிறது, ஆனால் அது இல்லை. அறிவுறுத்தல் வடிவம் ஜாவாஸ்கிரிப்டுடன் உலாவியில் செயல்படுத்தப்படுகிறது.

C/C++, Rust, Go போன்ற மொழிகளில் மூலங்களைத் தொகுப்பதன் மூலம் WebAssembly ஐப் பெறுவது முக்கியம். இங்கே புள்ளியியல் தட்டச்சு மற்றும் பிளாட் நினைவக மாதிரி என்று அழைக்கப்படும். குறியீடு, மேலே குறிப்பிட்டுள்ளபடி, ஒரு சிறிய பைனரி வடிவத்தில் சேமிக்கப்படுகிறது, இது கட்டளை வரியைப் பயன்படுத்தி பயன்பாட்டை இயக்கும் வேகத்தை உருவாக்குகிறது. இந்த திறன்கள் WebAssembly இன் பிரபலத்தின் வளர்ச்சிக்கு வழிவகுத்தன.

நாங்கள் நினைவூட்டுகிறோம்: "Habr" இன் அனைத்து வாசகர்களுக்கும் - "Habr" விளம்பரக் குறியீட்டைப் பயன்படுத்தி எந்த Skillbox படிப்பிலும் சேரும்போது 10 ரூபிள் தள்ளுபடி.

Skillbox பரிந்துரைக்கிறது: நடைமுறை படிப்பு "மொபைல் டெவலப்பர் புரோ".

தற்போது, ​​டூம் 3 போன்ற கேம்கள் முதல் ஆட்டோகேட் மற்றும் ஃபிக்மா போன்ற வெப்-போர்ட் செய்யப்பட்ட பயன்பாடுகள் வரை பல பயன்பாடுகளில் Wasm பயன்படுத்தப்படுகிறது. சர்வர்லெஸ் கம்ப்யூட்டிங் போன்ற பகுதிகளிலும் Wasm பயன்படுத்தப்படுகிறது.

இந்த கட்டுரை ஒரு பகுப்பாய்வு வலை சேவையை விரைவுபடுத்த Wasm ஐப் பயன்படுத்துவதற்கான உதாரணத்தை வழங்குகிறது. தெளிவுக்காக, WebAssemblyயில் தொகுக்கப்பட்ட C இல் எழுதப்பட்ட வேலை செய்யும் விண்ணப்பத்தை நாங்கள் எடுத்தோம். JS இன் செயல்திறன் குறைவான பிரிவுகளை மாற்றுவதற்கு முடிவு பயன்படுத்தப்படும்.

விண்ணப்ப மாற்றம்

உதாரணம் fastq.bio உலாவி சேவையைப் பயன்படுத்தும், இது மரபியல் நிபுணர்களுக்காக வடிவமைக்கப்பட்டுள்ளது. கருவியானது டிஎன்ஏ வரிசைமுறையின் தரத்தை மதிப்பீடு செய்ய உங்களை அனுமதிக்கிறது.

செயலில் உள்ள பயன்பாட்டின் எடுத்துக்காட்டு இங்கே:

இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

இந்த செயல்முறையின் விவரங்கள் நிபுணத்துவம் அல்லாதவர்களுக்கு மிகவும் சிக்கலானவை என்பதால் அவை செல்லத் தகுதியற்றவை, ஆனால் சுருக்கமாக, விஞ்ஞானிகள் மேலே உள்ள விளக்கப்படத்தைப் பயன்படுத்தி டிஎன்ஏ வரிசைமுறை செயல்முறை சீராக நடந்ததா மற்றும் என்ன சிக்கல்கள் எழுந்தன என்பதைப் புரிந்துகொள்ளலாம்.

இந்த சேவையில் மாற்று, டெஸ்க்டாப் புரோகிராம்கள் உள்ளன. ஆனால் fastq.bio தரவை காட்சிப்படுத்துவதன் மூலம் உங்கள் வேலையை விரைவுபடுத்த அனுமதிக்கிறது. மற்ற பெரும்பாலான சந்தர்ப்பங்களில், நீங்கள் கட்டளை வரியுடன் வேலை செய்ய வேண்டும், ஆனால் அனைத்து மரபியலாளர்களுக்கும் தேவையான அனுபவம் இல்லை.

எல்லாம் எளிமையாக வேலை செய்கிறது. உள்ளீடு என்பது உரை கோப்பு வடிவத்தில் வழங்கப்படும் தரவு. இந்த கோப்பு சிறப்பு வரிசைமுறை கருவிகளால் உருவாக்கப்படுகிறது. கோப்பில் டிஎன்ஏ வரிசைகளின் பட்டியல் மற்றும் ஒவ்வொரு நியூக்ளியோடைடுக்கான தர மதிப்பெண்களும் உள்ளன. கோப்பு வடிவம் .fastq ஆகும், அதனால்தான் சேவைக்கு அதன் பெயர் வந்தது.

ஜாவாஸ்கிரிப்ட்டில் செயல்படுத்துதல்

fastq.bio உடன் பணிபுரியும் போது பயனரின் முதல் படி பொருத்தமான கோப்பைத் தேர்ந்தெடுக்க வேண்டும். கோப்பு பொருளைப் பயன்படுத்தி, பயன்பாடு ஒரு கோப்பிலிருந்து தரவின் சீரற்ற மாதிரியைப் படித்து, அந்தத் தொகுப்பைச் செயலாக்குகிறது. இங்கு ஜாவாஸ்கிரிப்ட்டின் வேலை எளிய சரம் செயல்பாடுகளைச் செய்வதும் அளவீடுகளைக் கணக்கிடுவதும் ஆகும். அவற்றில் ஒன்று வெவ்வேறு டிஎன்ஏ துண்டுகளில் ஏ, சி, ஜி மற்றும் டி நியூக்ளியோடைடுகளின் எண்ணிக்கை.

தேவையான குறிகாட்டிகளைக் கணக்கிட்ட பிறகு, அவை Plotly.js ஐப் பயன்படுத்தி காட்சிப்படுத்தப்படுகின்றன, மேலும் சேவை புதிய தரவு மாதிரியுடன் வேலை செய்யத் தொடங்குகிறது. UX இன் தரத்தை மேம்படுத்த துண்டிப்பு செய்யப்படுகிறது. நீங்கள் எல்லா தரவையும் ஒரே நேரத்தில் பணிபுரிந்தால், செயல்முறை சிறிது நேரம் முடக்கப்படும், ஏனெனில் வரிசைப்படுத்தல் முடிவுகளுடன் கூடிய கோப்புகள் நூற்றுக்கணக்கான ஜிகாபைட் கோப்பு இடத்தை எடுத்துக்கொள்கின்றன. இந்தச் சேவையானது 0,5 முதல் 1 எம்பி வரையிலான அளவிலான தரவுகளை எடுத்து, அவற்றுடன் படிப்படியாக வேலை செய்து, வரைகலைத் தரவை உருவாக்குகிறது.

இது எப்படி வேலை செய்கிறது:

இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

சிவப்பு செவ்வகத்தில் காட்சிப்படுத்தலைப் பெறுவதற்கான சரம் உருமாற்ற வழிமுறை உள்ளது. இது சேவையின் மிகவும் கணக்கீட்டு ரீதியாக தீவிரமான பகுதியாகும். அதை Wasm உடன் மாற்ற முயற்சிப்பது மதிப்பு.

WebAssembly சோதனை

Wasm ஐப் பயன்படுத்துவதற்கான சாத்தியத்தை மதிப்பிடுவதற்கு, ஃபாஸ்ட்க் கோப்புகளின் அடிப்படையில் 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

விரும்பினால் அதை நீங்களே சேகரிக்கலாம், ஆனால் அது நேரம் எடுக்கும்.

ஒரு கொள்கலனுக்குள், gcc க்கு மாற்றாக emcc ஐ எளிதாகப் பயன்படுத்தலாம்:

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

குறைந்தபட்ச மாற்றங்கள்:

பைனரி கோப்பில் அவுட்புட் செய்வதற்குப் பதிலாக, கோப்புகளை உருவாக்க எம்ஸ்கிரிப்டன் .wasm மற்றும் .js ஐப் பயன்படுத்துகிறது, இது WebAssemby தொகுதியை இயக்க பயன்படுகிறது.

zlib நூலகத்தை ஆதரிக்க USE_ZLIB கொடி பயன்படுத்தப்படுகிறது. நூலகம் விநியோகிக்கப்பட்டது மற்றும் WebAssembly க்கு அனுப்பப்பட்டது, மேலும் எம்ஸ்கிரிப்டன் அதை திட்டத்தில் சேர்க்கிறது.

Emscrippten மெய்நிகர் கோப்பு முறைமை செயல்படுத்தப்பட்டது. இது 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 கோப்பாக மெய்நிகர் FS இல் காட்டப்படும், அதில் main() seqtk க்கு அழைப்பு வரும்.

புதிய கட்டிடக்கலை இதோ:

இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

பிரதான உலாவி நூலில் கணக்கீடுகளுக்குப் பதிலாக, படம் காட்டுகிறது இணையப்பணியாளர்கள். இந்த முறையானது உலாவியின் வினைத்திறனைப் பாதிக்காமல் பின்னணி நூலில் கணக்கீடுகளைச் செய்ய உங்களை அனுமதிக்கிறது. சரி, WebWorker கன்ட்ரோலர் பணியாளரைத் தொடங்குகிறது, முக்கிய நூலுடன் அதன் தொடர்புகளை நிர்வகிக்கிறது.

seqtk கட்டளை ஏற்றப்பட்ட கோப்பில் Worker ஐப் பயன்படுத்தி இயக்கப்படுகிறது. மரணதண்டனையை முடித்த பிறகு, தொழிலாளி ஒரு வாக்குறுதியின் வடிவத்தில் ஒரு முடிவை உருவாக்குகிறார். மெயின் த்ரெட் மூலம் ஒரு செய்தி பெறப்பட்டால், அதன் முடிவு வரைபடங்களைப் புதுப்பிக்கப் பயன்படுகிறது. மற்றும் பல மறுமுறைகளில்.

WebAssembly செயல்திறன் பற்றி என்ன?

செயல்திறனில் ஏற்பட்ட மாற்றத்தை மதிப்பிடுவதற்காக, திட்டக் குழு ஒரு வினாடிக்கு வாசிப்பு செயல்பாடுகளைப் பயன்படுத்தியது. இரண்டு செயலாக்கங்களும் ஜாவாஸ்கிரிப்டைப் பயன்படுத்துவதால், ஊடாடும் வரைபடங்களை உருவாக்க எடுக்கும் நேரம் கணக்கில் எடுத்துக்கொள்ளப்படுவதில்லை.

அவுட்-ஆஃப்-பாக்ஸ் தீர்வைப் பயன்படுத்தும் போது, ​​செயல்திறன் அதிகரிப்பு ஒன்பது மடங்கு ஆகும்.

இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

இது ஒரு சிறந்த முடிவு, ஆனால், அது மாறிவிடும், அதை மேம்படுத்த ஒரு வாய்ப்பு உள்ளது. உண்மை என்னவென்றால், அதிக எண்ணிக்கையிலான QC பகுப்பாய்வு முடிவுகள் seqtk ஆல் பயன்படுத்தப்படவில்லை, எனவே அவை நீக்கப்படலாம். நீங்கள் இதைச் செய்தால், JS உடன் ஒப்பிடும்போது முடிவு 13 மடங்கு அதிகரிக்கிறது.

இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

இது printf() கட்டளைகளை கருத்து தெரிவிப்பதன் மூலம் அடையப்பட்டது.

ஆனால் அதெல்லாம் இல்லை. உண்மை என்னவென்றால், இந்த கட்டத்தில், fastq.bio வெவ்வேறு C செயல்பாடுகளை அழைப்பதன் மூலம் பகுப்பாய்வு முடிவுகளைப் பெறுகிறது.அவை ஒவ்வொன்றும் அதன் சொந்த குணாதிசயங்களைக் கணக்கிடுகிறது, இதனால் கோப்பின் ஒவ்வொரு பகுதியும் இரண்டு முறை படிக்கப்படும்.

இந்த சிக்கலைச் சமாளிக்க, இரண்டு செயல்பாடுகளை ஒன்றாக இணைக்க முடிவு செய்யப்பட்டது. இதன் விளைவாக, உற்பத்தி 20 மடங்கு அதிகரித்துள்ளது.

இணைய பயன்பாட்டை 20 முறை வேகப்படுத்த WebAssembly ஐ எவ்வாறு பயன்படுத்தினோம்

அத்தகைய ஒரு சிறந்த முடிவை எப்போதும் அடைய முடியாது என்பது கவனிக்கத்தக்கது. சில சந்தர்ப்பங்களில், செயல்திறன் குறையும், எனவே ஒவ்வொரு வழக்கையும் மதிப்பீடு செய்வது மதிப்பு.

ஒரு முடிவாக, பயன்பாட்டின் செயல்திறனை மேம்படுத்த Wasm ஒரு வாய்ப்பை வழங்குகிறது என்று நாங்கள் கூறலாம், ஆனால் நீங்கள் அதை புத்திசாலித்தனமாக பயன்படுத்த வேண்டும்.

Skillbox பரிந்துரைக்கிறது:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்