ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

ಈ ಲೇಖನವು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು WebAssembly ನೊಂದಿಗೆ ಬದಲಿಸುವ ಮೂಲಕ ಬ್ರೌಸರ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ವೇಗಗೊಳಿಸಲು ಒಂದು ಪ್ರಕರಣವನ್ನು ಚರ್ಚಿಸುತ್ತದೆ.

ವೆಬ್ ಅಸೆಂಬ್ಲಿ - ಅದು ಏನು?

ಸಂಕ್ಷಿಪ್ತವಾಗಿ, ಇದು ಸ್ಟಾಕ್-ಆಧಾರಿತ ವರ್ಚುವಲ್ ಯಂತ್ರಕ್ಕಾಗಿ ಬೈನರಿ ಸೂಚನಾ ಸ್ವರೂಪವಾಗಿದೆ. ವಾಸ್ಮ್ (ಸಣ್ಣ ಹೆಸರು) ಅನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಆದರೆ ಅದು ಅಲ್ಲ. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಜೊತೆಗೆ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಸೂಚನಾ ಸ್ವರೂಪವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ.

C/C++, Rust, Go ನಂತಹ ಭಾಷೆಗಳಲ್ಲಿ ಮೂಲಗಳನ್ನು ಕಂಪೈಲ್ ಮಾಡುವ ಮೂಲಕ WebAssembly ಅನ್ನು ಪಡೆಯುವುದು ಮುಖ್ಯವಾಗಿದೆ. ಇಲ್ಲಿ ಸಂಖ್ಯಾಶಾಸ್ತ್ರೀಯ ಟೈಪಿಂಗ್ ಮತ್ತು ಫ್ಲಾಟ್ ಮೆಮೊರಿ ಮಾದರಿ ಎಂದು ಕರೆಯಲ್ಪಡುವದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಮೇಲೆ ತಿಳಿಸಿದಂತೆ ಕೋಡ್ ಅನ್ನು ಕಾಂಪ್ಯಾಕ್ಟ್ ಬೈನರಿ ಸ್ವರೂಪದಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ, ಇದು ಆಜ್ಞಾ ಸಾಲಿನ ಮೂಲಕ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುವಷ್ಟು ವೇಗವಾಗಿರುತ್ತದೆ. ಈ ಸಾಮರ್ಥ್ಯಗಳು WebAssembly ನ ಜನಪ್ರಿಯತೆಯ ಬೆಳವಣಿಗೆಗೆ ಕಾರಣವಾಗಿವೆ.

ನಾವು ನೆನಪಿಸುತ್ತೇವೆ: ಎಲ್ಲಾ Habr ಓದುಗರಿಗೆ - Habr ಪ್ರೊಮೊ ಕೋಡ್ ಬಳಸಿಕೊಂಡು ಯಾವುದೇ ಸ್ಕಿಲ್‌ಬಾಕ್ಸ್ ಕೋರ್ಸ್‌ಗೆ ದಾಖಲಾಗುವಾಗ 10 ರೂಬಲ್ ರಿಯಾಯಿತಿ.

ಸ್ಕಿಲ್‌ಬಾಕ್ಸ್ ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ: ಪ್ರಾಯೋಗಿಕ ಕೋರ್ಸ್ "ಮೊಬೈಲ್ ಡೆವಲಪರ್ ಪ್ರೊ".

ಪ್ರಸ್ತುತ, ಡೂಮ್ 3 ನಂತಹ ಆಟಗಳಿಂದ ಆಟೋಕ್ಯಾಡ್ ಮತ್ತು ಫಿಗ್ಮಾದಂತಹ ವೆಬ್-ಪೋರ್ಟ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳವರೆಗೆ ಅನೇಕ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ವಾಸ್ಮ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ವಾಸ್ಮ್ ಅನ್ನು ಸರ್ವರ್‌ಲೆಸ್ ಕಂಪ್ಯೂಟಿಂಗ್‌ನಂತಹ ಕ್ಷೇತ್ರಗಳಲ್ಲಿಯೂ ಬಳಸಲಾಗುತ್ತದೆ.

