ரியாக்ட்டின் useMemo ஹூக்கின் ஆற்றலைத் திறக்கவும். இந்த வழிகாட்டி, உலகளாவிய ரியாக்ட் டெவலப்பர்களுக்கான மெமோயிசேஷன், சார்பு வரிசைகள் மற்றும் செயல்திறன் மேம்படுத்தல் ஆகியவற்றை ஆராய்கிறது.
ரியாக்ட் useMemo சார்புகள்: மெமோயிசேஷன் சிறந்த நடைமுறைகளில் தேர்ச்சி பெறுதல்
இணைய மேம்பாட்டின் மாறும் உலகில், குறிப்பாக ரியாக்ட் சுற்றுச்சூழல் அமைப்பில், காம்பொனென்ட் செயல்திறனை மேம்படுத்துவது மிக முக்கியமானது. பயன்பாடுகள் சிக்கலானதாக வளரும்போது, தேவையற்ற ரீ-ரெண்டர்கள் மந்தமான பயனர் இடைமுகங்களுக்கும் மற்றும் ஒரு சிறந்த பயனர் அனுபவத்திற்கும் குறைவாக வழிவகுக்கும். இதை எதிர்த்துப் போராடுவதற்கான ரியாக்ட்டின் சக்திவாய்ந்த கருவிகளில் ஒன்று useMemo
ஹூக் ஆகும். இருப்பினும், அதன் பயனுள்ள பயன்பாடு அதன் சார்பு வரிசையைப் பற்றிய முழுமையான புரிதலைப் பொறுத்தது. இந்த விரிவான வழிகாட்டி useMemo
சார்புகளைப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகளை ஆராய்கிறது, உங்கள் ரியாக்ட் பயன்பாடுகள் உலகளாவிய பார்வையாளர்களுக்கு செயல்திறன் மற்றும் அளவிடக்கூடியதாக இருப்பதை உறுதி செய்கிறது.
ரியாக்ட்டில் மெமோயிசேஷனைப் புரிந்துகொள்ளுதல்
useMemo
இன் பிரத்தியேகங்களுக்குள் நுழைவதற்கு முன், மெமோயிசேஷன் என்ற கருத்தைப் புரிந்துகொள்வது அவசியம். மெமோயிசேஷன் என்பது ஒரு மேம்படுத்தல் நுட்பமாகும், இது விலையுயர்ந்த செயல்பாட்டு அழைப்புகளின் முடிவுகளைச் சேமித்து, அதே உள்ளீடுகள் மீண்டும் நிகழும்போது கேச் செய்யப்பட்ட முடிவைத் திருப்பி அனுப்புவதன் மூலம் கணினி நிரல்களை வேகப்படுத்துகிறது. சாராம்சத்தில், இது தேவையற்ற கணக்கீடுகளைத் தவிர்ப்பதாகும்.
ரியாக்ட்டில், மெமோயிசேஷன் முதன்மையாக காம்பொனென்ட்களின் தேவையற்ற ரீ-ரெண்டர்களைத் தடுக்க அல்லது விலையுயர்ந்த கணக்கீடுகளின் முடிவுகளை கேச் செய்யப் பயன்படுகிறது. இது செயல்பாட்டுக் கூறுகளில் மிகவும் முக்கியமானது, இங்கு நிலை மாற்றங்கள், ப்ராப் புதுப்பிப்புகள் அல்லது பெற்றோர் காம்பொனென்ட் ரீ-ரெண்டர்கள் காரணமாக ரீ-ரெண்டர்கள் அடிக்கடி நிகழலாம்.
useMemo
இன் பங்கு
ரியாக்ட்டில் உள்ள useMemo
ஹூக் ஒரு கணக்கீட்டின் முடிவை மெமோயிஸ் செய்ய உங்களை அனுமதிக்கிறது. இது இரண்டு வாதங்களை எடுக்கிறது:
- நீங்கள் மெமோயிஸ் செய்ய விரும்பும் மதிப்பைக் கணக்கிடும் ஒரு செயல்பாடு.
- சார்புகளின் ஒரு வரிசை.
ரியாக்ட், சார்புகளில் ஒன்று மாறியிருந்தால் மட்டுமே கணக்கிடப்பட்ட செயல்பாட்டை மீண்டும் இயக்கும். இல்லையெனில், அது முன்பு கணக்கிடப்பட்ட (கேச் செய்யப்பட்ட) மதிப்பைத் திருப்பி அனுப்பும். இது இதற்கு மிகவும் பயனுள்ளதாக இருக்கும்:
- விலையுயர்ந்த கணக்கீடுகள்: சிக்கலான தரவு கையாளுதல், வடிகட்டுதல், வரிசைப்படுத்துதல் அல்லது கனமான கணக்கீடுகளை உள்ளடக்கிய செயல்பாடுகள்.
- குறிப்பு சமத்துவம்: ஆப்ஜெக்ட் அல்லது வரிசை ப்ராப்களைச் சார்ந்துள்ள குழந்தை காம்பொனென்ட்களின் தேவையற்ற ரீ-ரெண்டர்களைத் தடுத்தல்.
useMemo
இன் தொடரியல்
useMemo
க்கான அடிப்படை தொடரியல் பின்வருமாறு:
const memoizedValue = useMemo(() => {
// Expensive calculation here
return computeExpensiveValue(a, b);
}, [a, b]);
இங்கே, computeExpensiveValue(a, b)
என்பது நாம் மெமோயிஸ் செய்ய விரும்பும் முடிவைக் கொண்ட செயல்பாடு. சார்பு வரிசை [a, b]
ரியாக்ட்டிடம் a
அல்லது b
ரெண்டர்களுக்கு இடையில் மாறினால் மட்டுமே மதிப்பை மீண்டும் கணக்கிடச் சொல்கிறது.
சார்பு வரிசையின் முக்கிய பங்கு
சார்பு வரிசை useMemo
இன் இதயமாகும். மெமோயிஸ் செய்யப்பட்ட மதிப்பை எப்போது மீண்டும் கணக்கிட வேண்டும் என்பதை இது ஆணையிடுகிறது. சரியாக வரையறுக்கப்பட்ட சார்பு வரிசை செயல்திறன் ஆதாயங்களுக்கும் சரியான தன்மைக்கும் அவசியம். தவறாக வரையறுக்கப்பட்ட வரிசை இதற்கு வழிவகுக்கும்:
- பழைய தரவு: ஒரு சார்பு தவிர்க்கப்பட்டால், மெமோயிஸ் செய்யப்பட்ட மதிப்பு தேவைப்படும்போது புதுப்பிக்கப்படாமல் போகலாம், இது பிழைகள் மற்றும் காலாவதியான தகவல்கள் காட்டப்படுவதற்கு வழிவகுக்கும்.
- செயல்திறன் ஆதாயம் இல்லை: சார்புகள் தேவைக்கு அதிகமாக மாறினால், அல்லது கணக்கீடு உண்மையில் விலை உயர்ந்ததாக இல்லாவிட்டால்,
useMemo
ஒரு குறிப்பிடத்தக்க செயல்திறன் நன்மையை வழங்காமல் போகலாம், அல்லது கூடுதல் மேல்சுமையைச் சேர்க்கக்கூடும்.
சார்புகளை வரையறுப்பதற்கான சிறந்த நடைமுறைகள்
சரியான சார்பு வரிசையை உருவாக்குவதற்கு கவனமான பரிசீலனை தேவை. இங்கே சில அடிப்படை சிறந்த நடைமுறைகள் உள்ளன:
1. மெமோயிஸ் செய்யப்பட்ட செயல்பாட்டில் பயன்படுத்தப்படும் அனைத்து மதிப்புகளையும் சேர்க்கவும்
இது பொன் விதி. மெமோயிஸ் செய்யப்பட்ட செயல்பாட்டிற்குள் படிக்கப்படும் எந்தவொரு மாறி, ப்ராப் அல்லது நிலை ஆகியவை சார்பு வரிசையில் சேர்க்கப்பட வேண்டும். ரியாக்ட்டின் லிண்டிங் விதிகள் (குறிப்பாக react-hooks/exhaustive-deps
) இங்கே விலைமதிப்பற்றவை. நீங்கள் ஒரு சார்பைத் தவறவிட்டால் அவை தானாகவே உங்களை எச்சரிக்கும்.
எடுத்துக்காட்டு:
function MyComponent({ user, settings }) {
const userName = user.name;
const showWelcomeMessage = settings.showWelcome;
const welcomeMessage = useMemo(() => {
// This calculation depends on userName and showWelcomeMessage
if (showWelcomeMessage) {
return `Welcome, ${userName}!`;
} else {
return "Welcome!";
}
}, [userName, showWelcomeMessage]); // Both must be included
return (
{welcomeMessage}
{/* ... other JSX */}
);
}
இந்த எடுத்துக்காட்டில், userName
மற்றும் showWelcomeMessage
இரண்டும் useMemo
கால்பேக்கிற்குள் பயன்படுத்தப்படுகின்றன. எனவே, அவை சார்பு வரிசையில் சேர்க்கப்பட வேண்டும். இந்த மதிப்புகளில் ஏதேனும் ஒன்று மாறினால், welcomeMessage
மீண்டும் கணக்கிடப்படும்.
2. ஆப்ஜெக்ட்கள் மற்றும் வரிசைகளுக்கான குறிப்பு சமத்துவத்தைப் புரிந்துகொள்ளுங்கள்
பிரிமிடிவ்கள் (strings, numbers, booleans, null, undefined, symbols) மதிப்பால் ஒப்பிடப்படுகின்றன. இருப்பினும், ஆப்ஜெக்ட்கள் மற்றும் வரிசைகள் குறிப்பால் ஒப்பிடப்படுகின்றன. இதன் பொருள், ஒரு ஆப்ஜெக்ட் அல்லது வரிசை ஒரே உள்ளடக்கங்களைக் கொண்டிருந்தாலும், அது ஒரு புதிய நிகழ்வாக இருந்தால், ரியாக்ட் அதை ஒரு மாற்றமாகக் கருதும்.
சூழல் 1: ஒரு புதிய ஆப்ஜெக்ட்/வரிசை லிட்டரலைக் கடத்துதல்
நீங்கள் ஒரு புதிய ஆப்ஜெக்ட் அல்லது வரிசை லிட்டரலை நேரடியாக ஒரு மெமோயிஸ் செய்யப்பட்ட குழந்தை காம்பொனென்ட்க்கு ப்ராப் ஆகக் கொடுத்தால் அல்லது அதை ஒரு மெமோயிஸ் செய்யப்பட்ட கணக்கீட்டிற்குள் பயன்படுத்தினால், அது பெற்றோர் ஒவ்வொரு ரெண்டரிலும் ஒரு ரீ-ரெண்டர் அல்லது ரீ-கம்பூட்டேஷனைத் தூண்டும், இது மெமோயிசேஷனின் நன்மைகளை மறுக்கிறது.
function ParentComponent() {
const [count, setCount] = React.useState(0);
// This creates a NEW object on every render
const styleOptions = { backgroundColor: 'blue', padding: 10 };
return (
{/* If ChildComponent is memoized, it will re-render unnecessarily */}
);
}
const ChildComponent = React.memo(({ data }) => {
console.log('ChildComponent rendered');
return Child;
});
இதைத் தடுக்க, ஆப்ஜெக்ட் அல்லது வரிசை அடிக்கடி மாறாத ப்ராப்கள் அல்லது நிலையிலிருந்து பெறப்பட்டால், அல்லது அது மற்றொரு ஹூக்கிற்கான சார்பாக இருந்தால், அதை மெமோயிஸ் செய்யுங்கள்.
ஆப்ஜெக்ட்/வரிசைக்கு useMemo
ஐப் பயன்படுத்தி எடுத்துக்காட்டு:
function ParentComponent() {
const [count, setCount] = React.useState(0);
const baseStyles = { padding: 10 };
// Memoize the object if its dependencies (like baseStyles) don't change often.
// If baseStyles were derived from props, it would be included in the dependency array.
const styleOptions = React.useMemo(() => ({
...baseStyles, // Assuming baseStyles is stable or memoized itself
backgroundColor: 'blue'
}), [baseStyles]); // Include baseStyles if it's not a literal or could change
return (
);
}
const ChildComponent = React.memo(({ data }) => {
console.log('ChildComponent rendered');
return Child;
});
இந்த சரிசெய்யப்பட்ட எடுத்துக்காட்டில், styleOptions
மெமோயிஸ் செய்யப்பட்டுள்ளது. baseStyles
(அல்லது baseStyles
எதைச் சார்ந்துள்ளதோ அது) மாறாவிட்டால், styleOptions
அதே நிகழ்வாக இருக்கும், இது ChildComponent
இன் தேவையற்ற ரீ-ரெண்டர்களைத் தடுக்கிறது.
3. ஒவ்வொரு மதிப்பிலும் `useMemo` ஐத் தவிர்க்கவும்
மெமோயிசேஷன் இலவசம் அல்ல. இது கேச் செய்யப்பட்ட மதிப்பைச் சேமிக்க நினைவக மேல்சுமை மற்றும் சார்புகளைச் சரிபார்க்க ஒரு சிறிய கணக்கீட்டுச் செலவை உள்ளடக்கியது. useMemo
ஐ நியாயமாகப் பயன்படுத்துங்கள், கணக்கீடு வெளிப்படையாக விலை உயர்ந்ததாக இருக்கும்போது அல்லது மேம்படுத்தல் நோக்கங்களுக்காக குறிப்பு சமத்துவத்தைப் பாதுகாக்க வேண்டியிருக்கும்போது மட்டுமே (எ.கா., React.memo
, useEffect
, அல்லது பிற ஹூக்குகளுடன்).
useMemo
ஐ எப்போது பயன்படுத்தக்கூடாது:
- மிக விரைவாக இயங்கும் எளிய கணக்கீடுகள்.
- ஏற்கனவே நிலையான மதிப்புகள் (எ.கா., அடிக்கடி மாறாத பிரிமிடிவ் ப்ராப்கள்).
தேவையற்ற useMemo
இன் எடுத்துக்காட்டு:
function SimpleComponent({ name }) {
// This calculation is trivial and doesn't need memoization.
// The overhead of useMemo is likely greater than the benefit.
const greeting = `Hello, ${name}`;
return {greeting}
;
}
4. பெறப்பட்ட தரவை மெமோயிஸ் செய்யவும்
இருக்கும் ப்ராப்கள் அல்லது நிலையிலிருந்து புதிய தரவைப் பெறுவது ஒரு பொதுவான வடிவமாகும். இந்த தருவிப்பு கணக்கீட்டு ரீதியாக தீவிரமானதாக இருந்தால், அது useMemo
க்கு ஒரு சிறந்த வேட்பாளர்.
எடுத்துக்காட்டு: ஒரு பெரிய பட்டியலை வடிகட்டுதல் மற்றும் வரிசைப்படுத்துதல்
function ProductList({ products }) {
const [filterText, setFilterText] = React.useState('');
const [sortOrder, setSortOrder] = React.useState('asc');
const filteredAndSortedProducts = useMemo(() => {
console.log('Filtering and sorting products...');
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]); // All dependencies included
return (
setFilterText(e.target.value)}
/>
{filteredAndSortedProducts.map(product => (
-
{product.name} - ${product.price}
))}
);
}
இந்த எடுத்துக்காட்டில், ஒரு பெரிய தயாரிப்பு பட்டியலை வடிகட்டுவதும் வரிசைப்படுத்துவதும் நேரத்தைச் செலவழிக்கக்கூடும். முடிவை மெமோயிஸ் செய்வதன் மூலம், இந்த செயல்பாடு products
பட்டியல், filterText
, அல்லது sortOrder
உண்மையில் மாறும்போது மட்டுமே இயங்கும் என்பதை உறுதிசெய்கிறோம், ProductList
இன் ஒவ்வொரு ரீ-ரெண்டரிலும் அல்ல.
5. செயல்பாடுகளை சார்புகளாகக் கையாளுதல்
உங்கள் மெமோயிஸ் செய்யப்பட்ட செயல்பாடு காம்பொனென்ட்க்குள் வரையறுக்கப்பட்ட மற்றொரு செயல்பாட்டைச் சார்ந்து இருந்தால், அந்த செயல்பாடும் சார்பு வரிசையில் சேர்க்கப்பட வேண்டும். இருப்பினும், ஒரு செயல்பாடு காம்பொனென்ட்க்குள் இன்லைனாக வரையறுக்கப்பட்டால், அது ஒவ்வொரு ரெண்டரிலும் ஒரு புதிய குறிப்பைப் பெறுகிறது, லிட்டரல்களுடன் உருவாக்கப்பட்ட ஆப்ஜெக்ட்கள் மற்றும் வரிசைகளைப் போலவே.
இன்லைனாக வரையறுக்கப்பட்ட செயல்பாடுகளுடன் சிக்கல்களைத் தவிர்க்க, நீங்கள் அவற்றை useCallback
ஐப் பயன்படுத்தி மெமோயிஸ் செய்ய வேண்டும்.
useCallback
மற்றும் useMemo
உடன் எடுத்துக்காட்டு:
function UserProfile({ userId }) {
const [user, setUser] = React.useState(null);
// Memoize the data fetching function using useCallback
const fetchUserData = React.useCallback(async () => {
const response = await fetch(`/api/users/${userId}`);
const data = await response.json();
setUser(data);
}, [userId]); // fetchUserData depends on userId
// Memoize the processing of user data
const userDisplayName = React.useMemo(() => {
if (!user) return 'Loading...';
// Potentially expensive processing of user data
return `${user.firstName} ${user.lastName} (${user.username})`;
}, [user]); // userDisplayName depends on the user object
// Call fetchUserData when the component mounts or userId changes
React.useEffect(() => {
fetchUserData();
}, [fetchUserData]); // fetchUserData is a dependency for useEffect
return (
{userDisplayName}
{/* ... other user details */}
);
}
இந்த சூழ்நிலையில்:
fetchUserData
useCallback
உடன் மெமோயிஸ் செய்யப்பட்டுள்ளது, ஏனெனில் இது ஒரு நிகழ்வு கையாளுபவர்/செயல்பாடு ஆகும், இது குழந்தை காம்பொனென்ட்களுக்கு அனுப்பப்படலாம் அல்லது சார்பு வரிசைகளில் பயன்படுத்தப்படலாம் (useEffect
இல் உள்ளதைப் போல).userId
மாறினால் மட்டுமே அது ஒரு புதிய குறிப்பைப் பெறுகிறது.userDisplayName
useMemo
உடன் மெமோயிஸ் செய்யப்பட்டுள்ளது, ஏனெனில் அதன் கணக்கீடுuser
ஆப்ஜெக்ட்டைச் சார்ந்துள்ளது.useEffect
fetchUserData
ஐச் சார்ந்துள்ளது.fetchUserData
useCallback
ஆல் மெமோயிஸ் செய்யப்பட்டுள்ளதால்,fetchUserData
இன் குறிப்பு மாறினால் மட்டுமேuseEffect
மீண்டும் இயங்கும் (இதுuserId
மாறும்போது மட்டுமே நிகழ்கிறது), தேவையற்ற தரவு பெறுதலைத் தடுக்கிறது.
6. சார்பு வரிசையைத் தவிர்த்தல்: useMemo(() => compute(), [])
நீங்கள் சார்பு வரிசையாக ஒரு வெற்று வரிசையை []
வழங்கினால், காம்பொனென்ட் மவுண்ட் ஆகும்போது செயல்பாடு ஒரு முறை மட்டுமே செயல்படுத்தப்படும், மேலும் முடிவு காலவரையின்றி மெமோயிஸ் செய்யப்படும்.
const initialConfig = useMemo(() => {
// This calculation runs only once on mount
return loadInitialConfiguration();
}, []); // Empty dependency array
இது உண்மையிலேயே நிலையான மற்றும் காம்பொனென்டின் வாழ்க்கைச் சுழற்சி முழுவதும் மீண்டும் கணக்கிடத் தேவையில்லாத மதிப்புகளுக்குப் பயனுள்ளதாக இருக்கும்.
7. சார்பு வரிசையை முற்றிலுமாகத் தவிர்த்தல்: useMemo(() => compute())
நீங்கள் சார்பு வரிசையை முற்றிலுமாகத் தவிர்த்தால், செயல்பாடு ஒவ்வொரு ரெண்டரிலும் செயல்படுத்தப்படும். இது மெமோயிசேஷனை திறம்பட முடக்குகிறது மற்றும் உங்களுக்கு மிகவும் குறிப்பிட்ட, அரிதான பயன்பாட்டு வழக்கு இல்லாவிட்டால் பொதுவாக பரிந்துரைக்கப்படுவதில்லை. இது useMemo
இல்லாமல் செயல்பாட்டை நேரடியாக அழைப்பதற்கு செயல்பாட்டு ரீதியாக சமமானது.
பொதுவான ஆபத்துகள் மற்றும் அவற்றை எவ்வாறு தவிர்ப்பது
சிறந்த நடைமுறைகளை மனதில் வைத்திருந்தாலும், டெவலப்பர்கள் பொதுவான பொறிகளில் விழலாம்:
ஆபத்து 1: விடுபட்ட சார்புகள்
சிக்கல்: மெமோயிஸ் செய்யப்பட்ட செயல்பாட்டிற்குள் பயன்படுத்தப்படும் ஒரு மாறியைச் சேர்க்க மறந்துவிடுதல். இது பழைய தரவு மற்றும் நுட்பமான பிழைகளுக்கு வழிவகுக்கிறது.
தீர்வு: எப்போதும் eslint-plugin-react-hooks
தொகுப்பை exhaustive-deps
விதியுடன் இயக்குங்கள். இந்த விதி பெரும்பாலான விடுபட்ட சார்புகளைப் பிடிக்கும்.
ஆபத்து 2: அதிகப்படியான மெமோயிசேஷன்
சிக்கல்: useMemo
ஐ எளிய கணக்கீடுகள் அல்லது மேல்சுமைக்குத் தகுதியில்லாத மதிப்புகளுக்குப் பயன்படுத்துதல். இது சில நேரங்களில் செயல்திறனை மோசமாக்கலாம்.
தீர்வு: உங்கள் பயன்பாட்டை சுயவிவரப்படுத்துங்கள். செயல்திறன் தடைகளை அடையாளம் காண ரியாக்ட் டெவ் டூல்ஸைப் பயன்படுத்தவும். நன்மை செலவை விட அதிகமாக இருக்கும்போது மட்டுமே மெமோயிஸ் செய்யவும். மெமோயிசேஷன் இல்லாமல் தொடங்கி, செயல்திறன் ஒரு சிக்கலாக மாறினால் அதைச் சேர்க்கவும்.
ஆபத்து 3: ஆப்ஜெக்ட்கள்/வரிசைகளைத் தவறாக மெமோயிஸ் செய்தல்
சிக்கல்: மெமோயிஸ் செய்யப்பட்ட செயல்பாட்டிற்குள் புதிய ஆப்ஜெக்ட்/வரிசை லிட்டரல்களை உருவாக்குதல் அல்லது அவற்றை முதலில் மெமோயிஸ் செய்யாமல் சார்புகளாக அனுப்புதல்.
தீர்வு: குறிப்பு சமத்துவத்தைப் புரிந்து கொள்ளுங்கள். ஆப்ஜெக்ட்கள் மற்றும் வரிசைகள் உருவாக்குவதற்கு விலை உயர்ந்ததாக இருந்தால் அல்லது அவற்றின் நிலைத்தன்மை குழந்தை காம்பொனென்ட் மேம்படுத்தல்களுக்கு முக்கியமானதாக இருந்தால் அவற்றை useMemo
ஐப் பயன்படுத்தி மெமோயிஸ் செய்யுங்கள்.
ஆபத்து 4: 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
மற்றும் அதன் சார்புகளில் தேர்ச்சி பெறுவது உலகளாவிய பயனர் தளத்திற்கு ஏற்ற உயர்தர, செயல்திறன் மிக்க ரியாக்ட் பயன்பாடுகளை உருவாக்குவதற்கான ஒரு குறிப்பிடத்தக்க படியாகும்.