$lang['tuto'] = "ಟ್ಯುಟೋರಿಯಲ್"; ?> ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿನ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿನ ಬೈಟ್ ಉದ್ದವನ್ನು ಅವಲಂಬಿಸಿ ಐಟಂಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಭಾಗಗಳಾಗಿ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ವಿಭಜಿಸುವುದು

Temp mail SuperHeros
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿನ ಬೈಟ್ ಉದ್ದವನ್ನು ಅವಲಂಬಿಸಿ ಐಟಂಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಭಾಗಗಳಾಗಿ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ವಿಭಜಿಸುವುದು
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿನ ಬೈಟ್ ಉದ್ದವನ್ನು ಅವಲಂಬಿಸಿ ಐಟಂಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಭಾಗಗಳಾಗಿ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ವಿಭಜಿಸುವುದು

Node.js ನಲ್ಲಿ ಮೆಮೊರಿ-ಸುರಕ್ಷಿತ ಆಬ್ಜೆಕ್ಟ್ ಚಂಕಿಂಗ್

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ, ವಿಶೇಷವಾಗಿ Node.js ನಲ್ಲಿ ದೊಡ್ಡ ಶ್ರೇಣಿಯ ವಸ್ತುಗಳ ಜೊತೆಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ಮೆಮೊರಿಯನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುವುದು ಬಹಳ ಮುಖ್ಯ. ಕೆಲವೊಮ್ಮೆ, ನೀವು ಈ ಸರಣಿಗಳನ್ನು ಸಣ್ಣ ಭಾಗಗಳಾಗಿ ವಿಭಜಿಸಬೇಕಾಗಬಹುದು, ಪ್ರತಿ ಚಂಕ್ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.

ಕಟ್ಟುನಿಟ್ಟಾದ ಮೆಮೊರಿ ನಿರ್ಬಂಧಗಳು ಅಥವಾ ಪೇಲೋಡ್ ಗಾತ್ರಗಳ ಮಿತಿಗಳನ್ನು ಹೊಂದಿರುವ API ಗಳು ಅಥವಾ ಸಿಸ್ಟಮ್‌ಗಳೊಂದಿಗೆ ನೀವು ವ್ಯವಹರಿಸುವಾಗ ಈ ಕಾರ್ಯವು ವಿಶೇಷವಾಗಿ ಮುಖ್ಯವಾಗಿದೆ. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಮೆಮೊರಿ ಗಾತ್ರವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವ ಸಾಮಾನ್ಯ ವಿಧಾನವೆಂದರೆ ಬಳಸುವ ಪ್ರತಿಯೊಂದು ವಸ್ತುವಿನ ಬೈಟ್ ಗಾತ್ರವನ್ನು ಅಳೆಯುವುದು Buffer.byteLength() ಅದನ್ನು ಬಿಗಿಗೊಳಿಸಿದ ನಂತರ.

ಈ ಲೇಖನದಲ್ಲಿ, ವಸ್ತುಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಅವುಗಳ ಬೈಟ್ ಗಾತ್ರದ ಆಧಾರದ ಮೇಲೆ ಸಣ್ಣ ತುಂಡುಗಳಾಗಿ ವಿಭಜಿಸುವುದು ಹೇಗೆ ಎಂದು ನಾವು ಅನ್ವೇಷಿಸುತ್ತೇವೆ. ಸನ್ನೆ ಮಾಡುವ ಮೂಲಕ Buffer.byteLength(), ಲಭ್ಯವಿರುವ ಮೆಮೊರಿಯನ್ನು ಮೀರುವುದರಿಂದ ಉಂಟಾಗುವ ದೋಷಗಳು ಅಥವಾ ಕ್ರ್ಯಾಶ್‌ಗಳನ್ನು ತಡೆಗಟ್ಟುವ ಮೂಲಕ ಪ್ರತಿ ಚಂಕ್ ನಿರ್ದಿಷ್ಟ ಮೆಮೊರಿ ಮಿತಿಯೊಳಗೆ ಇರುವುದನ್ನು ನಾವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.

ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಯ ಮೂಲಕ, ದೊಡ್ಡ ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ ನಿಮ್ಮ ಕೋಡ್ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮತ್ತು ದೃಢವಾಗಿರುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ Node.js ನಲ್ಲಿ ಇದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಉತ್ತಮ ವಿಧಾನವನ್ನು ನೀವು ಕಲಿಯುವಿರಿ. ಪರಿಹಾರಕ್ಕೆ ಧುಮುಕೋಣ.