ಈ ಲೇಖನವು ಅನಾಲಿಟಿಕ್ಸ್ ವೆಬ್ ಸೇವೆಯನ್ನು ವೇಗಗೊಳಿಸಲು Wasm ಅನ್ನು ಬಳಸುವ ಉದಾಹರಣೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಸ್ಪಷ್ಟತೆಗಾಗಿ, ನಾವು C ಯಲ್ಲಿ ಬರೆಯಲಾದ ಕೆಲಸದ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ತೆಗೆದುಕೊಂಡಿದ್ದೇವೆ, ಅದನ್ನು WebAssembly ಗೆ ಸಂಕಲಿಸಲಾಗಿದೆ. ಫಲಿತಾಂಶವನ್ನು JS ನ ಕಳಪೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ವಿಭಾಗಗಳನ್ನು ಬದಲಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.

ಅಪ್ಲಿಕೇಶನ್ ರೂಪಾಂತರ

ಉದಾಹರಣೆಗೆ ತಳಿಶಾಸ್ತ್ರಜ್ಞರಿಗೆ ಉದ್ದೇಶಿಸಲಾದ fastq.bio ಬ್ರೌಸರ್ ಸೇವೆಯನ್ನು ಬಳಸುತ್ತದೆ. ಉಪಕರಣವು ಡಿಎನ್‌ಎ ಅನುಕ್ರಮದ ಗುಣಮಟ್ಟವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ (ಅರ್ಥಸೂಚಕ).

ಕ್ರಿಯೆಯಲ್ಲಿರುವ ಅಪ್ಲಿಕೇಶನ್‌ನ ಉದಾಹರಣೆ ಇಲ್ಲಿದೆ:

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

ಪ್ರಕ್ರಿಯೆಯ ವಿವರಗಳು ತಜ್ಞರಲ್ಲದವರಿಗೆ ಸಾಕಷ್ಟು ಸಂಕೀರ್ಣವಾಗಿರುವುದರಿಂದ ಅವುಗಳಿಗೆ ಹೋಗುವುದು ಯೋಗ್ಯವಾಗಿಲ್ಲ, ಆದರೆ ಸಂಕ್ಷಿಪ್ತವಾಗಿ, ವಿಜ್ಞಾನಿಗಳು ಮೇಲಿನ ಇನ್ಫೋಗ್ರಾಫಿಕ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು DNA ಅನುಕ್ರಮ ಪ್ರಕ್ರಿಯೆಯು ಸರಾಗವಾಗಿ ನಡೆದಿದೆಯೇ ಮತ್ತು ಯಾವ ಸಮಸ್ಯೆಗಳು ಉದ್ಭವಿಸಿದವು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದು.

ಈ ಸೇವೆಯು ಪರ್ಯಾಯಗಳು, ಡೆಸ್ಕ್‌ಟಾಪ್ ಕಾರ್ಯಕ್ರಮಗಳನ್ನು ಹೊಂದಿದೆ. ಆದರೆ fastq.bio ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವ ಮೂಲಕ ನಿಮ್ಮ ಕೆಲಸವನ್ನು ವೇಗಗೊಳಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇತರ ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ, ನೀವು ಆಜ್ಞಾ ಸಾಲಿನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ, ಆದರೆ ಎಲ್ಲಾ ತಳಿಶಾಸ್ತ್ರಜ್ಞರು ಅಗತ್ಯ ಅನುಭವವನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ.

