தேவையற்ற மறு-ரெண்டர்களைத் தடுப்பதன் மூலம் ரியாக்ட் பயன்பாடுகளை மேம்படுத்துவதற்கான ஒரு விரிவான வழிகாட்டி. மேம்பட்ட செயல்திறனுக்காக மெமோயைசேஷன், ப்யூர்கம்பொனென்ட், ஷுட்கம்பொனென்ட்அப்டேட் போன்ற நுட்பங்களைக் கற்றுக்கொள்ளுங்கள்.
ரியாக்ட் ரெண்டர் மேம்படுத்தல்: தேவையற்ற மறு-ரெண்டர்களைத் தடுப்பதில் தேர்ச்சி பெறுதல்
ரியாக்ட், பயனர் இடைமுகங்களை உருவாக்குவதற்கான ஒரு சக்திவாய்ந்த ஜாவாஸ்கிரிப்ட் லைப்ரரி, சில நேரங்களில் அதிகப்படியான அல்லது தேவையற்ற மறு-ரெண்டர்கள் காரணமாக செயல்திறன் சிக்கல்களை சந்திக்க நேரிடலாம். பல கூறுகளைக் கொண்ட சிக்கலான பயன்பாடுகளில், இந்த மறு-ரெண்டர்கள் செயல்திறனை கணிசமாகக் குறைத்து, மந்தமான பயனர் அனுபவத்திற்கு வழிவகுக்கும். இந்த வழிகாட்டி, ரியாக்டில் தேவையற்ற மறு-ரெண்டர்களைத் தடுப்பதற்கான நுட்பங்களின் விரிவான கண்ணோட்டத்தை வழங்குகிறது, உங்கள் பயன்பாடுகள் உலகெங்கிலும் உள்ள பயனர்களுக்கு வேகமாகவும், திறமையாகவும், பதிலளிக்கக்கூடியதாகவும் இருப்பதை உறுதி செய்கிறது.
ரியாக்டில் மறு-ரெண்டர்களைப் புரிந்துகொள்ளுதல்
மேம்படுத்தல் நுட்பங்களுக்குள் நுழைவதற்கு முன், ரியாக்டின் ரெண்டரிங் செயல்முறை எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்வது அவசியம். ஒரு கூறின் ஸ்டேட் அல்லது ப்ராப்ஸ் மாறும்போது, ரியாக்ட் அந்த கூறு மற்றும் அதன் குழந்தைகளை மறு-ரெண்டர் செய்யத் தூண்டுகிறது. இந்த செயல்முறை விர்ச்சுவல் டாம் (virtual DOM) ஐப் புதுப்பித்து, முந்தைய பதிப்போடு ஒப்பிட்டு, உண்மையான டாமில் (actual DOM) பயன்படுத்த வேண்டிய குறைந்தபட்ச மாற்றங்களை தீர்மானிக்கிறது.
இருப்பினும், அனைத்து ஸ்டேட் அல்லது ப்ராப்ஸ் மாற்றங்களுக்கும் டாம் புதுப்பிப்பு தேவைப்படுவதில்லை. புதிய விர்ச்சுவல் டாம் முந்தையதைப் போலவே இருந்தால், மறு-ரெண்டர் என்பது அடிப்படையில் வளங்களின் வீணடிப்பாகும். இந்த தேவையற்ற மறு-ரெண்டர்கள் மதிப்புமிக்க CPU சுழற்சிகளை உட்கொண்டு, செயல்திறன் சிக்கல்களுக்கு வழிவகுக்கும், குறிப்பாக சிக்கலான கூறு மரங்களைக் கொண்ட பயன்பாடுகளில்.
தேவையற்ற மறு-ரெண்டர்களைக் கண்டறிதல்
மறு-ரெண்டர்களை மேம்படுத்துவதில் முதல் படி, அவை எங்கு நிகழ்கின்றன என்பதைக் கண்டறிவதாகும். இதற்காக ரியாக்ட் பல கருவிகளை வழங்குகிறது:
1. ரியாக்ட் ப்ரொஃபைலர் (React Profiler)
குரோம் மற்றும் பயர்பாக்ஸிற்கான ரியாக்ட் டெவ்டூல்ஸ் நீட்டிப்பில் கிடைக்கும் ரியாக்ட் ப்ரொஃபைலர், உங்கள் ரியாக்ட் கூறுகளின் செயல்திறனைப் பதிவுசெய்து பகுப்பாய்வு செய்ய உங்களை அனுமதிக்கிறது. இது எந்தெந்த கூறுகள் மறு-ரெண்டர் ஆகின்றன, அவை ரெண்டர் ஆக எவ்வளவு நேரம் எடுக்கின்றன, மற்றும் ஏன் மறு-ரெண்டர் ஆகின்றன என்பது பற்றிய நுண்ணறிவுகளை வழங்குகிறது.
ப்ரொஃபைலரைப் பயன்படுத்த, டெவ்டூல்ஸில் உள்ள "Record" பொத்தானை இயக்கி, உங்கள் பயன்பாட்டுடன் தொடர்பு கொள்ளுங்கள். பதிவுசெய்த பிறகு, ப்ரொஃபைலர் கூறு மரம் மற்றும் அதன் ரெண்டரிங் நேரங்களைக் காட்டும் ஒரு ஃபிளேம் சார்ட்டைக் காண்பிக்கும். ரெண்டர் செய்ய அதிக நேரம் எடுக்கும் அல்லது அடிக்கடி மறு-ரெண்டர் ஆகும் கூறுகள் மேம்படுத்தலுக்கான முக்கிய வேட்பாளர்களாகும்.
2. ஒய் டிட் யூ ரெண்டர்? (Why Did You Render?)
"ஒய் டிட் யூ ரெண்டர்?" என்பது ஒரு லைப்ரரி ஆகும், இது தேவையற்ற மறு-ரெண்டர்கள் குறித்து உங்களுக்குத் தெரிவிக்க ரியாக்டைப் பேட்ச் செய்கிறது. மறு-ரெண்டரை ஏற்படுத்திய குறிப்பிட்ட ப்ராப்ஸ்களை கன்சோலில் பதிவு செய்வதன் மூலம் இது உதவுகிறது. மறு-ரெண்டரிங் சிக்கல்களின் மூல காரணத்தைக் கண்டறிவதில் இது மிகவும் உதவியாக இருக்கும்.
"ஒய் டிட் யூ ரெண்டர்?" ஐப் பயன்படுத்த, அதை ஒரு டெவலப்மென்ட் டிபென்டன்சியாக நிறுவவும்:
npm install @welldone-software/why-did-you-render --save-dev
பின்னர், அதை உங்கள் பயன்பாட்டின் நுழைவுப் புள்ளியில் (எ.கா., index.js) இறக்குமதி செய்யவும்:
import whyDidYouRender from '@welldone-software/why-did-you-render';
if (process.env.NODE_ENV === 'development') {
whyDidYouRender(React, {
include: [/.*/]
});
}
இந்தக் குறியீடு, டெவலப்மென்ட் பயன்முறையில் "ஒய் டிட் யூ ரெண்டர்?" ஐ இயக்கி, தேவையற்ற மறு-ரெண்டர்கள் பற்றிய தகவல்களை கன்சோலில் பதிவு செய்யும்.
3. கன்சோல்.லாக் ஸ்டேட்மென்ட்ஸ் (Console.log Statements)
ஒரு எளிய, ஆனால் பயனுள்ள நுட்பம், உங்கள் கூறின் render
முறையில் (அல்லது செயல்பாட்டுக் கூறின் அமைப்பில்) console.log
ஸ்டேட்மென்ட்களைச் சேர்ப்பது. இது எப்போது மறு-ரெண்டர் ஆகிறது என்பதைக் கண்காணிக்க உதவும். ப்ரொஃபைலர் அல்லது "ஒய் டிட் யூ ரெண்டர்?" ஐ விட இது நுட்பமற்றதாக இருந்தாலும், எதிர்பார்த்ததை விட அடிக்கடி மறு-ரெண்டர் ஆகும் கூறுகளை இது விரைவாக எடுத்துக்காட்டும்.
தேவையற்ற மறு-ரெண்டர்களைத் தடுப்பதற்கான நுட்பங்கள்
செயல்திறன் சிக்கல்களை ஏற்படுத்தும் கூறுகளை நீங்கள் கண்டறிந்தவுடன், தேவையற்ற மறு-ரெண்டர்களைத் தடுக்க பல்வேறு நுட்பங்களைப் பயன்படுத்தலாம்:
1. மெமோயைசேஷன் (Memoization)
மெமோயைசேஷன் என்பது ஒரு சக்திவாய்ந்த மேம்படுத்தல் நுட்பமாகும், இது விலையுயர்ந்த செயல்பாட்டு அழைப்புகளின் முடிவுகளை கேச் செய்து, அதே உள்ளீடுகள் மீண்டும் நிகழும்போது கேச் செய்யப்பட்ட முடிவைத் திருப்பித் தருகிறது. ரியாக்டில், கூறுகளின் ப்ராப்ஸ் மாறாதபோது அவை மறு-ரெண்டர் செய்வதைத் தடுக்க மெமோயைசேஷன் பயன்படுத்தப்படலாம்.
a. ரியாக்ட்.மெமோ (React.memo)
React.memo
என்பது ஒரு உயர்-வரிசைக் கூறு (higher-order component) ஆகும், இது ஒரு செயல்பாட்டுக் கூறினை மெமோயைஸ் செய்கிறது. இது தற்போதைய ப்ராப்ஸ்களை முந்தைய ப்ராப்ஸ்களுடன் மேலோட்டமாக ஒப்பிட்டு, ப்ராப்ஸ் மாறியிருந்தால் மட்டுமே கூறினை மறு-ரெண்டர் செய்கிறது.
உதாரணம்:
const MyComponent = React.memo(function MyComponent(props) {
return <div>{props.data}</div>;
});
இயல்பாக, React.memo
அனைத்து ப்ராப்ஸ்களின் மேலோட்டமான ஒப்பீட்டைச் செய்கிறது. ஒப்பீட்டு தர்க்கத்தைத் தனிப்பயனாக்க React.memo
வின் இரண்டாவது வாதமாக ஒரு தனிப்பயன் ஒப்பீட்டு செயல்பாட்டை நீங்கள் வழங்கலாம்.
const MyComponent = React.memo(function MyComponent(props) {
return <div>{props.data}</div>;
}, (prevProps, nextProps) => {
// ப்ராப்ஸ் சமமாக இருந்தால் true, வேறுபட்டால் false எனத் திருப்பவும்
return prevProps.data === nextProps.data;
});
b. யூஸ்மெமோ (useMemo)
useMemo
என்பது ஒரு கணக்கீட்டின் முடிவை மெமோயைஸ் செய்யும் ஒரு ரியாக்ட் ஹூக் ஆகும். இது ஒரு செயல்பாடு மற்றும் சார்புகளின் வரிசையை (array of dependencies) வாதங்களாக எடுத்துக்கொள்கிறது. சார்புகளில் ஒன்று மாறும்போது மட்டுமே செயல்பாடு மீண்டும் இயக்கப்படும், மேலும் அடுத்தடுத்த ரெண்டர்களில் மெமோயைஸ் செய்யப்பட்ட முடிவு திருப்பித் தரப்படும்.
useMemo
குறிப்பாக விலையுயர்ந்த கணக்கீடுகளை மெமோயைஸ் செய்வதற்கும் அல்லது குழந்தை கூறுகளுக்கு ப்ராப்ஸ்களாக அனுப்பப்படும் பொருள்கள் அல்லது செயல்பாடுகளுக்கு நிலையான குறிப்புகளை உருவாக்குவதற்கும் பயனுள்ளதாக இருக்கும்.
உதாரணம்:
const memoizedValue = useMemo(() => {
// இங்கே ஒரு விலையுயர்ந்த கணக்கீட்டைச் செய்யவும்
return computeExpensiveValue(a, b);
}, [a, b]);
2. ப்யூர்கம்பொனென்ட் (PureComponent)
PureComponent
என்பது ரியாக்ட் கூறுகளுக்கான ஒரு அடிப்படைக் கிளாஸ் ஆகும், இது அதன் shouldComponentUpdate
முறையில் ப்ராப்ஸ் மற்றும் ஸ்டேட்டின் மேலோட்டமான ஒப்பீட்டைச் செயல்படுத்துகிறது. ப்ராப்ஸ் மற்றும் ஸ்டேட் மாறவில்லை என்றால், கூறு மறு-ரெண்டர் ஆகாது.
PureComponent
ஆனது ரெண்டரிங்கிற்காக அவற்றின் ப்ராப்ஸ் மற்றும் ஸ்டேட்டை மட்டுமே சார்ந்துள்ள மற்றும் கான்டெக்ஸ்ட் அல்லது பிற வெளிப்புற காரணிகளைச் சார்ந்திராத கூறுகளுக்கு ஒரு நல்ல தேர்வாகும்.
உதாரணம்:
class MyComponent extends React.PureComponent {
render() {
return <div>{this.props.data}</div>;
}
}
முக்கிய குறிப்பு: PureComponent
மற்றும் React.memo
ஆகியவை மேலோட்டமான ஒப்பீடுகளைச் செய்கின்றன. அதாவது, அவை பொருள்கள் மற்றும் வரிசைகளின் குறிப்புகளை மட்டுமே ஒப்பிடுகின்றன, அவற்றின் உள்ளடக்கங்களை அல்ல. உங்கள் ப்ராப்ஸ் அல்லது ஸ்டேட்டில் உள்ளமைக்கப்பட்ட பொருள்கள் அல்லது வரிசைகள் இருந்தால், மாற்றங்கள் சரியாகக் கண்டறியப்படுவதை உறுதிசெய்ய நீங்கள் இம்யூட்டபிலிட்டி (immutability) போன்ற நுட்பங்களைப் பயன்படுத்த வேண்டியிருக்கலாம்.
3. ஷுட்கம்பொனென்ட்அப்டேட் (shouldComponentUpdate)
shouldComponentUpdate
வாழ்க்கைச் சுழற்சி முறை (lifecycle method) ஒரு கூறு மறு-ரெண்டர் செய்ய வேண்டுமா என்பதை நீங்கள் கைமுறையாகக் கட்டுப்படுத்த அனுமதிக்கிறது. இந்த முறை அடுத்த ப்ராப்ஸ் மற்றும் அடுத்த ஸ்டேட்டை வாதங்களாகப் பெறுகிறது, மேலும் கூறு மறு-ரெண்டர் செய்ய வேண்டுமானால் true
அல்லது செய்யக்கூடாதென்றால் false
ஐத் திருப்ப வேண்டும்.
shouldComponentUpdate
மறு-ரெண்டரிங்கின் மீது அதிக கட்டுப்பாட்டை வழங்கினாலும், அதற்கு அதிக கைமுறை முயற்சியும் தேவைப்படுகிறது. மறு-ரெண்டர் அவசியமா என்பதைத் தீர்மானிக்க, தொடர்புடைய ப்ராப்ஸ் மற்றும் ஸ்டேட்டை நீங்கள் கவனமாக ஒப்பிட வேண்டும்.
உதாரணம்:
class MyComponent extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
// இங்கே ப்ராப்ஸ் மற்றும் ஸ்டேட்டை ஒப்பிடவும்
return nextProps.data !== this.props.data || nextState.count !== this.state.count;
}
render() {
return <div>{this.props.data}</div>;
}
}
எச்சரிக்கை: shouldComponentUpdate
ஐ தவறாகச் செயல்படுத்துவது எதிர்பாராத நடத்தை மற்றும் பிழைகளுக்கு வழிவகுக்கும். உங்கள் ஒப்பீட்டு தர்க்கம் முழுமையானது மற்றும் அனைத்து தொடர்புடைய காரணிகளையும் கணக்கில் எடுத்துக்கொள்கிறது என்பதை உறுதிப்படுத்தவும்.
4. யூஸ்கால்பேக் (useCallback)
useCallback
என்பது ஒரு செயல்பாட்டு வரையறையை மெமோயைஸ் செய்யும் ஒரு ரியாக்ட் ஹூக் ஆகும். இது ஒரு செயல்பாடு மற்றும் சார்புகளின் வரிசையை வாதங்களாக எடுத்துக்கொள்கிறது. சார்புகளில் ஒன்று மாறும்போது மட்டுமே செயல்பாடு மீண்டும் வரையறுக்கப்படும், மேலும் அடுத்தடுத்த ரெண்டர்களில் மெமோயைஸ் செய்யப்பட்ட செயல்பாடு திருப்பித் தரப்படும்.
useCallback
குறிப்பாக React.memo
அல்லது PureComponent
ஐப் பயன்படுத்தும் குழந்தை கூறுகளுக்கு ப்ராப்ஸ்களாக செயல்பாடுகளை அனுப்பும்போது பயனுள்ளதாக இருக்கும். செயல்பாட்டை மெமோயைஸ் செய்வதன் மூலம், பெற்றோர் கூறு மறு-ரெண்டர் ஆகும்போது குழந்தை கூறு தேவையற்ற முறையில் மறு-ரெண்டர் செய்வதைத் தடுக்கலாம்.
உதாரணம்:
const handleClick = useCallback(() => {
// கிளிக் நிகழ்வைக் கையாளவும்
console.log('Clicked!');
}, []);
5. இம்யூட்டபிலிட்டி (Immutability)
இம்யூட்டபிலிட்டி என்பது ஒரு நிரலாக்கக் கருத்து ஆகும், இது தரவை மாற்ற முடியாததாகக் கருதுகிறது, அதாவது அது உருவாக்கப்பட்ட பிறகு மாற்றப்பட முடியாது. மாற்ற முடியாத தரவுகளுடன் பணிபுரியும் போது, எந்தவொரு மாற்றமும் ஏற்கனவே உள்ளதை மாற்றுவதற்குப் பதிலாக ஒரு புதிய தரவுக் கட்டமைப்பை உருவாக்குவதில் விளைகிறது.
ரியாக்ட் மறு-ரெண்டர்களை மேம்படுத்துவதற்கு இம்யூட்டபிலிட்டி முக்கியமானது, ஏனெனில் இது ரியாக்ட் ப்ராப்ஸ் மற்றும் ஸ்டேட்டில் உள்ள மாற்றங்களை மேலோட்டமான ஒப்பீடுகளைப் பயன்படுத்தி எளிதாகக் கண்டறிய அனுமதிக்கிறது. நீங்கள் ஒரு பொருள் அல்லது வரிசையை நேரடியாக மாற்றினால், ரியாக்ட்டால் மாற்றத்தைக் கண்டறிய முடியாது, ஏனெனில் பொருள் அல்லது வரிசையின் குறிப்பு அப்படியே இருக்கும்.
ரியாக்டில் மாற்ற முடியாத தரவுகளுடன் பணியாற்ற நீங்கள் Immutable.js அல்லது Immer போன்ற லைப்ரரிகளைப் பயன்படுத்தலாம். இந்த லைப்ரரிகள் மாற்ற முடியாத தரவை உருவாக்குவதையும் கையாளுவதையும் எளிதாக்கும் தரவுக் கட்டமைப்புகள் மற்றும் செயல்பாடுகளை வழங்குகின்றன.
இம்மரைப் பயன்படுத்தும் உதாரணம்:
import { useImmer } from 'use-immer';
function MyComponent() {
const [data, setData] = useImmer({
name: 'John',
age: 30
});
const updateName = () => {
setData(draft => {
draft.name = 'Jane';
});
};
return (
<div>
<p>Name: {data.name}</p>
<button onClick={updateName}>Update Name</button>
</div>
);
}
6. கோட் ஸ்ப்ளிட்டிங் மற்றும் லேசி லோடிங் (Code Splitting and Lazy Loading)
கோட் ஸ்ப்ளிட்டிங் என்பது உங்கள் பயன்பாட்டின் குறியீட்டை தேவைக்கேற்ப ஏற்றக்கூடிய சிறிய துண்டுகளாகப் பிரிப்பதை உள்ளடக்கிய ஒரு நுட்பமாகும். இது உங்கள் பயன்பாட்டின் ஆரம்ப ஏற்றுதல் நேரத்தை கணிசமாக மேம்படுத்தும், ஏனெனில் உலாவி தற்போதைய காட்சிக்குத் தேவையான குறியீட்டை மட்டுமே பதிவிறக்க வேண்டும்.
ரியாக்ட் React.lazy
செயல்பாடு மற்றும் Suspense
கூறு ஆகியவற்றைப் பயன்படுத்தி கோட் ஸ்ப்ளிட்டிங்கிற்கு உள்ளமைக்கப்பட்ட ஆதரவை வழங்குகிறது. React.lazy
உங்களை டைனமிக்காக கூறுகளை இறக்குமதி செய்ய அனுமதிக்கிறது, அதே நேரத்தில் Suspense
கூறு ஏற்றப்படும்போது ஒரு ஃபால்பேக் பயனர் இடைமுகத்தைக் காட்ட உங்களை அனுமதிக்கிறது.
உதாரணம்:
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
function App() {
return (
<Suspense fallback={<div>Loading...</div>}>
<MyComponent />
</Suspense>
);
}
7. கீஸ்களை (Keys) திறமையாகப் பயன்படுத்துதல்
ரியாக்டில் உறுப்புகளின் பட்டியல்களை ரெண்டர் செய்யும்போது, ஒவ்வொரு உறுப்புக்கும் தனித்துவமான கீஸ்களை வழங்குவது முக்கியம். கீஸ்கள் எந்தெந்த உறுப்புகள் மாறிவிட்டன, சேர்க்கப்பட்டுள்ளன, அல்லது நீக்கப்பட்டுள்ளன என்பதைக் கண்டறிய ரியாக்ட்டுக்கு உதவுகின்றன, இது திறமையாக டாம் ஐப் புதுப்பிக்க அனுமதிக்கிறது.
வரிசை குறியீடுகளை (array indexes) கீஸ்களாகப் பயன்படுத்துவதைத் தவிர்க்கவும், ஏனெனில் வரிசையில் உள்ள உறுப்புகளின் வரிசை மாறும்போது அவை மாறக்கூடும், இது தேவையற்ற மறு-ரெண்டர்களுக்கு வழிவகுக்கும். அதற்கு பதிலாக, ஒவ்வொரு உறுப்புக்கும் ஒரு தனித்துவமான அடையாளங்காட்டியான தரவுத்தளத்திலிருந்து ஒரு ஐடி அல்லது உருவாக்கப்பட்ட UUID ஐப் பயன்படுத்தவும்.
8. கான்டெக்ஸ்ட் (Context) பயன்பாட்டை மேம்படுத்துதல்
ரியாக்ட் கான்டெக்ஸ்ட், கூறு மரத்தின் ஒவ்வொரு மட்டத்திலும் வெளிப்படையாக ப்ராப்ஸ்களை அனுப்பாமல் கூறுகளுக்கு இடையில் தரவைப் பகிர ஒரு வழியை வழங்குகிறது. இருப்பினும், கான்டெக்ஸ்ட்டின் அதிகப்படியான பயன்பாடு செயல்திறன் சிக்கல்களுக்கு வழிவகுக்கும், ஏனெனில் ஒரு கான்டெக்ஸ்ட்டைப் பயன்படுத்தும் எந்தவொரு கூறும் கான்டெக்ஸ்ட் மதிப்பு மாறும்போது மறு-ரெண்டர் ஆகும்.
கான்டெக்ஸ்ட் பயன்பாட்டை மேம்படுத்த, இந்த உத்திகளைக் கவனியுங்கள்:
- பல, சிறிய கான்டெக்ஸ்ட்களைப் பயன்படுத்தவும்: அனைத்து பயன்பாட்டுத் தரவையும் சேமிக்க ஒற்றை, பெரிய கான்டெக்ஸ்ட்டைப் பயன்படுத்துவதற்குப் பதிலாக, அதை சிறிய, அதிக கவனம் செலுத்தும் கான்டெக்ஸ்ட்களாகப் பிரிக்கவும். இது ஒரு குறிப்பிட்ட கான்டெக்ஸ்ட் மதிப்பு மாறும்போது மறு-ரெண்டர் ஆகும் கூறுகளின் எண்ணிக்கையைக் குறைக்கும்.
- கான்டெக்ஸ்ட் மதிப்புகளை மெமோயைஸ் செய்யவும்: கான்டெக்ஸ்ட் வழங்குநரால் வழங்கப்படும் மதிப்புகளை மெமோயைஸ் செய்ய
useMemo
ஐப் பயன்படுத்தவும். மதிப்புகள் உண்மையில் மாறவில்லை என்றால் இது கான்டெக்ஸ்ட் நுகர்வோரின் தேவையற்ற மறு-ரெண்டர்களைத் தடுக்கும். - கான்டெக்ஸ்ட்டிற்கு மாற்று வழிகளைக் கருத்தில் கொள்ளுங்கள்: சில சந்தர்ப்பங்களில், ரெடக்ஸ் அல்லது ஸுஸ்டாண்ட் போன்ற பிற ஸ்டேட் மேலாண்மை தீர்வுகள் கான்டெக்ஸ்ட்டை விட பொருத்தமானதாக இருக்கலாம், குறிப்பாக அதிக எண்ணிக்கையிலான கூறுகள் மற்றும் அடிக்கடி ஸ்டேட் புதுப்பிப்புகளைக் கொண்ட சிக்கலான பயன்பாடுகளுக்கு.
சர்வதேசக் கருத்தாய்வுகள்
ஒரு உலகளாவிய பார்வையாளர்களுக்காக ரியாக்ட் பயன்பாடுகளை மேம்படுத்தும்போது, பின்வரும் காரணிகளைக் கருத்தில் கொள்வது அவசியம்:
- மாறுபடும் நெட்வொர்க் வேகம்: வெவ்வேறு பிராந்தியங்களில் உள்ள பயனர்கள் மிகவும் மாறுபட்ட நெட்வொர்க் வேகத்தைக் கொண்டிருக்கலாம். நெட்வொர்க் வழியாக பதிவிறக்கம் செய்யப்பட்டு மாற்றப்பட வேண்டிய தரவின் அளவைக் குறைக்க உங்கள் பயன்பாட்டை மேம்படுத்தவும். பட மேம்படுத்தல், கோட் ஸ்ப்ளிட்டிங், மற்றும் லேசி லோடிங் போன்ற நுட்பங்களைப் பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள்.
- சாதனத் திறன்கள்: பயனர்கள் உயர்நிலை ஸ்மார்ட்போன்கள் முதல் பழைய, குறைந்த சக்திவாய்ந்த சாதனங்கள் வரை பல்வேறு சாதனங்களில் உங்கள் பயன்பாட்டை அணுகலாம். உங்கள் பயன்பாட்டை பல்வேறு சாதனங்களில் சிறப்பாகச் செயல்பட மேம்படுத்தவும். ரெஸ்பான்சிவ் வடிவமைப்பு, அடாப்டிவ் படங்கள், மற்றும் செயல்திறன் ப்ரொஃபைலிங் போன்ற நுட்பங்களைப் பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள்.
- உள்ளூர்மயமாக்கல் (Localization): உங்கள் பயன்பாடு பல மொழிகளுக்கு உள்ளூர்மயமாக்கப்பட்டிருந்தால், உள்ளூர்மயமாக்கல் செயல்முறை செயல்திறன் சிக்கல்களை அறிமுகப்படுத்தவில்லை என்பதை உறுதிப்படுத்தவும். திறமையான உள்ளூர்மயமாக்கல் லைப்ரரிகளைப் பயன்படுத்தவும் மற்றும் உரை சரங்களை நேரடியாக உங்கள் கூறுகளில் ஹார்ட்கோட் செய்வதைத் தவிர்க்கவும்.
நிஜ உலக உதாரணங்கள்
இந்த மேம்படுத்தல் நுட்பங்கள் எவ்வாறு பயன்படுத்தப்படலாம் என்பதற்கான சில நிஜ உலக உதாரணங்களைக் கருத்தில் கொள்வோம்:
1. மின்வணிகத் தயாரிப்புப் பட்டியல்
நூற்றுக்கணக்கான தயாரிப்புகளைக் காண்பிக்கும் ஒரு தயாரிப்புப் பட்டியல் பக்கத்துடன் கூடிய ஒரு மின்வணிக வலைத்தளத்தைக் கற்பனை செய்து பாருங்கள். ஒவ்வொரு தயாரிப்பு உருப்படியும் ஒரு தனி கூறாக ரெண்டர் செய்யப்படுகிறது.
மேம்படுத்தல் இல்லாமல், பயனர் தயாரிப்புப் பட்டியலை வடிகட்டும்போது அல்லது வரிசைப்படுத்தும்போது ஒவ்வொரு முறையும், அனைத்து தயாரிப்புக் கூறுகளும் மறு-ரெண்டர் ஆகும், இது ஒரு மெதுவான மற்றும் தடுமாற்றமான அனுபவத்திற்கு வழிவகுக்கும். இதை மேம்படுத்த, நீங்கள் தயாரிப்புக் கூறுகளை மெமோயைஸ் செய்ய React.memo
ஐப் பயன்படுத்தலாம், அவற்றின் ப்ராப்ஸ் (எ.கா., தயாரிப்புப் பெயர், விலை, படம்) மாறும்போது மட்டுமே அவை மறு-ரெண்டர் செய்வதை உறுதி செய்யலாம்.
2. சமூக ஊடக ஊட்டம் (Social Media Feed)
ஒரு சமூக ஊடக ஊட்டம் பொதுவாக இடுகைகளின் பட்டியலைக் காண்பிக்கும், ஒவ்வொன்றும் கருத்துகள், விருப்பங்கள் மற்றும் பிற ஊடாடும் கூறுகளுடன் இருக்கும். ஒரு பயனர் ஒரு இடுகையை விரும்பும்போதோ அல்லது ஒரு கருத்தைச் சேர்க்கும்போதோ முழு ஊட்டத்தையும் மறு-ரெண்டர் செய்வது திறனற்றதாக இருக்கும்.
இதை மேம்படுத்த, இடுகைகளை விரும்புவதற்கும் கருத்து தெரிவிப்பதற்கும் நிகழ்வுக் கையாளுநர்களை (event handlers) மெமோயைஸ் செய்ய useCallback
ஐப் பயன்படுத்தலாம். இந்த நிகழ்வுக் கையாளுநர்கள் தூண்டப்படும்போது இடுகைக் கூறுகள் தேவையற்ற முறையில் மறு-ரெண்டர் செய்வதை இது தடுக்கும்.
3. தரவுக் காட்சிப்படுத்தல் டாஷ்போர்டு (Data Visualization Dashboard)
ஒரு தரவுக் காட்சிப்படுத்தல் டாஷ்போர்டு பெரும்பாலும் புதிய தரவுகளுடன் அடிக்கடி புதுப்பிக்கப்படும் சிக்கலான விளக்கப்படங்கள் மற்றும் வரைபடங்களைக் காண்பிக்கும். தரவு மாறும் ஒவ்வொரு முறையும் இந்த விளக்கப்படங்களை மறு-ரெண்டர் செய்வது கணக்கீட்டு ரீதியாக விலையுயர்ந்ததாக இருக்கும்.
இதை மேம்படுத்த, விளக்கப்படத் தரவை மெமோயைஸ் செய்ய useMemo
ஐப் பயன்படுத்தலாம் மற்றும் மெமோயைஸ் செய்யப்பட்ட தரவு மாறும்போது மட்டுமே விளக்கப்படங்களை மறு-ரெண்டர் செய்யலாம். இது மறு-ரெண்டர்களின் எண்ணிக்கையை கணிசமாகக் குறைத்து டாஷ்போர்டின் ஒட்டுமொத்த செயல்திறனை மேம்படுத்தும்.
சிறந்த நடைமுறைகள்
ரியாக்ட் மறு-ரெண்டர்களை மேம்படுத்தும்போது மனதில் கொள்ள வேண்டிய சில சிறந்த நடைமுறைகள் இங்கே:
- உங்கள் பயன்பாட்டை ப்ரொஃபைல் செய்யவும்: செயல்திறன் சிக்கல்களை ஏற்படுத்தும் கூறுகளைக் கண்டறிய ரியாக்ட் ப்ரொஃபைலர் அல்லது "ஒய் டிட் யூ ரெண்டர்?" ஐப் பயன்படுத்தவும்.
- எளிதில் சரிசெய்யக்கூடியவற்றில் இருந்து தொடங்குங்கள்: அடிக்கடி மறு-ரெண்டர் ஆகும் அல்லது ரெண்டர் செய்ய அதிக நேரம் எடுக்கும் கூறுகளை மேம்படுத்துவதில் கவனம் செலுத்துங்கள்.
- மெமோயைசேஷனை விவேகமாகப் பயன்படுத்தவும்: ஒவ்வொரு கூறையும் மெமோயைஸ் செய்ய வேண்டாம், ஏனெனில் மெமோயைசேஷனுக்கே ஒரு செலவு உள்ளது. உண்மையில் செயல்திறன் சிக்கல்களை ஏற்படுத்தும் கூறுகளை மட்டுமே மெமோயைஸ் செய்யவும்.
- இம்யூட்டபிலிட்டியைப் பயன்படுத்தவும்: ப்ராப்ஸ் மற்றும் ஸ்டேட்டில் உள்ள மாற்றங்களைக் கண்டறிவதை ரியாக்ட்டுக்கு எளிதாக்க மாற்ற முடியாத தரவுக் கட்டமைப்புகளைப் பயன்படுத்தவும்.
- கூறுகளை சிறியதாகவும் கவனம் செலுத்தியதாகவும் வைத்திருங்கள்: சிறிய, அதிக கவனம் செலுத்தும் கூறுகளை மேம்படுத்துவதும் பராமரிப்பதும் எளிது.
- உங்கள் மேம்படுத்தல்களைச் சோதிக்கவும்: மேம்படுத்தல் நுட்பங்களைப் பயன்படுத்திய பிறகு, மேம்படுத்தல்கள் விரும்பிய விளைவைக் கொண்டிருக்கின்றனவா மற்றும் எந்த புதிய பிழைகளையும் அறிமுகப்படுத்தவில்லை என்பதை உறுதிப்படுத்த உங்கள் பயன்பாட்டை முழுமையாகச் சோதிக்கவும்.
முடிவுரை
ரியாக்ட் பயன்பாடுகளின் செயல்திறனை மேம்படுத்துவதற்கு தேவையற்ற மறு-ரெண்டர்களைத் தடுப்பது முக்கியமானது. ரியாக்டின் ரெண்டரிங் செயல்முறை எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொண்டு, இந்த வழிகாட்டியில் விவரிக்கப்பட்டுள்ள நுட்பங்களைப் பயன்படுத்துவதன் மூலம், உங்கள் பயன்பாடுகளின் பதிலளிப்பு மற்றும் செயல்திறனை கணிசமாக மேம்படுத்தலாம், உலகெங்கிலும் உள்ள பயனர்களுக்கு சிறந்த பயனர் அனுபவத்தை வழங்கலாம். உங்கள் பயன்பாட்டை ப்ரொஃபைல் செய்யவும், செயல்திறன் சிக்கல்களை ஏற்படுத்தும் கூறுகளைக் கண்டறியவும், அந்தச் சிக்கல்களைத் தீர்க்க பொருத்தமான மேம்படுத்தல் நுட்பங்களைப் பயன்படுத்தவும் நினைவில் கொள்ளுங்கள். இந்த சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலம், உங்கள் குறியீட்டுத் தளத்தின் சிக்கல் அல்லது அளவைப் பொருட்படுத்தாமல், உங்கள் ரியாக்ட் பயன்பாடுகள் வேகமாகவும், திறமையாகவும், அளவிடக்கூடியதாகவும் இருப்பதை உறுதிசெய்யலாம்.