ಆಜ್ಞೆ ಬಳಕೆಯ ಉದಾಹರಣೆ
Buffer.byteLength() ಸ್ಟ್ರಿಂಗ್‌ನ ಬೈಟ್ ಗಾತ್ರವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಬಳಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗಳಲ್ಲಿ, ಪ್ರತಿ ವಸ್ತುವಿನ ಗಾತ್ರವನ್ನು ಕಟ್ಟುನಿಟ್ಟಾದ ನಂತರ ನಿರ್ಧರಿಸಲು ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ, ಭಾಗಗಳು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಬೈಟ್ ಮಿತಿಯನ್ನು ಮೀರುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
JSON.stringify() JavaScript ವಸ್ತುಗಳನ್ನು JSON ಸ್ಟ್ರಿಂಗ್ ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ. ಪ್ರತಿಯೊಂದು ವಸ್ತುವಿನ ಗಾತ್ರವನ್ನು ಬೈಟ್‌ಗಳಲ್ಲಿ ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಇದು ಅತ್ಯಗತ್ಯ, ಏಕೆಂದರೆ ನಿಖರವಾದ ಗಾತ್ರದ ಅಳತೆಗಾಗಿ ವಸ್ತುಗಳು ಸ್ಟ್ರಿಂಗ್ ರೂಪದಲ್ಲಿರಬೇಕು.
Array.reduce() ಫಲಿತಾಂಶಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ರಚನೆಯ ಮೇಲೆ ಪುನರಾವರ್ತಿಸುವ ಉನ್ನತ-ಕ್ರಮದ ಕಾರ್ಯ. ಈ ದ್ರಾವಣದಲ್ಲಿ, ಬೈಟ್-ಗಾತ್ರದ ಮಿತಿಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ ವಸ್ತುಗಳ ತುಂಡುಗಳನ್ನು ನಿರ್ಮಿಸಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.
Array.forEach() ರಚನೆಯ ಪ್ರತಿ ವಸ್ತುವಿನ ಮೇಲೆ ಪುನರಾವರ್ತನೆಯಾಗುತ್ತದೆ. ಪ್ರತಿ ವಸ್ತುವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು, ಅದರ ಗಾತ್ರವನ್ನು ಲೆಕ್ಕಹಾಕಲು ಮತ್ತು ಗಾತ್ರದ ನಿರ್ಬಂಧಗಳ ಆಧಾರದ ಮೇಲೆ ಪ್ರಸ್ತುತ ಭಾಗಕ್ಕೆ ಸೇರಿಸಲು ಹಲವಾರು ಉದಾಹರಣೆಗಳಲ್ಲಿ ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.
if (condition) ಖಂಡದಲ್ಲಿರುವ ವಸ್ತುಗಳ ಒಟ್ಟು ಗಾತ್ರವು ಮಿತಿಯನ್ನು ಮೀರಿದೆಯೇ ಎಂಬುದನ್ನು ಷರತ್ತು ಹೇಳಿಕೆಗಳು ಪರಿಶೀಲಿಸುತ್ತವೆ. ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಬೈಟ್ ಗಾತ್ರವನ್ನು ಮೀರಿ ಯಾವುದೇ ಭಾಗವು ಬೆಳೆಯುವುದಿಲ್ಲ ಎಂದು ಇದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
Array.push() ರಚನೆಗೆ ಅಂಶಗಳನ್ನು ಸೇರಿಸುತ್ತದೆ. ಪ್ರಸ್ತುತ ಭಾಗಕ್ಕೆ ಹೊಸ ವಸ್ತುಗಳನ್ನು ಸೇರಿಸಲು ಅಥವಾ ಗಾತ್ರದ ಮಿತಿಯನ್ನು ತಲುಪಿದಾಗ ಹೊಸ ಚಂಕ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.
try...catch ಅಮಾನ್ಯವಾದ ಇನ್‌ಪುಟ್ ಅರೇಗಳು ಅಥವಾ ತಪ್ಪಾದ ಗರಿಷ್ಠ ಗಾತ್ರಗಳಂತಹ ಸಂಭಾವ್ಯ ಸಮಸ್ಯೆಗಳಿಗೆ ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇದು ಕೋಡ್ ದೃಢವಾಗಿರುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ ಮತ್ತು ಅನಿರೀಕ್ಷಿತ ಇನ್‌ಪುಟ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ ಮುರಿಯುವುದಿಲ್ಲ.
Array.isArray() ಮೌಲ್ಯವು ಒಂದು ಶ್ರೇಣಿಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವ ಅಂತರ್ನಿರ್ಮಿತ ವಿಧಾನ. ಇನ್‌ಪುಟ್ ಮೌಲ್ಯೀಕರಣಕ್ಕಾಗಿ ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ, ಕಾರ್ಯವು ಮಾನ್ಯವಾದ ಸರಣಿಗಳನ್ನು ಮಾತ್ರ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
throw new Error() ಅಮಾನ್ಯವಾದ ಇನ್‌ಪುಟ್ ಅಥವಾ ಷರತ್ತುಗಳು ಎದುರಾದಾಗ ನಿರ್ದಿಷ್ಟ ದೋಷ ಸಂದೇಶಗಳನ್ನು ಎಸೆಯಲು ಬಳಸಲಾಗುತ್ತದೆ, ಇದು ನೈಜ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ದೋಷಯುಕ್ತ ಡೇಟಾವನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು ಸುಲಭವಾಗುತ್ತದೆ.

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಮೆಮೊರಿ ಗಾತ್ರದ ಮೂಲಕ ಚಂಕಿಂಗ್ ಅರೇಗಳಿಗೆ ಪರಿಹಾರವನ್ನು ಒಡೆಯುವುದು