ಎಲ್ಲವೂ ಸರಳವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇನ್ಪುಟ್ ಎನ್ನುವುದು ಪಠ್ಯ ಫೈಲ್ ರೂಪದಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಲಾದ ಡೇಟಾ. ಈ ಫೈಲ್ ಅನ್ನು ವಿಶೇಷ ಅನುಕ್ರಮ ಪರಿಕರಗಳಿಂದ ರಚಿಸಲಾಗಿದೆ. ಫೈಲ್ ಡಿಎನ್‌ಎ ಅನುಕ್ರಮಗಳ ಪಟ್ಟಿಯನ್ನು ಮತ್ತು ಪ್ರತಿ ನ್ಯೂಕ್ಲಿಯೊಟೈಡ್‌ಗೆ ಗುಣಮಟ್ಟದ ಸ್ಕೋರ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಫೈಲ್ ಫಾರ್ಮ್ಯಾಟ್ .fastq ಆಗಿದೆ, ಅದಕ್ಕಾಗಿಯೇ ಸೇವೆಗೆ ಅದರ ಹೆಸರು ಬಂದಿದೆ.

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಅನುಷ್ಠಾನ

fastq.bio ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಬಳಕೆದಾರರ ಮೊದಲ ಹಂತವು ಸೂಕ್ತವಾದ ಫೈಲ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು. ಫೈಲ್ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು, ಅಪ್ಲಿಕೇಶನ್ ಫೈಲ್‌ನಿಂದ ಡೇಟಾದ ಯಾದೃಚ್ಛಿಕ ಮಾದರಿಯನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಆ ಬ್ಯಾಚ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ. ಸರಳ ಸ್ಟ್ರಿಂಗ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಮತ್ತು ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವುದು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಕೆಲಸವಾಗಿದೆ. ಅವುಗಳಲ್ಲಿ ಒಂದು ವಿಭಿನ್ನ ಡಿಎನ್‌ಎ ತುಣುಕುಗಳ ಮೇಲೆ ನ್ಯೂಕ್ಲಿಯೊಟೈಡ್‌ಗಳ ಸಂಖ್ಯೆ ಎ, ಸಿ, ಜಿ ಮತ್ತು ಟಿ.

ಅಗತ್ಯ ಸೂಚಕಗಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿದ ನಂತರ, ಅವುಗಳನ್ನು Plotly.js ಬಳಸಿ ದೃಶ್ಯೀಕರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಸೇವೆಯು ಹೊಸ ಡೇಟಾ ಮಾದರಿಯೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ. UX ನ ಗುಣಮಟ್ಟವನ್ನು ಸುಧಾರಿಸಲು ಚಂಕಿಂಗ್ ಅನ್ನು ಮಾಡಲಾಗುತ್ತದೆ. ನೀವು ಎಲ್ಲಾ ಡೇಟಾದೊಂದಿಗೆ ಏಕಕಾಲದಲ್ಲಿ ಕೆಲಸ ಮಾಡಿದರೆ, ಪ್ರಕ್ರಿಯೆಯು ಸ್ವಲ್ಪ ಸಮಯದವರೆಗೆ ಫ್ರೀಜ್ ಆಗುತ್ತದೆ, ಏಕೆಂದರೆ ಅನುಕ್ರಮ ಫಲಿತಾಂಶಗಳೊಂದಿಗೆ ಫೈಲ್‌ಗಳು ನೂರಾರು ಗಿಗಾಬೈಟ್‌ಗಳ ಫೈಲ್ ಜಾಗವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತವೆ. ಸೇವೆಯು 0,5 ರಿಂದ 1 MB ವರೆಗಿನ ಗಾತ್ರದ ಡೇಟಾದ ತುಣುಕುಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಹಂತ ಹಂತವಾಗಿ ಅವರೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ, ಚಿತ್ರಾತ್ಮಕ ಡೇಟಾವನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ.

ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ:

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

ಕೆಂಪು ಆಯತವು ದೃಶ್ಯೀಕರಣವನ್ನು ಪಡೆಯಲು ಸ್ಟ್ರಿಂಗ್ ರೂಪಾಂತರ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಇದು ಸೇವೆಯ ಅತ್ಯಂತ ಗಣನೆಯ ತೀವ್ರ ಭಾಗವಾಗಿದೆ. ಅದನ್ನು ವಾಸ್ಮ್ನೊಂದಿಗೆ ಬದಲಾಯಿಸಲು ಪ್ರಯತ್ನಿಸುವುದು ಯೋಗ್ಯವಾಗಿದೆ.

