ರಿಯಾಕ್ಟ್ನ useMemo ಹುಕ್ನ ಶಕ್ತಿಯನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ. ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ ಜಾಗತಿಕ ರಿಯಾಕ್ಟ್ ಡೆವಲಪರ್ಗಳಿಗಾಗಿ ಮೆಮೊೈಸೇಶನ್, ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಗಳು, ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಆಪ್ಟಿಮೈಸೇಶನ್ನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ.
ರಿಯಾಕ್ಟ್ useMemo ಡಿಪೆಂಡೆನ್ಸಿಗಳು: ಮೆಮೊೈಸೇಶನ್ನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವುದು
ವೆಬ್ ಡೆವಲಪ್ಮೆಂಟ್ನ ಕ್ರಿಯಾತ್ಮಕ ಜಗತ್ತಿನಲ್ಲಿ, ವಿಶೇಷವಾಗಿ ರಿಯಾಕ್ಟ್ ಪರಿಸರ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ, ಕಾಂಪೊನೆಂಟ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದು ಅತ್ಯಂತ ಮುಖ್ಯ. ಅಪ್ಲಿಕೇಶನ್ಗಳು ಸಂಕೀರ್ಣವಾದಂತೆ, ಅನಗತ್ಯವಾದ ರೀ-ರೆಂಡರ್ಗಳು ನಿಧಾನವಾದ ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ಗಳಿಗೆ ಮತ್ತು ಕಳಪೆ ಬಳಕೆದಾರ ಅನುಭವಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು. ಇದನ್ನು ಎದುರಿಸಲು ರಿಯಾಕ್ಟ್ನ ಶಕ್ತಿಶಾಲಿ ಸಾಧನಗಳಲ್ಲಿ ಒಂದಾದ useMemo
ಹುಕ್ ಸಹಾಯಕ. ಆದಾಗ್ಯೂ, ಅದರ ಪರಿಣಾಮಕಾರಿ ಬಳಕೆಯು ಅದರ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯ ಸಂಪೂರ್ಣ ತಿಳುವಳಿಕೆಯನ್ನು ಅವಲಂಬಿಸಿದೆ. ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿಯು useMemo
ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಬಳಸುವ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ, ನಿಮ್ಮ ರಿಯಾಕ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಜಾಗತಿಕ ಪ್ರೇಕ್ಷಕರಿಗೆ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ವಿಸ್ತರಣೀಯವಾಗಿ ಉಳಿಯುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ರಿಯಾಕ್ಟ್ನಲ್ಲಿ ಮೆಮೊೈಸೇಶನ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
useMemo
ನ ನಿರ್ದಿಷ್ಟತೆಗಳಿಗೆ ಹೋಗುವ ಮೊದಲು, ಮೆಮೊೈಸೇಶನ್ ಪರಿಕಲ್ಪನೆಯನ್ನು ಗ್ರಹಿಸುವುದು ಮುಖ್ಯವಾಗಿದೆ. ಮೆಮೊೈಸೇಶನ್ ಒಂದು ಆಪ್ಟಿಮೈಸೇಶನ್ ತಂತ್ರವಾಗಿದ್ದು, ಇದು ದುಬಾರಿ ಫಂಕ್ಷನ್ ಕಾಲ್ಗಳ ಫಲಿತಾಂಶಗಳನ್ನು ಸಂಗ್ರಹಿಸಿ, ಅದೇ ಇನ್ಪುಟ್ಗಳು ಮತ್ತೆ ಬಂದಾಗ ಸಂಗ್ರಹಿಸಿದ ಫಲಿತಾಂಶವನ್ನು ಹಿಂತಿರುಗಿಸುವ ಮೂಲಕ ಕಂಪ್ಯೂಟರ್ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ವೇಗಗೊಳಿಸುತ್ತದೆ. ಮೂಲಭೂತವಾಗಿ, ಇದು ಅನಗತ್ಯ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ತಪ್ಪಿಸುವುದಾಗಿದೆ.
ರಿಯಾಕ್ಟ್ನಲ್ಲಿ, ಮೆಮೊೈಸೇಶನ್ ಅನ್ನು ಮುಖ್ಯವಾಗಿ ಕಾಂಪೊನೆಂಟ್ಗಳ ಅನಗತ್ಯ ರೀ-ರೆಂಡರ್ಗಳನ್ನು ತಡೆಯಲು ಅಥವಾ ದುಬಾರಿ ಲೆಕ್ಕಾಚಾರಗಳ ಫಲಿತಾಂಶಗಳನ್ನು ಕ್ಯಾಶ್ ಮಾಡಲು ಬಳಸಲಾಗುತ್ತದೆ. ಇದು ಫಂಕ್ಷನಲ್ ಕಾಂಪೊನೆಂಟ್ಗಳಲ್ಲಿ ವಿಶೇಷವಾಗಿ ಮುಖ್ಯವಾಗಿದೆ, ಇಲ್ಲಿ ಸ್ಟೇಟ್ ಬದಲಾವಣೆಗಳು, ಪ್ರಾಪ್ ಅಪ್ಡೇಟ್ಗಳು, ಅಥವಾ ಪೇರೆಂಟ್ ಕಾಂಪೊನೆಂಟ್ ರೀ-ರೆಂಡರ್ಗಳಿಂದಾಗಿ ಆಗಾಗ್ಗೆ ರೀ-ರೆಂಡರ್ಗಳು ಸಂಭವಿಸಬಹುದು.
useMemo
ನ ಪಾತ್ರ
ರಿಯಾಕ್ಟ್ನಲ್ಲಿನ useMemo
ಹುಕ್ ಒಂದು ಲೆಕ್ಕಾಚಾರದ ಫಲಿತಾಂಶವನ್ನು ಮೆಮೊ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಎರಡು ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ:
- ನೀವು ಮೆಮೊ ಮಾಡಲು ಬಯಸುವ ಮೌಲ್ಯವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವ ಫಂಕ್ಷನ್.
- ಡಿಪೆಂಡೆನ್ಸಿಗಳ ಒಂದು ಅರೇ.
ಡಿಪೆಂಡೆನ್ಸಿಗಳಲ್ಲಿ ಒಂದು ಬದಲಾಗಿದ್ದರೆ ಮಾತ್ರ ರಿಯಾಕ್ಟ್ ಲೆಕ್ಕಾಚಾರದ ಫಂಕ್ಷನ್ ಅನ್ನು ಮರು-ರನ್ ಮಾಡುತ್ತದೆ. ಇಲ್ಲದಿದ್ದರೆ, ಅದು ಹಿಂದೆ ಲೆಕ್ಕಾಚಾರ ಮಾಡಿದ (ಕ್ಯಾಶ್ ಮಾಡಿದ) ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಇದು ಈ ಕೆಳಗಿನವುಗಳಿಗೆ ಅತ್ಯಂತ ಉಪಯುಕ್ತವಾಗಿದೆ:
- ದುಬಾರಿ ಲೆಕ್ಕಾಚಾರಗಳು: ಸಂಕೀರ್ಣ ಡೇಟಾ ಮ್ಯಾನಿಪ್ಯುಲೇಶನ್, ಫಿಲ್ಟರಿಂಗ್, ಸಾರ್ಟಿಂಗ್, ಅಥವಾ ಭಾರೀ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಫಂಕ್ಷನ್ಗಳು.
- ರೆಫರೆನ್ಶಿಯಲ್ ಈಕ್ವಾಲಿಟಿ: ಆಬ್ಜೆಕ್ಟ್ ಅಥವಾ ಅರೇ ಪ್ರಾಪ್ಸ್ಗಳನ್ನು ಅವಲಂಬಿಸಿರುವ ಚೈಲ್ಡ್ ಕಾಂಪೊನೆಂಟ್ಗಳ ಅನಗತ್ಯ ರೀ-ರೆಂಡರ್ಗಳನ್ನು ತಡೆಯುವುದು.
useMemo
ನ ಸಿಂಟ್ಯಾಕ್ಸ್
useMemo
ಗಾಗಿ ಮೂಲ ಸಿಂಟ್ಯಾಕ್ಸ್ ಈ ಕೆಳಗಿನಂತಿದೆ:
const memoizedValue = useMemo(() => {
// ಇಲ್ಲಿ ದುಬಾರಿ ಲೆಕ್ಕಾಚಾರ
return computeExpensiveValue(a, b);
}, [a, b]);
ಇಲ್ಲಿ, computeExpensiveValue(a, b)
ನಾವು ಮೆಮೊ ಮಾಡಲು ಬಯಸುವ ಫಲಿತಾಂಶವನ್ನು ನೀಡುವ ಫಂಕ್ಷನ್ ಆಗಿದೆ. ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇ [a, b]
ಯು a
ಅಥವಾ b
ರೆಂಡರ್ಗಳ ನಡುವೆ ಬದಲಾದರೆ ಮಾತ್ರ ಮೌಲ್ಯವನ್ನು ಮರುಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ರಿಯಾಕ್ಟ್ಗೆ ಹೇಳುತ್ತದೆ.
ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯ ನಿರ್ಣಾಯಕ ಪಾತ್ರ
ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇ useMemo
ನ ಹೃದಯಭಾಗವಾಗಿದೆ. ಮೆಮೊ ಮಾಡಿದ ಮೌಲ್ಯವನ್ನು ಯಾವಾಗ ಮರುಲೆಕ್ಕಾಚಾರ ಮಾಡಬೇಕು ಎಂಬುದನ್ನು ಇದು ನಿರ್ದೇಶಿಸುತ್ತದೆ. ಸರಿಯಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯು ಕಾರ್ಯಕ್ಷಮತೆಯ ಲಾಭ ಮತ್ತು ನಿಖರತೆ ಎರಡಕ್ಕೂ ಅತ್ಯಗತ್ಯ. ತಪ್ಪಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಅರೇಯು ಈ ಕೆಳಗಿನವುಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು:
- ಹಳೆಯ ಡೇಟಾ: ಒಂದು ಡಿಪೆಂಡೆನ್ಸಿಯನ್ನು ಬಿಟ್ಟುಬಿಟ್ಟರೆ, ಮೆಮೊ ಮಾಡಿದ ಮೌಲ್ಯವು ನವೀಕರಣಗೊಳ್ಳಬೇಕಾದಾಗ ಆಗದೇ ಇರಬಹುದು, ಇದು ಬಗ್ಗಳಿಗೆ ಮತ್ತು ಹಳೆಯ ಮಾಹಿತಿಯನ್ನು ಪ್ರದರ್ಶಿಸಲು ಕಾರಣವಾಗುತ್ತದೆ.
- ಕಾರ್ಯಕ್ಷಮತೆಯಲ್ಲಿ ಲಾಭವಿಲ್ಲ: ಡಿಪೆಂಡೆನ್ಸಿಗಳು ಅಗತ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚಾಗಿ ಬದಲಾದರೆ, ಅಥವಾ ಲೆಕ್ಕಾಚಾರವು ನಿಜವಾಗಿಯೂ ದುಬಾರಿಯಲ್ಲದಿದ್ದರೆ,
useMemo
ಗಮನಾರ್ಹವಾದ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಯೋಜನವನ್ನು ಒದಗಿಸದಿರಬಹುದು, ಅಥವಾ ಓವರ್ಹೆಡ್ ಅನ್ನು ಕೂಡ ಸೇರಿಸಬಹುದು.
ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
ಸರಿಯಾದ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯನ್ನು ರಚಿಸಲು ಎಚ್ಚರಿಕೆಯ ಪರಿಗಣನೆ ಅಗತ್ಯ. ಇಲ್ಲಿ ಕೆಲವು ಮೂಲಭೂತ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳಿವೆ:
೧. ಮೆಮೊ ಮಾಡಿದ ಫಂಕ್ಷನ್ನಲ್ಲಿ ಬಳಸಲಾದ ಎಲ್ಲಾ ಮೌಲ್ಯಗಳನ್ನು ಸೇರಿಸಿ
ಇದು ಸುವರ್ಣ ನಿಯಮ. ಮೆಮೊ ಮಾಡಿದ ಫಂಕ್ಷನ್ ಒಳಗೆ ಓದಲಾದ ಯಾವುದೇ ವೇರಿಯಬಲ್, ಪ್ರಾಪ್, ಅಥವಾ ಸ್ಟೇಟ್ ಅನ್ನು ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯಲ್ಲಿ ಸೇರಿಸಲೇಬೇಕು. ರಿಯಾಕ್ಟ್ನ ಲಿಂಟಿಂಗ್ ನಿಯಮಗಳು (ನಿರ್ದಿಷ್ಟವಾಗಿ react-hooks/exhaustive-deps
) ಇಲ್ಲಿ ಅಮೂಲ್ಯವಾಗಿವೆ. ನೀವು ಡಿಪೆಂಡೆನ್ಸಿಯನ್ನು ತಪ್ಪಿಸಿದರೆ ಅವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತವೆ.
ಉದಾಹರಣೆ:
function MyComponent({ user, settings }) {
const userName = user.name;
const showWelcomeMessage = settings.showWelcome;
const welcomeMessage = useMemo(() => {
// ಈ ಲೆಕ್ಕಾಚಾರವು userName ಮತ್ತು showWelcomeMessage ಅನ್ನು ಅವಲಂಬಿಸಿದೆ
if (showWelcomeMessage) {
return `Welcome, ${userName}!`;
} else {
return "Welcome!";
}
}, [userName, showWelcomeMessage]); // ಎರಡನ್ನೂ ಸೇರಿಸಬೇಕು
return (
{welcomeMessage}
{/* ... other JSX */}
);
}
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, userName
ಮತ್ತು showWelcomeMessage
ಎರಡನ್ನೂ useMemo
ಕಾಲ್ಬ್ಯಾಕ್ ಒಳಗೆ ಬಳಸಲಾಗಿದೆ. ಆದ್ದರಿಂದ, ಅವುಗಳನ್ನು ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯಲ್ಲಿ ಸೇರಿಸಬೇಕು. ಈ ಮೌಲ್ಯಗಳಲ್ಲಿ ಯಾವುದಾದರೂ ಬದಲಾದರೆ, welcomeMessage
ಅನ್ನು ಮರುಲೆಕ್ಕಾಚಾರ ಮಾಡಲಾಗುತ್ತದೆ.
೨. ಆಬ್ಜೆಕ್ಟ್ಗಳು ಮತ್ತು ಅರೇಗಳಿಗಾಗಿ ರೆಫರೆನ್ಶಿಯಲ್ ಈಕ್ವಾಲಿಟಿಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ
ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು (ಸ್ಟ್ರಿಂಗ್ಗಳು, ಸಂಖ್ಯೆಗಳು, ಬೂಲಿಯನ್ಗಳು, null, undefined, ಸಿಂಬಲ್ಗಳು) ಮೌಲ್ಯದಿಂದ ಹೋಲಿಸಲಾಗುತ್ತದೆ. ಆದಾಗ್ಯೂ, ಆಬ್ಜೆಕ್ಟ್ಗಳು ಮತ್ತು ಅರೇಗಳನ್ನು ರೆಫರೆನ್ಸ್ ಮೂಲಕ ಹೋಲಿಸಲಾಗುತ್ತದೆ. ಇದರರ್ಥ ಒಂದು ಆಬ್ಜೆಕ್ಟ್ ಅಥವಾ ಅರೇ ಒಂದೇ ವಿಷಯವನ್ನು ಹೊಂದಿದ್ದರೂ, ಅದು ಹೊಸ ಇನ್ಸ್ಟೆನ್ಸ್ ಆಗಿದ್ದರೆ, ರಿಯಾಕ್ಟ್ ಅದನ್ನು ಬದಲಾವಣೆ ಎಂದು ಪರಿಗಣಿಸುತ್ತದೆ.
ಸನ್ನಿವೇಶ ೧: ಹೊಸ ಆಬ್ಜೆಕ್ಟ್/ಅರೇ ಲಿಟರಲ್ ಅನ್ನು ಪಾಸ್ ಮಾಡುವುದು
ನೀವು ಮೆಮೊ ಮಾಡಿದ ಚೈಲ್ಡ್ ಕಾಂಪೊನೆಂಟ್ಗೆ ಹೊಸ ಆಬ್ಜೆಕ್ಟ್ ಅಥವಾ ಅರೇ ಲಿಟರಲ್ ಅನ್ನು ನೇರವಾಗಿ ಪ್ರಾಪ್ ಆಗಿ ಪಾಸ್ ಮಾಡಿದರೆ ಅಥವಾ ಅದನ್ನು ಮೆಮೊ ಮಾಡಿದ ಲೆಕ್ಕಾಚಾರದೊಳಗೆ ಬಳಸಿದರೆ, ಅದು ಪೇರೆಂಟ್ನ ಪ್ರತಿ ರೆಂಡರ್ನಲ್ಲಿ ರೀ-ರೆಂಡರ್ ಅಥವಾ ಮರು-ಲೆಕ್ಕಾಚಾರವನ್ನು ಪ್ರಚೋದಿಸುತ್ತದೆ, ಇದು ಮೆಮೊೈಸೇಶನ್ನ ಪ್ರಯೋಜನಗಳನ್ನು ನಿರಾಕರಿಸುತ್ತದೆ.
function ParentComponent() {
const [count, setCount] = React.useState(0);
// ಇದು ಪ್ರತಿ ರೆಂಡರ್ನಲ್ಲಿ ಹೊಸ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ
const styleOptions = { backgroundColor: 'blue', padding: 10 };
return (
{/* ChildComponent ಮೆಮೊ ಮಾಡಿದ್ದರೆ, ಅದು ಅನಗತ್ಯವಾಗಿ ರೀ-ರೆಂಡರ್ ಆಗುತ್ತದೆ */}
);
}
const ChildComponent = React.memo(({ data }) => {
console.log('ChildComponent rendered');
return Child;
});
ಇದನ್ನು ತಡೆಯಲು, ಆಬ್ಜೆಕ್ಟ್ ಅಥವಾ ಅರೇಯನ್ನು ಪ್ರಾಪ್ಸ್ ಅಥವಾ ಸ್ಟೇಟ್ನಿಂದ ಪಡೆದಿದ್ದರೆ ಮತ್ತು ಅದು ಹೆಚ್ಚಾಗಿ ಬದಲಾಗದಿದ್ದರೆ, ಅಥವಾ ಅದು ಇನ್ನೊಂದು ಹುಕ್ಗೆ ಡಿಪೆಂಡೆನ್ಸಿಯಾಗಿದ್ದರೆ, ಅದನ್ನು ಮೆಮೊ ಮಾಡಿ.
ಆಬ್ಜೆಕ್ಟ್/ಅರೇಗೆ useMemo
ಬಳಸುವ ಉದಾಹರಣೆ:
function ParentComponent() {
const [count, setCount] = React.useState(0);
const baseStyles = { padding: 10 };
// ಆಬ್ಜೆಕ್ಟ್ನ ಡಿಪೆಂಡೆನ್ಸಿಗಳು (baseStyles ನಂತಹ) ಹೆಚ್ಚಾಗಿ ಬದಲಾಗದಿದ್ದರೆ ಅದನ್ನು ಮೆಮೊ ಮಾಡಿ.
// baseStyles ಪ್ರಾಪ್ಸ್ನಿಂದ ಬಂದಿದ್ದರೆ, ಅದನ್ನು ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯಲ್ಲಿ ಸೇರಿಸಲಾಗುತ್ತಿತ್ತು.
const styleOptions = React.useMemo(() => ({
...baseStyles, // baseStyles ಸ್ಥಿರವಾಗಿದೆ ಅಥವಾ ಸ್ವತಃ ಮೆಮೊ ಮಾಡಲಾಗಿದೆ ಎಂದು ಭಾವಿಸೋಣ
backgroundColor: 'blue'
}), [baseStyles]); // baseStyles ಲಿಟರಲ್ ಅಲ್ಲದಿದ್ದರೆ ಅಥವಾ ಬದಲಾಗಬಹುದಾದರೆ ಅದನ್ನು ಸೇರಿಸಿ
return (
);
}
const ChildComponent = React.memo(({ data }) => {
console.log('ChildComponent rendered');
return Child;
});
ಈ ಸರಿಪಡಿಸಿದ ಉದಾಹರಣೆಯಲ್ಲಿ, styleOptions
ಅನ್ನು ಮೆಮೊ ಮಾಡಲಾಗಿದೆ. baseStyles
(ಅಥವಾ `baseStyles` ಯಾವುದರ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆಯೋ ಅದು) ಬದಲಾಗದಿದ್ದರೆ, styleOptions
ಅದೇ ಇನ್ಸ್ಟೆನ್ಸ್ ಆಗಿ ಉಳಿಯುತ್ತದೆ, ಇದು ChildComponent
ನ ಅನಗತ್ಯ ರೀ-ರೆಂಡರ್ಗಳನ್ನು ತಡೆಯುತ್ತದೆ.
೩. ಪ್ರತಿ ಮೌಲ್ಯದ ಮೇಲೆ `useMemo` ಅನ್ನು ತಪ್ಪಿಸಿ
ಮೆಮೊೈಸೇಶನ್ ಉಚಿತವಲ್ಲ. ಇದು ಕ್ಯಾಶ್ ಮಾಡಿದ ಮೌಲ್ಯವನ್ನು ಸಂಗ್ರಹಿಸಲು ಮೆಮೊರಿ ಓವರ್ಹೆಡ್ ಮತ್ತು ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಣ್ಣ ಲೆಕ್ಕಾಚಾರದ ವೆಚ್ಚವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. useMemo
ಅನ್ನು ವಿವೇಚನೆಯಿಂದ ಬಳಸಿ, ಲೆಕ್ಕಾಚಾರವು ಸ್ಪಷ್ಟವಾಗಿ ದುಬಾರಿಯಾಗಿದ್ದಾಗ ಅಥವಾ ಆಪ್ಟಿಮೈಸೇಶನ್ ಉದ್ದೇಶಗಳಿಗಾಗಿ (ಉದಾಹರಣೆಗೆ, React.memo
, useEffect
, ಅಥವಾ ಇತರ ಹುಕ್ಗಳೊಂದಿಗೆ) ರೆಫರೆನ್ಶಿಯಲ್ ಈಕ್ವಾಲಿಟಿಯನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳಬೇಕಾದಾಗ ಮಾತ್ರ ಬಳಸಿ.
useMemo
ಅನ್ನು ಯಾವಾಗ ಬಳಸಬಾರದು:
- ತುಂಬಾ ವೇಗವಾಗಿ ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಸರಳ ಲೆಕ್ಕಾಚಾರಗಳು.
- ಈಗಾಗಲೇ ಸ್ಥಿರವಾಗಿರುವ ಮೌಲ್ಯಗಳು (ಉದಾಹರಣೆಗೆ, ಹೆಚ್ಚಾಗಿ ಬದಲಾಗದ ಪ್ರಿಮಿಟಿವ್ ಪ್ರಾಪ್ಸ್).
ಅನಗತ್ಯ useMemo
ನ ಉದಾಹರಣೆ:
function SimpleComponent({ name }) {
// ಈ ಲೆಕ್ಕಾಚಾರವು ಅತ್ಯಲ್ಪ ಮತ್ತು ಇದಕ್ಕೆ ಮೆಮೊೈಸೇಶನ್ ಅಗತ್ಯವಿಲ್ಲ.
// useMemo ನ ಓವರ್ಹೆಡ್ ಪ್ರಯೋಜನಕ್ಕಿಂತ ಹೆಚ್ಚಾಗಿರಬಹುದು.
const greeting = `Hello, ${name}`;
return {greeting}
;
}
೪. ಡಿರೈವ್ಡ್ ಡೇಟಾವನ್ನು ಮೆಮೊ ಮಾಡಿ
ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ರಾಪ್ಸ್ ಅಥವಾ ಸ್ಟೇಟ್ನಿಂದ ಹೊಸ ಡೇಟಾವನ್ನು ಪಡೆಯುವುದು ಒಂದು ಸಾಮಾನ್ಯ ಮಾದರಿಯಾಗಿದೆ. ಈ ಡಿರೈವೇಶನ್ ಲೆಕ್ಕಾಚಾರದಲ್ಲಿ ತೀವ್ರವಾಗಿದ್ದರೆ, ಅದು useMemo
ಗೆ ಸೂಕ್ತ ಅಭ್ಯರ್ಥಿಯಾಗಿದೆ.
ಉದಾಹರಣೆ: ದೊಡ್ಡ ಪಟ್ಟಿಯನ್ನು ಫಿಲ್ಟರ್ ಮತ್ತು ಸಾರ್ಟ್ ಮಾಡುವುದು
function ProductList({ products }) {
const [filterText, setFilterText] = React.useState('');
const [sortOrder, setSortOrder] = React.useState('asc');
const filteredAndSortedProducts = useMemo(() => {
console.log('ಉತ್ಪನ್ನಗಳನ್ನು ಫಿಲ್ಟರ್ ಮತ್ತು ಸಾರ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ...');
let result = products.filter(product =>
product.name.toLowerCase().includes(filterText.toLowerCase())
);
result.sort((a, b) => {
if (sortOrder === 'asc') {
return a.price - b.price;
} else {
return b.price - a.price;
}
});
return result;
}, [products, filterText, sortOrder]); // ಎಲ್ಲಾ ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ
return (
setFilterText(e.target.value)}
/>
{filteredAndSortedProducts.map(product => (
-
{product.name} - ${product.price}
))}
);
}
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ಸಂಭಾವ್ಯವಾಗಿ ದೊಡ್ಡ ಉತ್ಪನ್ನಗಳ ಪಟ್ಟಿಯನ್ನು ಫಿಲ್ಟರ್ ಮತ್ತು ಸಾರ್ಟ್ ಮಾಡುವುದು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು. ಫಲಿತಾಂಶವನ್ನು ಮೆಮೊ ಮಾಡುವುದರಿಂದ, ಈ ಕಾರ್ಯಾಚರಣೆಯು products
ಪಟ್ಟಿ, filterText
, ಅಥವಾ sortOrder
ವಾಸ್ತವವಾಗಿ ಬದಲಾದಾಗ ಮಾತ್ರ ರನ್ ಆಗುತ್ತದೆ ಎಂದು ನಾವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುತ್ತೇವೆ, ProductList
ನ ಪ್ರತಿಯೊಂದು ರೀ-ರೆಂಡರ್ನಲ್ಲಿ ಅಲ್ಲ.
೫. ಫಂಕ್ಷನ್ಗಳನ್ನು ಡಿಪೆಂಡೆನ್ಸಿಗಳಾಗಿ ನಿರ್ವಹಿಸುವುದು
ನಿಮ್ಮ ಮೆಮೊ ಮಾಡಿದ ಫಂಕ್ಷನ್ ಕಾಂಪೊನೆಂಟ್ನೊಳಗೆ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಮತ್ತೊಂದು ಫಂಕ್ಷನ್ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದ್ದರೆ, ಆ ಫಂಕ್ಷನ್ ಅನ್ನು ಕೂಡ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯಲ್ಲಿ ಸೇರಿಸಬೇಕು. ಆದಾಗ್ಯೂ, ಕಾಂಪೊನೆಂಟ್ನೊಳಗೆ ಇನ್ಲೈನ್ ಆಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಫಂಕ್ಷನ್, ಲಿಟರಲ್ಗಳೊಂದಿಗೆ ರಚಿಸಲಾದ ಆಬ್ಜೆಕ್ಟ್ಗಳು ಮತ್ತು ಅರೇಗಳಂತೆಯೇ ಪ್ರತಿ ರೆಂಡರ್ನಲ್ಲಿ ಹೊಸ ರೆಫರೆನ್ಸ್ ಅನ್ನು ಪಡೆಯುತ್ತದೆ.
ಇನ್ಲೈನ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಫಂಕ್ಷನ್ಗಳೊಂದಿಗಿನ ಸಮಸ್ಯೆಗಳನ್ನು ತಪ್ಪಿಸಲು, ನೀವು ಅವುಗಳನ್ನು useCallback
ಬಳಸಿ ಮೆಮೊ ಮಾಡಬೇಕು.
useCallback
ಮತ್ತು useMemo
ನೊಂದಿಗೆ ಉದಾಹರಣೆ:
function UserProfile({ userId }) {
const [user, setUser] = React.useState(null);
// useCallback ಬಳಸಿ ಡೇಟಾ ಫೆಚಿಂಗ್ ಫಂಕ್ಷನ್ ಅನ್ನು ಮೆಮೊ ಮಾಡಿ
const fetchUserData = React.useCallback(async () => {
const response = await fetch(`/api/users/${userId}`);
const data = await response.json();
setUser(data);
}, [userId]); // fetchUserData userId ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ
// ಬಳಕೆದಾರರ ಡೇಟಾದ ಪ್ರೊಸೆಸಿಂಗ್ ಅನ್ನು ಮೆಮೊ ಮಾಡಿ
const userDisplayName = React.useMemo(() => {
if (!user) return 'ಲೋಡ್ ಆಗುತ್ತಿದೆ...';
// ಸಂಭಾವ್ಯವಾಗಿ ದುಬಾರಿಯಾದ ಬಳಕೆದಾರರ ಡೇಟಾ ಪ್ರೊಸೆಸಿಂಗ್
return `${user.firstName} ${user.lastName} (${user.username})`;
}, [user]); // userDisplayName user ಆಬ್ಜೆಕ್ಟ್ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ
// ಕಾಂಪೊನೆಂಟ್ ಮೌಂಟ್ ಆದಾಗ ಅಥವಾ userId ಬದಲಾದಾಗ fetchUserData ಅನ್ನು ಕಾಲ್ ಮಾಡಿ
React.useEffect(() => {
fetchUserData();
}, [fetchUserData]); // fetchUserData useEffect ಗೆ ಒಂದು ಡಿಪೆಂಡೆನ್ಸಿ ಆಗಿದೆ
return (
{userDisplayName}
{/* ... ಇತರ ಬಳಕೆದಾರರ ವಿವರಗಳು */}
);
}
ಈ ಸನ್ನಿವೇಶದಲ್ಲಿ:
fetchUserData
ಅನ್ನುuseCallback
ನೊಂದಿಗೆ ಮೆಮೊ ಮಾಡಲಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಒಂದು ಈವೆಂಟ್ ಹ್ಯಾಂಡ್ಲರ್/ಫಂಕ್ಷನ್ ಆಗಿದ್ದು, ಇದನ್ನು ಚೈಲ್ಡ್ ಕಾಂಪೊನೆಂಟ್ಗಳಿಗೆ ರವಾನಿಸಬಹುದು ಅಥವಾ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಗಳಲ್ಲಿ (useEffect
ನಲ್ಲಿರುವಂತೆ) ಬಳಸಬಹುದು. ಇದುuserId
ಬದಲಾದಾಗ ಮಾತ್ರ ಹೊಸ ರೆಫರೆನ್ಸ್ ಪಡೆಯುತ್ತದೆ.userDisplayName
ಅನ್ನುuseMemo
ನೊಂದಿಗೆ ಮೆಮೊ ಮಾಡಲಾಗಿದೆ, ಏಕೆಂದರೆ ಅದರ ಲೆಕ್ಕಾಚಾರವುuser
ಆಬ್ಜೆಕ್ಟ್ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ.useEffect
fetchUserData
ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ.fetchUserData
ಅನ್ನುuseCallback
ನಿಂದ ಮೆಮೊ ಮಾಡಲಾಗಿರುವುದರಿಂದ,fetchUserData
ನ ರೆಫರೆನ್ಸ್ ಬದಲಾದರೆ ಮಾತ್ರuseEffect
ಮರು-ರನ್ ಆಗುತ್ತದೆ (ಇದುuserId
ಬದಲಾದಾಗ ಮಾತ್ರ ಸಂಭವಿಸುತ್ತದೆ), ಇದು ಅನಗತ್ಯ ಡೇಟಾ ಫೆಚಿಂಗ್ ಅನ್ನು ತಡೆಯುತ್ತದೆ.
೬. ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯನ್ನು ಬಿಟ್ಟುಬಿಡುವುದು: useMemo(() => compute(), [])
ನೀವು ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯಾಗಿ ಖಾಲಿ ಅರೇ []
ಅನ್ನು ಒದಗಿಸಿದರೆ, ಫಂಕ್ಷನ್ ಕಾಂಪೊನೆಂಟ್ ಮೌಂಟ್ ಆದಾಗ ಒಮ್ಮೆ ಮಾತ್ರ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತದೆ, ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ಅನಿರ್ದಿಷ್ಟವಾಗಿ ಮೆಮೊ ಮಾಡಲಾಗುತ್ತದೆ.
const initialConfig = useMemo(() => {
// ಈ ಲೆಕ್ಕಾಚಾರವು ಮೌಂಟ್ ಆದಾಗ ಒಮ್ಮೆ ಮಾತ್ರ ನಡೆಯುತ್ತದೆ
return loadInitialConfiguration();
}, []); // ಖಾಲಿ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇ
ಕಾಂಪೊನೆಂಟ್ನ ಜೀವನಚಕ್ರದುದ್ದಕ್ಕೂ ನಿಜವಾಗಿಯೂ ಸ್ಥಿರವಾಗಿರುವ ಮತ್ತು ಎಂದಿಗೂ ಮರುಲೆಕ್ಕಾಚಾರ ಮಾಡಬೇಕಾಗಿಲ್ಲದ ಮೌಲ್ಯಗಳಿಗೆ ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ.
೭. ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬಿಟ್ಟುಬಿಡುವುದು: useMemo(() => compute())
ನೀವು ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬಿಟ್ಟುಬಿಟ್ಟರೆ, ಫಂಕ್ಷನ್ ಪ್ರತಿ ರೆಂಡರ್ನಲ್ಲಿಯೂ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತದೆ. ಇದು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮೆಮೊೈಸೇಶನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ನಿಮಗೆ ನಿರ್ದಿಷ್ಟ, ಅಪರೂಪದ ಬಳಕೆಯ ಸಂದರ್ಭವಿಲ್ಲದಿದ್ದರೆ ಸಾಮಾನ್ಯವಾಗಿ ಇದನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಇದು useMemo
ಇಲ್ಲದೆ ನೇರವಾಗಿ ಫಂಕ್ಷನ್ ಅನ್ನು ಕರೆಯುವುದಕ್ಕೆ ಸಮನಾಗಿದೆ.
ಸಾಮಾನ್ಯ ತಪ್ಪುಗಳು ಮತ್ತು ಅವುಗಳನ್ನು ತಪ್ಪಿಸುವುದು ಹೇಗೆ
ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಮನಸ್ಸಿನಲ್ಲಿಟ್ಟುಕೊಂಡರೂ, ಡೆವಲಪರ್ಗಳು ಸಾಮಾನ್ಯ ತಪ್ಪುಗಳಿಗೆ ಬೀಳಬಹುದು:
ತಪ್ಪು ೧: ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ತಪ್ಪಿಸುವುದು
ಸಮಸ್ಯೆ: ಮೆಮೊ ಮಾಡಿದ ಫಂಕ್ಷನ್ ಒಳಗೆ ಬಳಸಿದ ವೇರಿಯಬಲ್ ಅನ್ನು ಸೇರಿಸಲು ಮರೆಯುವುದು. ಇದು ಹಳೆಯ ಡೇಟಾ ಮತ್ತು ಸೂಕ್ಷ್ಮ ಬಗ್ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಪರಿಹಾರ: ಯಾವಾಗಲೂ eslint-plugin-react-hooks
ಪ್ಯಾಕೇಜ್ ಅನ್ನು exhaustive-deps
ನಿಯಮದೊಂದಿಗೆ ಸಕ್ರಿಯಗೊಳಿಸಿ ಬಳಸಿ. ಈ ನಿಯಮವು ಹೆಚ್ಚಿನ ಕಾಣೆಯಾದ ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಪತ್ತೆ ಮಾಡುತ್ತದೆ.
ತಪ್ಪು ೨: ಅತಿಯಾದ-ಮೆಮೊೈಸೇಶನ್
ಸಮಸ್ಯೆ: useMemo
ಅನ್ನು ಸರಳ ಲೆಕ್ಕಾಚಾರಗಳಿಗೆ ಅಥವಾ ಓವರ್ಹೆಡ್ ಅನ್ನು ಸಮರ್ಥಿಸದ ಮೌಲ್ಯಗಳಿಗೆ ಅನ್ವಯಿಸುವುದು. ಇದು ಕೆಲವೊಮ್ಮೆ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಇನ್ನಷ್ಟು ಹದಗೆಡಿಸಬಹುದು.
ಪರಿಹಾರ: ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರೊಫೈಲ್ ಮಾಡಿ. ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಗಳನ್ನು ಗುರುತಿಸಲು ರಿಯಾಕ್ಟ್ ಡೆವ್ಟೂಲ್ಸ್ ಬಳಸಿ. ಪ್ರಯೋಜನವು ವೆಚ್ಚವನ್ನು ಮೀರಿದಾಗ ಮಾತ್ರ ಮೆಮೊ ಮಾಡಿ. ಮೆಮೊೈಸೇಶನ್ ಇಲ್ಲದೆ ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಸಮಸ್ಯೆಯಾದರೆ ಅದನ್ನು ಸೇರಿಸಿ.
ತಪ್ಪು ೩: ಆಬ್ಜೆಕ್ಟ್ಗಳು/ಅರೇಗಳನ್ನು ತಪ್ಪಾಗಿ ಮೆಮೊ ಮಾಡುವುದು
ಸಮಸ್ಯೆ: ಮೆಮೊ ಮಾಡಿದ ಫಂಕ್ಷನ್ ಒಳಗೆ ಹೊಸ ಆಬ್ಜೆಕ್ಟ್/ಅರೇ ಲಿಟರಲ್ಗಳನ್ನು ರಚಿಸುವುದು ಅಥವಾ ಅವುಗಳನ್ನು ಮೊದಲು ಮೆಮೊ ಮಾಡದೆ ಡಿಪೆಂಡೆನ್ಸಿಗಳಾಗಿ ಪಾಸ್ ಮಾಡುವುದು.
ಪರಿಹಾರ: ರೆಫರೆನ್ಶಿಯಲ್ ಈಕ್ವಾಲಿಟಿಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ. ಆಬ್ಜೆಕ್ಟ್ಗಳು ಮತ್ತು ಅರೇಗಳನ್ನು ರಚಿಸಲು ದುಬಾರಿಯಾಗಿದ್ದರೆ ಅಥವಾ ಅವುಗಳ ಸ್ಥಿರತೆಯು ಚೈಲ್ಡ್ ಕಾಂಪೊನೆಂಟ್ ಆಪ್ಟಿಮೈಸೇಶನ್ಗಳಿಗೆ ನಿರ್ಣಾಯಕವಾಗಿದ್ದರೆ ಅವುಗಳನ್ನು useMemo
ಬಳಸಿ ಮೆಮೊ ಮಾಡಿ.
ತಪ್ಪು ೪: useCallback
ಇಲ್ಲದೆ ಫಂಕ್ಷನ್ಗಳನ್ನು ಮೆಮೊ ಮಾಡುವುದು
ಸಮಸ್ಯೆ: ಫಂಕ್ಷನ್ ಅನ್ನು ಮೆಮೊ ಮಾಡಲು useMemo
ಅನ್ನು ಬಳಸುವುದು. ತಾಂತ್ರಿಕವಾಗಿ ಸಾಧ್ಯವಾದರೂ (useMemo(() => () => {...}, [...])
), ಫಂಕ್ಷನ್ಗಳನ್ನು ಮೆಮೊ ಮಾಡಲು useCallback
ಹೆಚ್ಚು ವಾಡಿಕೆಯ ಮತ್ತು ಶಬ್ದಾರ್ಥವಾಗಿ ಸರಿಯಾದ ಹುಕ್ ಆಗಿದೆ.
ಪರಿಹಾರ: ನಿಮಗೆ ಫಂಕ್ಷನ್ ಅನ್ನೇ ಮೆಮೊ ಮಾಡಬೇಕಾದಾಗ useCallback(fn, deps)
ಬಳಸಿ. ಫಂಕ್ಷನ್ ಅನ್ನು ಕರೆದ *ಫಲಿತಾಂಶವನ್ನು* ಮೆಮೊ ಮಾಡಬೇಕಾದಾಗ useMemo(() => fn(), deps)
ಬಳಸಿ.
useMemo
ಅನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕು: ಒಂದು ನಿರ್ಧಾರ ಮರ
useMemo
ಅನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕು ಎಂದು ನಿರ್ಧರಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡಲು, ಇದನ್ನು ಪರಿಗಣಿಸಿ:
- ಲೆಕ್ಕಾಚಾರವು ಕಂಪ್ಯೂಟೇಶನಲ್ ಆಗಿ ದುಬಾರಿಯಾಗಿದೆಯೇ?
- ಹೌದು: ಮುಂದಿನ ಪ್ರಶ್ನೆಗೆ ಮುಂದುವರಿಯಿರಿ.
- ಇಲ್ಲ:
useMemo
ಅನ್ನು ತಪ್ಪಿಸಿ.
- ಈ ಲೆಕ್ಕಾಚಾರದ ಫಲಿತಾಂಶವು ಚೈಲ್ಡ್ ಕಾಂಪೊನೆಂಟ್ಗಳ ಅನಗತ್ಯ ರೀ-ರೆಂಡರ್ಗಳನ್ನು ತಡೆಯಲು ರೆಂಡರ್ಗಳಾದ್ಯಂತ ಸ್ಥಿರವಾಗಿರಬೇಕೇ (ಉದಾಹರಣೆಗೆ,
React.memo
ನೊಂದಿಗೆ ಬಳಸಿದಾಗ)?- ಹೌದು: ಮುಂದಿನ ಪ್ರಶ್ನೆಗೆ ಮುಂದುವರಿಯಿರಿ.
- ಇಲ್ಲ:
useMemo
ಅನ್ನು ತಪ್ಪಿಸಿ (ಲೆಕ್ಕಾಚಾರವು ತುಂಬಾ ದುಬಾರಿಯಾಗಿದ್ದರೆ ಮತ್ತು ಚೈಲ್ಡ್ ಕಾಂಪೊನೆಂಟ್ಗಳು ಅದರ ಸ್ಥಿರತೆಯನ್ನು ನೇರವಾಗಿ ಅವಲಂಬಿಸದಿದ್ದರೂ ಸಹ, ಪ್ರತಿ ರೆಂಡರ್ನಲ್ಲಿ ಅದನ್ನು ತಪ್ಪಿಸಲು ನೀವು ಬಯಸಿದರೆ ಹೊರತುಪಡಿಸಿ).
- ಲೆಕ್ಕಾಚಾರವು ಪ್ರಾಪ್ಸ್ ಅಥವಾ ಸ್ಟೇಟ್ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆಯೇ?
- ಹೌದು: ಎಲ್ಲಾ ಅವಲಂಬಿತ ಪ್ರಾಪ್ಸ್ ಮತ್ತು ಸ್ಟೇಟ್ ವೇರಿಯಬಲ್ಗಳನ್ನು ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯಲ್ಲಿ ಸೇರಿಸಿ. ಲೆಕ್ಕಾಚಾರದಲ್ಲಿ ಅಥವಾ ಡಿಪೆಂಡೆನ್ಸಿಗಳಲ್ಲಿ ಬಳಸಲಾದ ಆಬ್ಜೆಕ್ಟ್ಗಳು/ಅರೇಗಳನ್ನು ಇನ್ಲೈನ್ನಲ್ಲಿ ರಚಿಸಿದ್ದರೆ ಅವುಗಳನ್ನು ಕೂಡ ಮೆಮೊ ಮಾಡಲಾಗಿದೆಯೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ಇಲ್ಲ: ಲೆಕ್ಕಾಚಾರವು ನಿಜವಾಗಿಯೂ ಸ್ಥಿರ ಮತ್ತು ದುಬಾರಿಯಾಗಿದ್ದರೆ ಖಾಲಿ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇ
[]
ಗೆ ಸೂಕ್ತವಾಗಿರಬಹುದು, ಅಥವಾ ಅದು ನಿಜವಾಗಿಯೂ ಜಾಗತಿಕವಾಗಿದ್ದರೆ ಅದನ್ನು ಕಾಂಪೊನೆಂಟ್ನ ಹೊರಗೆ ಸರಿಸಬಹುದು.
ರಿಯಾಕ್ಟ್ ಕಾರ್ಯಕ್ಷಮತೆಗಾಗಿ ಜಾಗತಿಕ ಪರಿಗಣನೆಗಳು
ಜಾಗತಿಕ ಪ್ರೇಕ್ಷಕರಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ, ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಗಣನೆಗಳು ಇನ್ನಷ್ಟು ನಿರ್ಣಾಯಕವಾಗುತ್ತವೆ. ಪ್ರಪಂಚದಾದ್ಯಂತದ ಬಳಕೆದಾರರು ನೆಟ್ವರ್ಕ್ ಪರಿಸ್ಥಿತಿಗಳು, ಸಾಧನ ಸಾಮರ್ಥ್ಯಗಳು, ಮತ್ತು ಭೌಗೋಳಿಕ ಸ್ಥಳಗಳ ವ್ಯಾಪಕ ಶ್ರೇಣಿಯಿಂದ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಪ್ರವೇಶಿಸುತ್ತಾರೆ.
- ವಿಭಿನ್ನ ನೆಟ್ವರ್ಕ್ ವೇಗಗಳು: ನಿಧಾನಗತಿಯ ಅಥವಾ ಅಸ್ಥಿರ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕಗಳು ಆಪ್ಟಿಮೈಸ್ ಮಾಡದ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮತ್ತು ಆಗಾಗ್ಗೆ ರೀ-ರೆಂಡರ್ಗಳ ಪರಿಣಾಮವನ್ನು ಇನ್ನಷ್ಟು ಹದಗೆಡಿಸಬಹುದು. ಮೆಮೊೈಸೇಶನ್ ಕ್ಲೈಂಟ್-ಸೈಡ್ನಲ್ಲಿ ಕಡಿಮೆ ಕೆಲಸ ಮಾಡುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಸೀಮಿತ ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಹೊಂದಿರುವ ಬಳಕೆದಾರರ ಮೇಲಿನ ಒತ್ತಡವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ವೈವಿಧ್ಯಮಯ ಸಾಧನ ಸಾಮರ್ಥ್ಯಗಳು: ಎಲ್ಲಾ ಬಳಕೆದಾರರು ಇತ್ತೀಚಿನ ಉನ್ನತ-ಕಾರ್ಯಕ್ಷಮತೆಯ ಹಾರ್ಡ್ವೇರ್ ಹೊಂದಿರುವುದಿಲ್ಲ. ಕಡಿಮೆ ಶಕ್ತಿಯುತ ಸಾಧನಗಳಲ್ಲಿ (ಉದಾಹರಣೆಗೆ, ಹಳೆಯ ಸ್ಮಾರ್ಟ್ಫೋನ್ಗಳು, ಬಜೆಟ್ ಲ್ಯಾಪ್ಟಾಪ್ಗಳು), ಅನಗತ್ಯ ಲೆಕ್ಕಾಚಾರಗಳ ಓವರ್ಹೆಡ್ ಗಮನಾರ್ಹವಾಗಿ ನಿಧಾನವಾದ ಅನುಭವಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು.
- ಕ್ಲೈಂಟ್-ಸೈಡ್ ರೆಂಡರಿಂಗ್ (CSR) ವರ್ಸಸ್ ಸರ್ವರ್-ಸೈಡ್ ರೆಂಡರಿಂಗ್ (SSR) / ಸ್ಟ್ಯಾಟಿಕ್ ಸೈಟ್ ಜನರೇಷನ್ (SSG):
useMemo
ಪ್ರಾಥಮಿಕವಾಗಿ ಕ್ಲೈಂಟ್-ಸೈಡ್ ರೆಂಡರಿಂಗ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುತ್ತದೆಯಾದರೂ, SSR/SSG ಯೊಂದಿಗೆ ಅದರ ಪಾತ್ರವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ. ಉದಾಹರಣೆಗೆ, ಸರ್ವರ್-ಸೈಡ್ನಲ್ಲಿ ಪಡೆದ ಡೇಟಾವನ್ನು ಪ್ರಾಪ್ಸ್ ಆಗಿ ರವಾನಿಸಬಹುದು, ಮತ್ತು ಕ್ಲೈಂಟ್ನಲ್ಲಿ ಡಿರೈವ್ಡ್ ಡೇಟಾವನ್ನು ಮೆಮೊ ಮಾಡುವುದು ನಿರ್ಣಾಯಕವಾಗಿ ಉಳಿಯುತ್ತದೆ. - ಅಂತಾರಾಷ್ಟ್ರೀಕರಣ (i18n) ಮತ್ತು ಸ್ಥಳೀಕರಣ (l10n):
useMemo
ಸಿಂಟ್ಯಾಕ್ಸ್ಗೆ ನೇರವಾಗಿ ಸಂಬಂಧಿಸದಿದ್ದರೂ, ಸಂಕೀರ್ಣ i18n ತರ್ಕ (ಉದಾಹರಣೆಗೆ, ದಿನಾಂಕಗಳು, ಸಂಖ್ಯೆಗಳು, ಅಥವಾ ಕರೆನ್ಸಿಗಳನ್ನು ಲೊಕೇಲ್ ಆಧರಿಸಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುವುದು) ಕಂಪ್ಯೂಟೇಶನಲ್ ಆಗಿ ತೀವ್ರವಾಗಿರುತ್ತದೆ. ಈ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮೆಮೊ ಮಾಡುವುದರಿಂದ ಅವು ನಿಮ್ಮ UI ಅಪ್ಡೇಟ್ಗಳನ್ನು ನಿಧಾನಗೊಳಿಸುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ದೊಡ್ಡ ಸ್ಥಳೀಯ ಬೆಲೆಗಳ ಪಟ್ಟಿಯನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುವುದುuseMemo
ನಿಂದ ಗಮನಾರ್ಹವಾಗಿ ಪ್ರಯೋಜನ ಪಡೆಯಬಹುದು.
ಮೆಮೊೈಸೇಶನ್ನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೂಲಕ, ನೀವು ಪ್ರತಿಯೊಬ್ಬರಿಗೂ ಅವರ ಸ್ಥಳ ಅಥವಾ ಅವರು ಬಳಸುವ ಸಾಧನವನ್ನು ಲೆಕ್ಕಿಸದೆ, ಹೆಚ್ಚು ಪ್ರವೇಶಿಸಬಹುದಾದ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಕೊಡುಗೆ ನೀಡುತ್ತೀರಿ.
ತೀರ್ಮಾನ
useMemo
ಲೆಕ್ಕಾಚಾರದ ಫಲಿತಾಂಶಗಳನ್ನು ಕ್ಯಾಶ್ ಮಾಡುವ ಮೂಲಕ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ರಿಯಾಕ್ಟ್ ಡೆವಲಪರ್ನ ಶಸ್ತ್ರಾಗಾರದಲ್ಲಿರುವ ಒಂದು ಪ್ರಬಲ ಸಾಧನವಾಗಿದೆ. ಅದರ ಸಂಪೂರ್ಣ ಸಾಮರ್ಥ್ಯವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡುವ ಕೀಲಿಯು ಅದರ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯ ಸೂಕ್ಷ್ಮ ತಿಳುವಳಿಕೆ ಮತ್ತು ಸರಿಯಾದ ಅನುಷ್ಠಾನದಲ್ಲಿದೆ. ಉತ್ತಮ ಅಭ್ಯಾಸಗಳಿಗೆ ಬದ್ಧರಾಗಿರುವುದರ ಮೂಲಕ – ಅಗತ್ಯವಿರುವ ಎಲ್ಲಾ ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಸೇರಿಸುವುದು, ರೆಫರೆನ್ಶಿಯಲ್ ಈಕ್ವಾಲಿಟಿಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು, ಅತಿಯಾದ-ಮೆಮೊೈಸೇಶನ್ ಅನ್ನು ತಪ್ಪಿಸುವುದು, ಮತ್ತು ಫಂಕ್ಷನ್ಗಳಿಗಾಗಿ useCallback
ಅನ್ನು ಬಳಸುವುದು – ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳು ದಕ್ಷ ಮತ್ತು ದೃಢವಾಗಿರುವುದನ್ನು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.
ನೆನಪಿಡಿ, ಕಾರ್ಯಕ್ಷಮತೆ ಆಪ್ಟಿಮೈಸೇಶನ್ ಒಂದು ನಿರಂತರ ಪ್ರಕ್ರಿಯೆ. ಯಾವಾಗಲೂ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರೊಫೈಲ್ ಮಾಡಿ, ನಿಜವಾದ ಅಡಚಣೆಗಳನ್ನು ಗುರುತಿಸಿ, ಮತ್ತು useMemo
ನಂತಹ ಆಪ್ಟಿಮೈಸೇಶನ್ಗಳನ್ನು ಆಯಕಟ್ಟಿನ ರೀತಿಯಲ್ಲಿ ಅನ್ವಯಿಸಿ. ಎಚ್ಚರಿಕೆಯ ಅನ್ವಯದೊಂದಿಗೆ, useMemo
ನಿಮಗೆ ವೇಗವಾದ, ಹೆಚ್ಚು ಸ್ಪಂದಿಸುವ, ಮತ್ತು ವಿಸ್ತರಿಸಬಲ್ಲ ರಿಯಾಕ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಅದು ಪ್ರಪಂಚದಾದ್ಯಂತದ ಬಳಕೆದಾರರನ್ನು ಸಂತೋಷಪಡಿಸುತ್ತದೆ.
ಪ್ರಮುಖ ಅಂಶಗಳು:
- ದುಬಾರಿ ಲೆಕ್ಕಾಚಾರಗಳು ಮತ್ತು ರೆಫರೆನ್ಶಿಯಲ್ ಸ್ಥಿರತೆಗಾಗಿ
useMemo
ಬಳಸಿ. - ಮೆಮೊ ಮಾಡಿದ ಫಂಕ್ಷನ್ ಒಳಗೆ ಓದಿದ ಎಲ್ಲಾ ಮೌಲ್ಯಗಳನ್ನು ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಯಲ್ಲಿ ಸೇರಿಸಿ.
- ESLint
exhaustive-deps
ನಿಯಮವನ್ನು ಬಳಸಿಕೊಳ್ಳಿ. - ಆಬ್ಜೆಕ್ಟ್ಗಳು ಮತ್ತು ಅರೇಗಳಿಗಾಗಿ ರೆಫರೆನ್ಶಿಯಲ್ ಈಕ್ವಾಲಿಟಿಯ ಬಗ್ಗೆ ಗಮನವಿರಲಿ.
- ಫಂಕ್ಷನ್ಗಳನ್ನು ಮೆಮೊ ಮಾಡಲು
useCallback
ಬಳಸಿ. - ಅನಗತ್ಯ ಮೆಮೊೈಸೇಶನ್ ಅನ್ನು ತಪ್ಪಿಸಿ; ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಪ್ರೊಫೈಲ್ ಮಾಡಿ.
useMemo
ಮತ್ತು ಅದರ ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವುದು ಜಾಗತಿಕ ಬಳಕೆದಾರರ ನೆಲೆಗೆ ಸೂಕ್ತವಾದ ಉತ್ತಮ-ಗುಣಮಟ್ಟದ, ಕಾರ್ಯಕ್ಷಮತೆಯ ರಿಯಾಕ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸುವತ್ತ ಒಂದು ಮಹತ್ವದ ಹೆಜ್ಜೆಯಾಗಿದೆ.