ಹಿಂದಿನ ಉದಾಹರಣೆಗಳಲ್ಲಿ ಒದಗಿಸಲಾದ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ: ಪ್ರತಿ ಚಂಕ್‌ನ ಬೈಟ್ ಗಾತ್ರದ ಆಧಾರದ ಮೇಲೆ ವಸ್ತುಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಸಣ್ಣ ಭಾಗಗಳಾಗಿ ವಿಭಜಿಸುವುದು. API ಗಳು ಅಥವಾ ಡೇಟಾಬೇಸ್ ಒಳಸೇರಿಸುವಿಕೆಯಂತಹ ಕಟ್ಟುನಿಟ್ಟಾದ ಮೆಮೊರಿ ಅಥವಾ ಪೇಲೋಡ್ ಗಾತ್ರದ ಮಿತಿಗಳನ್ನು ಹೊಂದಿರುವ ಸಿಸ್ಟಮ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಇದು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ. ಬಳಸಿ ಬೈಟ್‌ಗಳಲ್ಲಿ ಪ್ರತಿ ವಸ್ತುವಿನ ಮೆಮೊರಿ ಗಾತ್ರವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವ ಮೂಲಕ Buffer.byteLength(), ಯಾವುದೇ ಭಾಗವು ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರುವುದಿಲ್ಲ ಎಂದು ನಾವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುತ್ತೇವೆ.

ಮೊದಲ ವಿಧಾನವು ಸಾಂಪ್ರದಾಯಿಕತೆಯನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ Array.forEach() ಲೂಪ್, ಅಲ್ಲಿ ರಚನೆಯ ಪ್ರತಿಯೊಂದು ವಸ್ತುವನ್ನು ಒಂದೊಂದಾಗಿ ಸಂಸ್ಕರಿಸಲಾಗುತ್ತದೆ. ಪ್ರತಿ ಆಬ್ಜೆಕ್ಟ್‌ಗೆ, ನಾವು ಮೊದಲು ಅದನ್ನು ಬಳಸಿಕೊಂಡು JSON ಸ್ಟ್ರಿಂಗ್‌ಗೆ ಪರಿವರ್ತಿಸುತ್ತೇವೆ JSON.stringify(), ತದನಂತರ ಅದರ ಗಾತ್ರವನ್ನು ಬೈಟ್‌ಗಳಲ್ಲಿ ಲೆಕ್ಕ ಹಾಕಿ. ಪ್ರಸ್ತುತ ಚಂಕ್‌ನ ಒಟ್ಟು ಗಾತ್ರವು (ಪ್ರಸ್ತುತ ವಸ್ತುವಿನ ಗಾತ್ರದ ಜೊತೆಗೆ) ಗರಿಷ್ಠ ಅನುಮತಿಸಲಾದ ಗಾತ್ರವನ್ನು ಮೀರಿದರೆ, ಪ್ರಸ್ತುತ ಚಂಕ್ ಅನ್ನು ಭಾಗಗಳ ಅಂತಿಮ ಶ್ರೇಣಿಗೆ ತಳ್ಳಲಾಗುತ್ತದೆ ಮತ್ತು ಹೊಸ ಚಂಕ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತದೆ. ಈ ವಿಧಾನವು ಸರಳವಾಗಿದೆ ಆದರೆ ಪರಿಣಾಮಕಾರಿಯಾಗಿದೆ, ನಿಜವಾದ ಮೆಮೊರಿ ಬಳಕೆಯ ಆಧಾರದ ಮೇಲೆ ಚಂಕಿಂಗ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಮಾಡಲಾಗುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.