ವೆಬ್ ಅಸೆಂಬ್ಲಿಯನ್ನು ಪರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ

Wasm ಅನ್ನು ಬಳಸುವ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಣಯಿಸಲು, ಯೋಜನಾ ತಂಡವು ಫಾಸ್ಟ್ಕ್ ಫೈಲ್‌ಗಳ ಆಧಾರದ ಮೇಲೆ QC ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು (QC - ಗುಣಮಟ್ಟದ ನಿಯಂತ್ರಣ) ರಚಿಸಲು ಸಿದ್ಧ ಪರಿಹಾರಗಳನ್ನು ಹುಡುಕಲು ಪ್ರಾರಂಭಿಸಿತು. C, C++ ಅಥವಾ Rust ನಲ್ಲಿ ಬರೆಯಲಾದ ಪರಿಕರಗಳ ನಡುವೆ ಹುಡುಕಾಟವನ್ನು ನಡೆಸಲಾಯಿತು, ಇದರಿಂದ ಕೋಡ್ ಅನ್ನು WebAssembly ಗೆ ಪೋರ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಯಿತು. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಉಪಕರಣವು "ಕಚ್ಚಾ" ಆಗಿರಬಾರದು; ವಿಜ್ಞಾನಿಗಳು ಈಗಾಗಲೇ ಪರೀಕ್ಷಿಸಿದ ಸೇವೆಯ ಅಗತ್ಯವಿದೆ.

ಪರಿಣಾಮವಾಗಿ, ಪರವಾಗಿ ಆಯ್ಕೆ ಮಾಡಲಾಯಿತು seqtk. ಅಪ್ಲಿಕೇಶನ್ ಸಾಕಷ್ಟು ಜನಪ್ರಿಯವಾಗಿದೆ, ಇದು ಮುಕ್ತ ಮೂಲವಾಗಿದೆ, ಮೂಲ ಭಾಷೆ ಸಿ ಆಗಿದೆ.

Wasm ಗೆ ಪರಿವರ್ತಿಸುವ ಮೊದಲು, ಡೆಸ್ಕ್‌ಟಾಪ್‌ಗಾಗಿ seqtk ನ ಸಂಕಲನ ತತ್ವವನ್ನು ನೋಡುವುದು ಯೋಗ್ಯವಾಗಿದೆ. ಮೇಕ್‌ಫೈಲ್ ಪ್ರಕಾರ, ನಿಮಗೆ ಬೇಕಾಗಿರುವುದು ಇಲ್ಲಿದೆ:

# 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 ಅನ್ನು ಬಳಸುತ್ತದೆ.

USE_ZLIB ಫ್ಲ್ಯಾಗ್ ಅನ್ನು zlib ಲೈಬ್ರರಿಯನ್ನು ಬೆಂಬಲಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಲೈಬ್ರರಿಯನ್ನು ವೆಬ್‌ಅಸೆಂಬ್ಲಿಗೆ ವಿತರಿಸಲಾಗಿದೆ ಮತ್ತು ಪೋರ್ಟ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಎಂಸ್ಕ್ರಿಪ್ಟನ್ ಇದನ್ನು ಯೋಜನೆಯಲ್ಲಿ ಒಳಗೊಂಡಿದೆ.

Emscrippten ವರ್ಚುವಲ್ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಈ POSIX ತರಹದ FS, ಬ್ರೌಸರ್‌ನಲ್ಲಿ RAM ನಲ್ಲಿ ರನ್ ಆಗುತ್ತಿದೆ. ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿದಾಗ, ಮೆಮೊರಿಯನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ.