ಎರಡನೆಯ ವಿಧಾನವು ಬಳಸುತ್ತದೆ Array.reduce(), ಇದು ಕ್ಲೀನರ್, ಹೆಚ್ಚು ಕ್ರಿಯಾತ್ಮಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ವಿಧಾನವಾಗಿದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ರಚನೆಯನ್ನು ಭಾಗಗಳ ಒಂದು ಶ್ರೇಣಿಗೆ ಕಡಿಮೆಗೊಳಿಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ ವಸ್ತುವನ್ನು ಚಂಕ್‌ಗೆ ಸೇರಿಸುವ ಅಥವಾ ಹೊಸ ಚಂಕ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವ ತರ್ಕವನ್ನು ರಿಡ್ಯೂಸರ್ ಫಂಕ್ಷನ್‌ನಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. ಈ ವಿಧಾನವು ಹೆಚ್ಚು ಸೊಗಸಾದ ಮತ್ತು ಸಂಕ್ಷಿಪ್ತವಾಗಿರುತ್ತದೆ, ವಿಶೇಷವಾಗಿ ಸಂಕೀರ್ಣ ರಚನೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ. ಆದಾಗ್ಯೂ, ಪ್ರತಿ ಚಂಕ್ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಬೈಟ್ ಗಾತ್ರದ ಮಿತಿಯೊಳಗೆ ಇರುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ ಇದು ಮೊದಲ ವಿಧಾನದಂತೆಯೇ ಅದೇ ಉದ್ದೇಶವನ್ನು ಪೂರೈಸುತ್ತದೆ.

ಮೂರನೇ ವಿಧಾನವು ಇನ್‌ಪುಟ್ ಮೌಲ್ಯೀಕರಣ ಮತ್ತು ದೋಷ ನಿರ್ವಹಣೆಯಂತಹ ಹೆಚ್ಚು ಸುಧಾರಿತ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ, ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಹೆಚ್ಚು ದೃಢವಾಗಿ ಮಾಡುತ್ತದೆ. ನಾವು ಬಳಸುತ್ತೇವೆ Array.isArray() ಇನ್‌ಪುಟ್ ಮಾನ್ಯವಾದ ಶ್ರೇಣಿಯೇ ಎಂದು ಪರಿಶೀಲಿಸಲು ಮತ್ತು ಬಳಸಿಕೊಂಡು ಕಸ್ಟಮ್ ದೋಷಗಳನ್ನು ಎಸೆಯುವ ಷರತ್ತುಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ ಹೊಸ ದೋಷವನ್ನು ಎಸೆಯಿರಿ() ಇನ್ಪುಟ್ ಡೇಟಾ ಅಮಾನ್ಯವಾಗಿದ್ದರೆ. ತಪ್ಪಾದ ಇನ್‌ಪುಟ್‌ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ ಕೋಡ್ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಮುರಿಯುವುದಿಲ್ಲ ಎಂದು ಇದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಈ ಆವೃತ್ತಿಯು ಹೆಚ್ಚು ಮಾಡ್ಯುಲರ್ ಮತ್ತು ರಚನಾತ್ಮಕವಾಗಿದೆ, ಸುರಕ್ಷತೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ನಿರ್ಣಾಯಕವಾಗಿರುವ ಉತ್ಪಾದನಾ ಮಟ್ಟದ ಕೋಡ್‌ಗೆ ಇದು ಸೂಕ್ತವಾಗಿದೆ.

Node.js ನಲ್ಲಿ ಬೈಟ್ ಗಾತ್ರದ ಮೂಲಕ ವಸ್ತುಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ವಿಭಜಿಸುವುದು

ಈ ವಿಧಾನವು Node.js ಅನ್ನು Buffer.byteLength ಜೊತೆಗೆ ವಸ್ತುಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ತುಂಡುಗಳಾಗಿ ವಿಭಜಿಸಲು ಬಳಸುತ್ತದೆ. ಪ್ರತಿಯೊಂದು ಭಾಗದ ಗಾತ್ರವು ಬೈಟ್‌ಗಳಲ್ಲಿ ಗರಿಷ್ಠ ಮೆಮೊರಿ ಗಾತ್ರವನ್ನು ಆಧರಿಸಿದೆ.

// Approach 1: Basic Solution using a loop and Buffer.byteLength<code>const data = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
const maxSizeInBytes = 100; // Maximum size per chunk
function chunkArrayBySize(arr, maxSize) {
  let chunks = [];
  let currentChunk = [];
  let currentChunkSize = 0;

  arr.forEach(obj => {
    const objSize = Buffer.byteLength(JSON.stringify(obj));
    if (currentChunkSize + objSize > maxSize) {
      chunks.push(currentChunk);
      currentChunk = [];
      currentChunkSize = 0;
    }
    currentChunk.push(obj);
    currentChunkSize += objSize;
  });
  if (currentChunk.length) chunks.push(currentChunk);
  return chunks;
}

console.log(chunkArrayBySize(data, maxSizeInBytes));

Array.reduce() ಬಳಸಿಕೊಂಡು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಿದ ಮೆಮೊರಿ ಚಂಕಿಂಗ್

ಈ ಪರಿಹಾರವು Node.js ನಲ್ಲಿ ಒಂದು ಕ್ಲೀನರ್ ಮತ್ತು ಹೆಚ್ಚು ಕ್ರಿಯಾತ್ಮಕ ವಿಧಾನಕ್ಕಾಗಿ Array.reduce() ಅನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ.

// Approach 2: Using Array.reduce() for a more functional style<code>function chunkArrayWithReduce(arr, maxSize) {
  return arr.reduce((chunks, obj) => {
    const objSize = Buffer.byteLength(JSON.stringify(obj));
    let lastChunk = chunks[chunks.length - 1];

    if (!lastChunk || Buffer.byteLength(JSON.stringify(lastChunk)) + objSize > maxSize) {
      chunks.push([obj]);
    } else {
      lastChunk.push(obj);
    }

    return chunks;
  }, []);
}

console.log(chunkArrayWithReduce(data, maxSizeInBytes));

ದೋಷ ನಿರ್ವಹಣೆ ಮತ್ತು ಮೌಲ್ಯೀಕರಣದೊಂದಿಗೆ ಸುಧಾರಿತ ಮಾಡ್ಯುಲರ್ ಪರಿಹಾರ

ಈ ಸುಧಾರಿತ ವಿಧಾನವು ಮಾಡ್ಯುಲಾರಿಟಿ, ದೋಷ ನಿರ್ವಹಣೆ ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೌಲ್ಯೀಕರಣವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಇದು ಉತ್ಪಾದನಾ ಪರಿಸರಕ್ಕೆ ಸೂಕ್ತವಾಗಿದೆ.

// Approach 3: Modular and robust solution with error handling<code>function isValidArray(arr) {
  return Array.isArray(arr) && arr.length > 0;
}

function chunkArrayWithValidation(arr, maxSize) {
  if (!isValidArray(arr)) throw new Error("Invalid input array");
  if (typeof maxSize !== 'number' || maxSize <= 0) throw new Error("Invalid max size");

  let chunks = [], currentChunk = [], currentChunkSize = 0;
  arr.forEach(obj => {
    const objSize = Buffer.byteLength(JSON.stringify(obj));
    if (currentChunkSize + objSize > maxSize) {
      chunks.push(currentChunk);
      currentChunk = [];
      currentChunkSize = 0;
    }
    currentChunk.push(obj);
    currentChunkSize += objSize;
  });

  if (currentChunk.length) chunks.push(currentChunk);
  return chunks;
}