ವರ್ಚುವಲ್ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಏಕೆ ಅಗತ್ಯವಿದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು, ನೀವು ಆಜ್ಞಾ ಸಾಲಿನಿಂದ seqtk ಅನ್ನು ರನ್ ಮಾಡುವ ವಿಧಾನವನ್ನು ನೀವು ಸಂಕಲಿಸಿದ WebAssembly ಮಾಡ್ಯೂಲ್ ಅನ್ನು ರನ್ ಮಾಡುವ ವಿಧಾನದೊಂದಿಗೆ ಹೋಲಿಸುವುದು ಯೋಗ್ಯವಾಗಿದೆ.

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

ಫೈಲ್ ಇನ್‌ಪುಟ್‌ಗಿಂತ ಸ್ಟ್ರಿಂಗ್‌ಗಾಗಿ seqtk ಅನ್ನು ಪುನಃ ಬರೆಯದಿರಲು ವರ್ಚುವಲ್ ಫೈಲ್ ಸಿಸ್ಟಮ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ಪಡೆಯುವುದು ಅವಶ್ಯಕ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಡೇಟಾ ತುಣುಕು ಅದರ ಮೇಲೆ ಮುಖ್ಯ() seqtk ಗೆ ಕರೆಯೊಂದಿಗೆ ವರ್ಚುವಲ್ FS ನಲ್ಲಿ data.fastq ಫೈಲ್ ಆಗಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ.

ಹೊಸ ವಾಸ್ತುಶಿಲ್ಪ ಇಲ್ಲಿದೆ:

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

ಮುಖ್ಯ ಬ್ರೌಸರ್ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಲೆಕ್ಕಾಚಾರಗಳ ಬದಲಿಗೆ, ಅಂಕಿ ತೋರಿಸುತ್ತದೆ ವೆಬ್ ವರ್ಕರ್ಸ್. ಈ ವಿಧಾನವು ಬ್ರೌಸರ್ ಪ್ರತಿಕ್ರಿಯೆಯ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರದೆ ಹಿನ್ನೆಲೆ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಸರಿ, ವೆಬ್‌ವರ್ಕರ್ ನಿಯಂತ್ರಕವು ವರ್ಕರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ, ಮುಖ್ಯ ಥ್ರೆಡ್‌ನೊಂದಿಗೆ ಅದರ ಸಂವಹನವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.

ಮೌಂಟೆಡ್ ಫೈಲ್‌ನಲ್ಲಿ ವರ್ಕರ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು seqtk ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸಲಾಗುತ್ತದೆ. ಮರಣದಂಡನೆ ಪೂರ್ಣಗೊಂಡ ನಂತರ, ಕೆಲಸಗಾರನು ಭರವಸೆಯ ರೂಪದಲ್ಲಿ ಫಲಿತಾಂಶವನ್ನು ನೀಡುತ್ತಾನೆ. ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಿಂದ ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸಿದಾಗ, ಫಲಿತಾಂಶವನ್ನು ಗ್ರಾಫ್‌ಗಳನ್ನು ನವೀಕರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಮತ್ತು ಹೀಗೆ ಹಲವಾರು ಪುನರಾವರ್ತನೆಗಳಲ್ಲಿ.

WebAssembly ಕಾರ್ಯಕ್ಷಮತೆಯ ಬಗ್ಗೆ ಏನು?

ಕಾರ್ಯಕ್ಷಮತೆಯ ಬದಲಾವಣೆಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು, ಪ್ರಾಜೆಕ್ಟ್ ತಂಡವು ಪ್ರತಿ ಸೆಕೆಂಡಿಗೆ ಓದುವ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಎರಡೂ ಅನುಷ್ಠಾನಗಳು JavaScript ಅನ್ನು ಬಳಸುವುದರಿಂದ ಸಂವಾದಾತ್ಮಕ ಗ್ರಾಫ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ತೆಗೆದುಕೊಳ್ಳುವ ಸಮಯವನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುವುದಿಲ್ಲ.