try {
  console.log(chunkArrayWithValidation(data, maxSizeInBytes));
} catch (error) {
  console.error("Error:", error.message);
}

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಅರೇಗಳನ್ನು ಚಂಕಿಂಗ್ ಮಾಡುವಾಗ ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವುದು

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ದೊಡ್ಡ ಡೇಟಾಸೆಟ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದು ಅತ್ಯಗತ್ಯ, ವಿಶೇಷವಾಗಿ Node.js ನಂತಹ ಪರಿಸರದಲ್ಲಿ ಸಮರ್ಥ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯು ಕ್ರ್ಯಾಶ್‌ಗಳು ಅಥವಾ ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಗಳನ್ನು ತಡೆಯುತ್ತದೆ. ಪರಿಗಣಿಸಬೇಕಾದ ಒಂದು ಪ್ರಮುಖ ಅಂಶವೆಂದರೆ ವಿವಿಧ ವಸ್ತುಗಳ ಗಾತ್ರಗಳ ಸರಣಿಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದು. ಧಾರಾವಾಹಿಯಾದಾಗ ಪ್ರತಿಯೊಂದು ವಸ್ತುವು ವಿಭಿನ್ನ ಬೈಟ್ ಗಾತ್ರಗಳನ್ನು ಹೊಂದಬಹುದು, ಮತ್ತು ಈ ವ್ಯತ್ಯಾಸವು ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಊಹಿಸಲು ಸವಾಲಾಗುವಂತೆ ಮಾಡುತ್ತದೆ.

ಒಂದು ನಿರ್ಣಾಯಕ ತಂತ್ರವನ್ನು ಬಳಸಲಾಗುತ್ತಿದೆ Buffer.byteLength() ವಸ್ತುಗಳನ್ನು ತಂತಿಗಳಾಗಿ ಪರಿವರ್ತಿಸಿದ ನಂತರ JSON.stringify(). ಪ್ರತಿಯೊಂದು ವಸ್ತುವಿನ ಬೈಟ್ ಗಾತ್ರವನ್ನು ಅಳೆಯುವ ಮೂಲಕ, ಯಾವುದೇ ಚಂಕ್ ಗರಿಷ್ಠ ಬೈಟ್ ಮಿತಿಯನ್ನು ಮೀರುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ ನೀವು ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ನಿಖರವಾಗಿ ನಿಯಂತ್ರಿಸಬಹುದು. ಆದಾಗ್ಯೂ, ಮೆಮೊರಿ ಬಳಕೆಗೆ ಕೊಡುಗೆ ನೀಡಬಹುದಾದ ಅಪ್ಲಿಕೇಶನ್‌ನ ಇತರ ಭಾಗಗಳಿಂದ ಮೆಮೊರಿ ಓವರ್‌ಹೆಡ್ ಅನ್ನು ಪರಿಗಣಿಸುವುದು ಸಹ ಮುಖ್ಯವಾಗಿದೆ, ನಿಮ್ಮ ಪರಿಹಾರವು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಉಳಿಯುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.

ಬೈಟ್ ಗಾತ್ರದ ಆಧಾರದ ಮೇಲೆ ಚಂಕ್ ಮಾಡುವುದರ ಜೊತೆಗೆ, ದೊಡ್ಡ ಡೇಟಾಸೆಟ್‌ಗಳಿಗಾಗಿ ಸ್ಟ್ರೀಮಿಂಗ್ ತಂತ್ರಗಳನ್ನು ಬಳಸುವಂತಹ ಹೆಚ್ಚು ಸುಧಾರಿತ ಮೆಮೊರಿ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ನೀವು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಬಯಸಬಹುದು. ಈ ವಿಧಾನವು ಸಂಪೂರ್ಣ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಒಮ್ಮೆ ಮೆಮೊರಿಗೆ ಲೋಡ್ ಮಾಡದೆಯೇ ಡೇಟಾವನ್ನು ಭಾಗಗಳಲ್ಲಿ ನಿರ್ವಹಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ದೋಷ ನಿರ್ವಹಣೆ ಮತ್ತು ಊರ್ಜಿತಗೊಳಿಸುವಿಕೆಯನ್ನು ಸಂಯೋಜಿಸುವುದು ದೃಢವಾದ ಪರಿಹಾರಗಳನ್ನು ನಿರ್ಮಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಅಮಾನ್ಯ ಡೇಟಾವು ನಿಮ್ಮ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ ಅನಗತ್ಯ ಮೆಮೊರಿ ಸೋರಿಕೆಗಳು ಅಥವಾ ಕ್ರ್ಯಾಶ್‌ಗಳಿಗೆ ಕಾರಣವಾಗುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಮೆಮೊರಿ ಗಾತ್ರದ ಮೂಲಕ ಚಂಕಿಂಗ್ ಅರೇಗಳ ಬಗ್ಗೆ ಪದೇ ಪದೇ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು

  1. ಹೇಗೆ ಮಾಡುತ್ತದೆ Buffer.byteLength() ಅರೇಗಳನ್ನು ಕತ್ತರಿಸುವಲ್ಲಿ ಸಹಾಯ ಮಾಡುವುದೇ?
  2. ದಿ Buffer.byteLength() ಕಾರ್ಯವು ಬೈಟ್‌ಗಳಲ್ಲಿ ಸ್ಟ್ರಿಂಗ್‌ನ ಗಾತ್ರವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ. ಈ ಕಾರ್ಯವನ್ನು ಬಳಸುವ ಮೂಲಕ, ಪ್ರತಿ ಚಂಕ್‌ನ ಗಾತ್ರವು ನಿಮ್ಮ ಮೆಮೊರಿ ಮಿತಿಯಲ್ಲಿ ಉಳಿಯುತ್ತದೆ ಎಂದು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.
  3. ಇದರ ಉದ್ದೇಶವೇನು JSON.stringify() ಈ ಸಂದರ್ಭದಲ್ಲಿ?
  4. JSON.stringify() JavaScript ಆಬ್ಜೆಕ್ಟ್‌ಗಳನ್ನು JSON ಸ್ಟ್ರಿಂಗ್‌ಗಳಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಇದು ಅವಶ್ಯಕವಾಗಿದೆ Buffer.byteLength() ತಂತಿಗಳ ಗಾತ್ರವನ್ನು ಮಾತ್ರ ಅಳೆಯುತ್ತದೆ, ವಸ್ತುಗಳಲ್ಲ.
  5. ನಾನು ಬೈಟ್ ಗಾತ್ರದ ಬದಲಿಗೆ ಆಬ್ಜೆಕ್ಟ್ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಆಧರಿಸಿ ಸರಣಿಗಳನ್ನು ಚಂಕ್ ಮಾಡಬಹುದೇ?
  6. ಹೌದು, ನೀವು ID ಅಥವಾ ಟೈಮ್‌ಸ್ಟ್ಯಾಂಪ್‌ನಂತಹ ಆಬ್ಜೆಕ್ಟ್ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಆಧರಿಸಿ ಚಂಕ್ ಮಾಡಬಹುದು, ಆದರೆ ಬೈಟ್ ಗಾತ್ರವನ್ನು ಬಳಸುವುದರಿಂದ ಕಟ್ಟುನಿಟ್ಟಾದ ಮಿತಿಗಳೊಂದಿಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಮೆಮೊರಿ ಬಳಕೆಯ ಮೇಲೆ ಹೆಚ್ಚು ನಿಖರವಾದ ನಿಯಂತ್ರಣವನ್ನು ಒದಗಿಸುತ್ತದೆ.
  7. ಅರೇಗಳನ್ನು ಚಂಕ್ ಮಾಡುವಾಗ ನಾನು ದೋಷಗಳನ್ನು ಹೇಗೆ ನಿಭಾಯಿಸಬಹುದು?
  8. ಬಳಸಿ try...catch ಚಂಕಿಂಗ್ ಪ್ರಕ್ರಿಯೆಯ ಸಮಯದಲ್ಲಿ ದೋಷಗಳನ್ನು ಹಿಡಿಯಲು ನಿರ್ಬಂಧಿಸುತ್ತದೆ ಮತ್ತು ಕಾರ್ಯಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಇನ್‌ಪುಟ್ ಮೌಲ್ಯೀಕರಣವನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ Array.isArray().
  9. ಒಂದು ವಸ್ತುವು ಯಾವುದೇ ಭಾಗಕ್ಕೆ ತುಂಬಾ ದೊಡ್ಡದಾಗಿದ್ದರೆ ಏನಾಗುತ್ತದೆ?
  10. ನೀವು ದೊಡ್ಡ ವಸ್ತುಗಳನ್ನು ಮತ್ತಷ್ಟು ಒಡೆಯಬೇಕಾಗಬಹುದು ಅಥವಾ ಅಂತಹ ಪ್ರಕರಣಗಳನ್ನು ನಿರ್ದಿಷ್ಟವಾಗಿ ನಿರ್ವಹಿಸಬೇಕಾಗಬಹುದು. ಉದಾಹರಣೆಗೆ, ದೋಷವನ್ನು ಲಾಗ್ ಮಾಡುವ ಮೂಲಕ ಅಥವಾ ಚಂಕಿಂಗ್ ಪ್ರಕ್ರಿಯೆಯಿಂದ ಅಂತಹ ವಸ್ತುಗಳನ್ನು ತಿರಸ್ಕರಿಸುವ ಮೂಲಕ.