ಪೆಟ್ಟಿಗೆಯ ಹೊರಗೆ ಪರಿಹಾರವನ್ನು ಬಳಸುವಾಗ, ಕಾರ್ಯಕ್ಷಮತೆಯ ಹೆಚ್ಚಳವು ಒಂಬತ್ತು ಬಾರಿ.

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

ಇದು ಅತ್ಯುತ್ತಮ ಫಲಿತಾಂಶವಾಗಿದೆ, ಆದರೆ, ಅದು ಬದಲಾದಂತೆ, ಅದನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿಸಲು ಅವಕಾಶವಿದೆ. ಸತ್ಯವೆಂದರೆ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ QC ವಿಶ್ಲೇಷಣೆಯ ಫಲಿತಾಂಶಗಳನ್ನು seqtk ಬಳಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ಅವುಗಳನ್ನು ಅಳಿಸಬಹುದು. ನೀವು ಇದನ್ನು ಮಾಡಿದರೆ, ಫಲಿತಾಂಶವು JS ಗೆ ಹೋಲಿಸಿದರೆ 13 ಪಟ್ಟು ಸುಧಾರಿಸುತ್ತದೆ.

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

printf() ಆಜ್ಞೆಗಳನ್ನು ಕಾಮೆಂಟ್ ಮಾಡುವ ಮೂಲಕ ಇದನ್ನು ಸಾಧಿಸಲಾಗಿದೆ.

ಆದರೆ ಅಷ್ಟೆ ಅಲ್ಲ. ಸತ್ಯವೆಂದರೆ ಈ ಹಂತದಲ್ಲಿ, fastq.bio ವಿಭಿನ್ನ C ಕಾರ್ಯಗಳನ್ನು ಕರೆಯುವ ಮೂಲಕ ವಿಶ್ಲೇಷಣೆಯ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯುತ್ತದೆ.ಪ್ರತಿಯೊಂದೂ ತನ್ನದೇ ಆದ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಫೈಲ್‌ನ ಪ್ರತಿ ತುಣುಕನ್ನು ಎರಡು ಬಾರಿ ಓದಲಾಗುತ್ತದೆ.

ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು, ಎರಡು ಕಾರ್ಯಗಳನ್ನು ಒಂದಾಗಿ ಸಂಯೋಜಿಸಲು ನಿರ್ಧರಿಸಲಾಯಿತು. ಪರಿಣಾಮವಾಗಿ, ಉತ್ಪಾದಕತೆ 20 ಪಟ್ಟು ಹೆಚ್ಚಾಗಿದೆ.

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು 20 ಬಾರಿ ವೇಗಗೊಳಿಸಲು ನಾವು WebAssembly ಅನ್ನು ಹೇಗೆ ಬಳಸಿದ್ದೇವೆ

ಅಂತಹ ಅತ್ಯುತ್ತಮ ಫಲಿತಾಂಶವನ್ನು ಯಾವಾಗಲೂ ಸಾಧಿಸಲಾಗುವುದಿಲ್ಲ ಎಂದು ಗಮನಿಸಬೇಕಾದ ಅಂಶವಾಗಿದೆ. ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಕಾರ್ಯಕ್ಷಮತೆ ಕಡಿಮೆಯಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಪ್ರತಿ ಪ್ರಕರಣವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವುದು ಯೋಗ್ಯವಾಗಿದೆ.

ಒಂದು ತೀರ್ಮಾನವಾಗಿ, ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು Wasm ಅವಕಾಶವನ್ನು ಒದಗಿಸುತ್ತದೆ ಎಂದು ನಾವು ಹೇಳಬಹುದು, ಆದರೆ ನೀವು ಅದನ್ನು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ಬಳಸಬೇಕಾಗುತ್ತದೆ.

ಸ್ಕಿಲ್‌ಬಾಕ್ಸ್ ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ:

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