ದಕ್ಷ ಅರೇ ಚುಂಕಿಂಗ್‌ನಲ್ಲಿ ಅಂತಿಮ ಆಲೋಚನೆಗಳು

ಅವುಗಳ ಬೈಟ್ ಗಾತ್ರದ ಆಧಾರದ ಮೇಲೆ ವಸ್ತುಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ವಿಭಜಿಸುವುದು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಮೆಮೊರಿಯನ್ನು ನಿರ್ವಹಿಸಲು ಪರಿಣಾಮಕಾರಿ ಮಾರ್ಗವಾಗಿದೆ, ವಿಶೇಷವಾಗಿ ಡೈನಾಮಿಕ್ ಆಬ್ಜೆಕ್ಟ್ ಗಾತ್ರಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ. ಮುಂತಾದ ಕಾರ್ಯಗಳನ್ನು ಬಳಸುವುದು Buffer.byteLength() ಮೆಮೊರಿ ಮಿತಿಗಳನ್ನು ಮೀರದೆ ಅರೇಗಳನ್ನು ಚಂಕ್ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

ರಚನೆಯ ಮೂಲಕ ಲೂಪ್ ಮಾಡುವುದು ಅಥವಾ ಬಳಸುವಂತಹ ವಿಭಿನ್ನ ವಿಧಾನಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ Array.reduce(), ನೀವು ಹೊಂದಿಕೊಳ್ಳುವ, ದೃಢವಾದ ಪರಿಹಾರಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು. ದೊಡ್ಡ ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ಸಮರ್ಥವಾಗಿ ನಿರ್ವಹಿಸಲು, ಮೆಮೊರಿ ಓವರ್‌ಫ್ಲೋ ತಡೆಯಲು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು Node.js ನಲ್ಲಿ ಈ ತಂತ್ರವು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ.

ಸಮರ್ಥ ಅರೇ ಚಂಕಿಂಗ್‌ಗಾಗಿ ಮೂಲ ಮತ್ತು ಉಲ್ಲೇಖ ವಸ್ತು
  1. ವಿವರವಾದ ದಾಖಲಾತಿಗಾಗಿ Buffer.byteLength() ಮತ್ತು Node.js ನಲ್ಲಿ ಅದರ ಬಳಕೆ, ಅಧಿಕೃತ Node.js API ದಸ್ತಾವೇಜನ್ನು ಇಲ್ಲಿ ಭೇಟಿ ಮಾಡಿ Node.js ಬಫರ್ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ .
  2. ಅರೇ ಮ್ಯಾನಿಪ್ಯುಲೇಷನ್ ವಿಧಾನಗಳ ಕುರಿತು ಹೆಚ್ಚಿನ ಓದುವಿಕೆ Array.reduce() ನಲ್ಲಿ Mozilla Developer Network (MDN) ನಲ್ಲಿ ಕಾಣಬಹುದು MDN ವೆಬ್ ಡಾಕ್ಸ್: Array.reduce() .
  3. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಆಳವಾದ ತಿಳುವಳಿಕೆಗಾಗಿ JSON.stringify() ವಿಧಾನ ಮತ್ತು ಡೇಟಾ ಸಂಸ್ಕರಣೆಯಲ್ಲಿ ಅದರ ಪಾತ್ರ, ಭೇಟಿ MDN ವೆಬ್ ಡಾಕ್ಸ್: JSON.stringify() .