தமிழ்

உலகளாவிய பயன்பாடுகளில் செயல்திறனை மேம்படுத்த மேம்பட்ட ரியாக்ட் மெமோயைசேஷன் நுட்பங்களை ஆராயுங்கள். திறமையான பயனர் இடைமுகங்களை உருவாக்க React.memo, useCallback, useMemo மற்றும் பலவற்றை எப்போது, எப்படிப் பயன்படுத்துவது என்று கற்றுக் கொள்ளுங்கள்.

ரியாக்ட் மெமோ: உலகளாவிய பயன்பாடுகளுக்கான மேம்படுத்தும் நுட்பங்கள் பற்றிய ஒரு ஆழ்ந்த பார்வை

ரியாக்ட் என்பது பயனர் இடைமுகங்களை உருவாக்குவதற்கான ஒரு சக்திவாய்ந்த ஜாவாஸ்கிரிப்ட் நூலகமாகும், ஆனால் பயன்பாடுகள் சிக்கலானதாக வளரும்போது, செயல்திறன் மேம்படுத்தல் முக்கியமானதாகிறது. ரியாக்ட் மேம்படுத்தும் கருவிகளில் ஒரு முக்கிய கருவி React.memo ஆகும். இந்த வலைப்பதிவு, உலகளாவிய பார்வையாளர்களுக்காக உயர் செயல்திறன் கொண்ட ரியாக்ட் பயன்பாடுகளை உருவாக்க React.memo மற்றும் தொடர்புடைய நுட்பங்களைப் புரிந்துகொண்டு திறம்பட பயன்படுத்துவதற்கான ஒரு விரிவான வழிகாட்டியை வழங்குகிறது.

React.memo என்றால் என்ன?

React.memo என்பது ஒரு ஃபங்ஷனல் காம்போனென்டை மெமோயைஸ் செய்யும் ஒரு உயர்-வரிசை காம்போனென்ட் (HOC) ஆகும். எளிய சொற்களில் சொல்வதென்றால், ஒரு காம்போனென்டின் ப்ராப்ஸ் மாறவில்லை என்றால், அது மீண்டும் ரெண்டர் ஆவதைத் தடுக்கிறது. இயல்பாக, இது ப்ராப்ஸ்களின் ஒரு ஷாலோ ஒப்பீட்டை (shallow comparison) செய்கிறது. இது செயல்திறனை கணிசமாக மேம்படுத்தும், குறிப்பாக ரெண்டர் செய்ய கணக்கீட்டு ரீதியாக அதிக செலவாகும் அல்லது ப்ராப்ஸ் மாறாதபோதும் அடிக்கடி ரெண்டர் ஆகும் காம்போனென்ட்களுக்கு.

ஒரு பயனரின் சுயவிவரத்தைக் காட்டும் ஒரு காம்போனென்டை கற்பனை செய்து பாருங்கள். பயனரின் தகவல் (எ.கா., பெயர், அவதார்) மாறவில்லை என்றால், அந்த காம்போனென்டை மீண்டும் ரெண்டர் செய்யத் தேவையில்லை. React.memo இந்த தேவையற்ற மறு-ரெண்டரைத் தவிர்க்க உங்களை அனுமதிக்கிறது, மதிப்புமிக்க செயலாக்க நேரத்தை மிச்சப்படுத்துகிறது.

React.memo-ஐ ஏன் பயன்படுத்த வேண்டும்?

React.memo-ஐப் பயன்படுத்துவதன் முக்கிய நன்மைகள் இங்கே:

React.memo-வின் அடிப்படைப் பயன்பாடு

React.memo-ஐப் பயன்படுத்துவது நேரடியானது. உங்கள் ஃபங்ஷனல் காம்போனென்டை அதனுடன் சுற்றவும்:

import React from 'react';

const MyComponent = (props) => {
 console.log('MyComponent rendered');
 return (
 
{props.data}
); }; export default React.memo(MyComponent);

இந்த எடுத்துக்காட்டில், data ப்ராப் மாறினால் மட்டுமே MyComponent மீண்டும் ரெண்டர் ஆகும். console.log கூற்று, காம்போனென்ட் உண்மையில் எப்போது மீண்டும் ரெண்டர் ஆகிறது என்பதைச் சரிபார்க்க உங்களுக்கு உதவும்.

ஷாலோ ஒப்பீட்டைப் புரிந்துகொள்ளுதல்

இயல்பாக, React.memo ப்ராப்ஸ்களின் ஒரு ஷாலோ ஒப்பீட்டைச் செய்கிறது. இதன் பொருள், ப்ராப்ஸ்களின் மதிப்புகளை அல்ல, மாறாக ப்ராப்ஸ்களின் ரெஃபரன்ஸ்கள் மாறிவிட்டனவா என்பதை இது சரிபார்க்கிறது. ஆப்ஜெக்ட்கள் மற்றும் அரேக்களைக் கையாளும்போது இதைப் புரிந்துகொள்வது அவசியம்.

பின்வரும் எடுத்துக்காட்டைக் கவனியுங்கள்:

import React, { useState } from 'react';

const MyComponent = (props) => {
 console.log('MyComponent rendered');
 return (
 
{props.data.name}
); }; const MemoizedComponent = React.memo(MyComponent); const App = () => { const [user, setUser] = useState({ name: 'John', age: 30 }); const handleClick = () => { setUser({ ...user }); // ஒரே மதிப்புகளுடன் ஒரு புதிய ஆப்ஜெக்டை உருவாக்குகிறது }; return (
); }; export default App;

இந்த நிலையில், user ஆப்ஜெக்டின் மதிப்புகள் (name மற்றும் age) அப்படியே இருந்தாலும், handleClick ஃபங்ஷன் ஒவ்வொரு முறை அழைக்கப்படும்போதும் ஒரு புதிய ஆப்ஜெக்ட் ரெஃபரன்ஸை உருவாக்குகிறது. எனவே, React.memo ஆனது data ப்ராப் மாறிவிட்டது என்று கருதி (ஏனெனில் ஆப்ஜெக்ட் ரெஃபரன்ஸ் வேறுபட்டது) MyComponent-ஐ மீண்டும் ரெண்டர் செய்யும்.

தனிப்பயன் ஒப்பீட்டுச் செயல்பாடு

ஆப்ஜெக்ட்கள் மற்றும் அரேக்களுடன் ஷாலோ ஒப்பீடு செய்யும் சிக்கலைத் தீர்க்க, React.memo அதன் இரண்டாவது வாதமாக ஒரு தனிப்பயன் ஒப்பீட்டுச் செயல்பாட்டை வழங்க உங்களை அனுமதிக்கிறது. இந்தச் செயல்பாடு இரண்டு வாதங்களை எடுக்கிறது: prevProps மற்றும் nextProps. காம்போனென்ட் மீண்டும் ரெண்டர் ஆகக் கூடாது என்றால் (அதாவது, ப்ராப்ஸ் திறம்பட ஒரே மாதிரியாக இருந்தால்) அது true என்றும், மீண்டும் ரெண்டர் ஆக வேண்டும் என்றால் false என்றும் திரும்ப வேண்டும்.

முந்தைய எடுத்துக்காட்டில் ஒரு தனிப்பயன் ஒப்பீட்டுச் செயல்பாட்டை எவ்வாறு பயன்படுத்தலாம் என்பது இங்கே:

import React, { useState, memo } from 'react';

const MyComponent = (props) => {
 console.log('MyComponent rendered');
 return (
 
{props.data.name}
); }; const areEqual = (prevProps, nextProps) => { return prevProps.data.name === nextProps.data.name && prevProps.data.age === nextProps.data.age; }; const MemoizedComponent = memo(MyComponent, areEqual); const App = () => { const [user, setUser] = useState({ name: 'John', age: 30 }); const handleClick = () => { setUser({ ...user }); }; return (
); }; export default App;

இந்த மேம்படுத்தப்பட்ட எடுத்துக்காட்டில், areEqual ஃபங்ஷன் user ஆப்ஜெக்ட்களின் name மற்றும் age பண்புகளை ஒப்பிடுகிறது. இப்போது MemoizedComponent ஆனது name அல்லது age மாறினால் மட்டுமே மீண்டும் ரெண்டர் ஆகும்.

React.memo-ஐ எப்போது பயன்படுத்த வேண்டும்

React.memo பின்வரும் சூழ்நிலைகளில் மிகவும் பயனுள்ளதாக இருக்கும்:

இருப்பினும், React.memo ஒரு வெள்ளி குண்டு அல்ல என்பதை நினைவில் கொள்வது அவசியம். அதை கண்மூடித்தனமாகப் பயன்படுத்துவது உண்மையில் செயல்திறனைப் பாதிக்கக்கூடும், ஏனெனில் ஷாலோ ஒப்பீட்டிற்கே ஒரு செலவு உண்டு. எனவே, உங்கள் பயன்பாட்டை ப்ரொஃபைல் செய்து, மெமோயைசேஷனிலிருந்து அதிகப் பயனடையக்கூடிய காம்போனென்ட்களை அடையாளம் காண்பது முக்கியம்.

React.memo-விற்கு மாற்றுகள்

React.memo ஒரு சக்திவாய்ந்த கருவியாக இருந்தாலும், ரியாக்ட் காம்போனென்ட் செயல்திறனை மேம்படுத்துவதற்கான ஒரே வழி இதுவல்ல. இங்கே சில மாற்று மற்றும் நிரப்பு நுட்பங்கள் உள்ளன:

1. PureComponent

கிளாஸ் காம்போனென்ட்களுக்கு, PureComponent ஆனது React.memo-வைப் போன்ற செயல்பாட்டை வழங்குகிறது. இது ப்ராப்ஸ் மற்றும் ஸ்டேட் இரண்டின் ஷாலோ ஒப்பீட்டையும் செய்கிறது, மேலும் மாற்றங்கள் இருந்தால் மட்டுமே மீண்டும் ரெண்டர் செய்கிறது.

import React from 'react';

class MyComponent extends React.PureComponent {
 render() {
 console.log('MyComponent rendered');
 return (
 
{this.props.data}
); } } export default MyComponent;

PureComponent என்பது shouldComponentUpdate-ஐ கைமுறையாகச் செயல்படுத்துவதற்கு ஒரு வசதியான மாற்றாகும், இது கிளாஸ் காம்போனென்ட்களில் தேவையற்ற மறு-ரெண்டர்களைத் தடுப்பதற்கான பாரம்பரிய வழியாகும்.

2. shouldComponentUpdate

shouldComponentUpdate என்பது கிளாஸ் காம்போனென்ட்களில் உள்ள ஒரு லைஃப்சைக்கிள் மெத்தட் ஆகும், இது ஒரு காம்போனென்ட் மீண்டும் ரெண்டர் ஆக வேண்டுமா என்பதைத் தீர்மானிக்க தனிப்பயன் தர்க்கத்தை வரையறுக்க உங்களை அனுமதிக்கிறது. இது அதிகபட்ச நெகிழ்வுத்தன்மையை வழங்குகிறது, ஆனால் இது அதிக கைமுறை முயற்சியையும் கோருகிறது.

import React from 'react';

class MyComponent extends React.Component {
 shouldComponentUpdate(nextProps, nextState) {
 return nextProps.data !== this.props.data;
 }

 render() {
 console.log('MyComponent rendered');
 return (
 
{this.props.data}
); } } export default MyComponent;

shouldComponentUpdate இன்னும் అందుబాటులో ఉన్నప్పటికీ, PureComponent மற்றும் React.memo ஆகியவை அவற்றின் எளிமை மற்றும் பயன்பாட்டின் எளிமைக்காக பொதுவாக விரும்பப்படுகின்றன.

3. useCallback

useCallback என்பது ஒரு ஃபங்ஷனை மெமோயைஸ் செய்யும் ஒரு ரியாக்ட் ஹூக் ஆகும். இது ஒரு ஃபங்ஷனின் மெமோயைஸ் செய்யப்பட்ட பதிப்பைத் தருகிறது, அது அதன் டிபென்டென்சிகளில் ஒன்று மாறினால் மட்டுமே மாறும். இது மெமோயைஸ் செய்யப்பட்ட காம்போனென்ட்களுக்கு கால்பேக்குகளை ப்ராப்ஸ்களாக அனுப்புவதற்கு குறிப்பாக பயனுள்ளதாக இருக்கும்.

பின்வரும் எடுத்துக்காட்டைக் கவனியுங்கள்:

import React, { useState, useCallback, memo } from 'react';

const MyComponent = (props) => {
 console.log('MyComponent rendered');
 return (
 
 );
};

const MemoizedComponent = memo(MyComponent);

const App = () => {
 const [count, setCount] = useState(0);

 const handleClick = useCallback(() => {
 setCount(count + 1);
 }, [count]);

 return (
 

Count: {count}

); }; export default App;

இந்த எடுத்துக்காட்டில், useCallback ஆனது count ஸ்டேட் மாறும்போது மட்டுமே handleClick ஃபங்ஷன் மாறுவதை உறுதி செய்கிறது. useCallback இல்லாமல், App-இன் ஒவ்வொரு ரெண்டரிலும் ஒரு புதிய ஃபங்ஷன் உருவாக்கப்படும், இது MemoizedComponent-ஐ தேவையற்ற முறையில் மீண்டும் ரெண்டர் செய்ய வைக்கும்.

4. useMemo

useMemo என்பது ஒரு மதிப்பை மெமோயைஸ் செய்யும் ஒரு ரியாக்ட் ஹூக் ஆகும். இது ஒரு மெமோயைஸ் செய்யப்பட்ட மதிப்பைத் தருகிறது, அது அதன் டிபென்டென்சிகளில் ஒன்று மாறினால் மட்டுமே மாறும். இது ஒவ்வொரு ரெண்டரிலும் மீண்டும் இயக்கத் தேவையில்லாத அதிக செலவு மிக்க கணக்கீடுகளைத் தவிர்க்கப் பயனுள்ளதாக இருக்கும்.

import React, { useState, useMemo } from 'react';

const App = () => {
 const [input, setInput] = useState('');

 const expensiveCalculation = (str) => {
 console.log('Calculating...');
 let result = 0;
 for (let i = 0; i < str.length * 1000000; i++) {
 result++;
 }
 return result;
 };

 const memoizedResult = useMemo(() => expensiveCalculation(input), [input]);

 return (
 
setInput(e.target.value)} />

Result: {memoizedResult}

); }; export default App;

இந்த எடுத்துக்காட்டில், useMemo ஆனது input ஸ்டேட் மாறும்போது மட்டுமே expensiveCalculation ஃபங்ஷன் அழைக்கப்படுவதை உறுதி செய்கிறது. இது ஒவ்வொரு ரெண்டரிலும் கணக்கீடு மீண்டும் இயக்கப்படுவதைத் தடுக்கிறது, இது செயல்திறனை கணிசமாக மேம்படுத்தும்.

உலகளாவிய பயன்பாடுகளுக்கான நடைமுறை எடுத்துக்காட்டுகள்

உலகளாவிய பயன்பாடுகளில் React.memo மற்றும் தொடர்புடைய நுட்பங்கள் எவ்வாறு பயன்படுத்தப்படலாம் என்பதற்கான சில நடைமுறை எடுத்துக்காட்டுகளைப் பார்ப்போம்:

1. மொழித் தேர்வி (Language Selector)

ஒரு மொழித் தேர்வி காம்போனென்ட் பெரும்பாலும் అందుబాటులో உள்ள மொழிகளின் பட்டியலை ரெண்டர் செய்கிறது. இந்தப் பட்டியல் ஒப்பீட்டளவில் நிலையானதாக இருக்கலாம், அதாவது அது அடிக்கடி மாறாது. React.memo-ஐப் பயன்படுத்துவது, பயன்பாட்டின் மற்ற பகுதிகள் புதுப்பிக்கப்படும்போது மொழித் தேர்வி தேவையற்ற முறையில் மீண்டும் ரெண்டர் ஆவதைத் தடுக்கும்.

import React, { memo } from 'react';

const LanguageItem = ({ language, onSelect }) => {
 console.log(`LanguageItem ${language} rendered`);
 return (
 
  • onSelect(language)}>{language}
  • ); }; const MemoizedLanguageItem = memo(LanguageItem); const LanguageSelector = ({ languages, onSelect }) => { return (
      {languages.map((language) => ( ))}
    ); }; export default LanguageSelector;

    இந்த எடுத்துக்காட்டில், MemoizedLanguageItem ஆனது language அல்லது onSelect ப்ராப் மாறினால் மட்டுமே மீண்டும் ரெண்டர் ஆகும். மொழிப் பட்டியல் நீளமாக இருந்தாலோ அல்லது onSelect ஹேண்ட்லர் சிக்கலானதாக இருந்தாலோ இது குறிப்பாகப் பயனளிக்கும்.

    2. நாணய மாற்றி (Currency Converter)

    ஒரு நாணய மாற்றி காம்போனென்ட் நாணயங்களின் பட்டியலையும் அவற்றின் மாற்று விகிதங்களையும் காட்டக்கூடும். மாற்று விகிதங்கள் அவ்வப்போது புதுப்பிக்கப்படலாம், ஆனால் நாணயங்களின் பட்டியல் ஒப்பீட்டளவில் நிலையானதாக இருக்கலாம். React.memo-ஐப் பயன்படுத்துவது, மாற்று விகிதங்கள் புதுப்பிக்கப்படும்போது நாணயப் பட்டியல் தேவையற்ற முறையில் மீண்டும் ரெண்டர் ஆவதைத் தடுக்கும்.

    import React, { memo } from 'react';
    
    const CurrencyItem = ({ currency, rate, onSelect }) => {
     console.log(`CurrencyItem ${currency} rendered`);
     return (
     
  • onSelect(currency)}>{currency} - {rate}
  • ); }; const MemoizedCurrencyItem = memo(CurrencyItem); const CurrencyConverter = ({ currencies, onSelect }) => { return (
      {Object.entries(currencies).map(([currency, rate]) => ( ))}
    ); }; export default CurrencyConverter;

    இந்த எடுத்துக்காட்டில், MemoizedCurrencyItem ஆனது currency, rate, அல்லது onSelect ப்ராப் மாறினால் மட்டுமே மீண்டும் ரெண்டர் ஆகும். நாணயப் பட்டியல் நீளமாக இருந்தாலோ அல்லது மாற்று விகிதப் புதுப்பிப்புகள் அடிக்கடி நிகழ்ந்தாலோ இது செயல்திறனை மேம்படுத்தும்.

    3. பயனர் சுயவிவரக் காட்சி (User Profile Display)

    ஒரு பயனர் சுயவிவரத்தைக் காண்பிப்பது என்பது பெயர், சுயவிவரப் படம் மற்றும் ஒருவேளை ஒரு சுயசரிதை போன்ற நிலையான தகவல்களைக் காண்பிப்பதை உள்ளடக்கியது. `React.memo`-ஐப் பயன்படுத்துவது, ஒவ்வொரு பெற்றோர் காம்போனென்ட் புதுப்பிப்பிலும் அல்லாமல், பயனர் தரவு உண்மையில் மாறும்போது மட்டுமே காம்போனென்ட் மீண்டும் ரெண்டர் ஆவதை உறுதி செய்கிறது.

    import React, { memo } from 'react';
    
    const UserProfile = ({ user }) => {
     console.log('UserProfile rendered');
     return (
     

    {user.name}

    Profile

    {user.bio}

    ); }; export default memo(UserProfile);

    இது குறிப்பாக `UserProfile` ஒரு பெரிய, அடிக்கடி புதுப்பிக்கப்படும் டாஷ்போர்டு அல்லது பயன்பாட்டின் ஒரு பகுதியாக இருக்கும்போது பயனுள்ளதாக இருக்கும், அங்கு பயனர் தரவு தானே அடிக்கடி மாறாது.

    பொதுவான இடர்களும் அவற்றைத் தவிர்ப்பதற்கான வழிகளும்

    React.memo ஒரு மதிப்புமிக்க மேம்படுத்தல் கருவியாக இருந்தாலும், பொதுவான இடர்கள் மற்றும் அவற்றை எவ்வாறு தவிர்ப்பது என்பது பற்றி அறிந்திருப்பது முக்கியம்:

    உங்கள் பயன்பாட்டை ப்ரொஃபைலிங் செய்தல்

    React.memo உண்மையில் செயல்திறனை மேம்படுத்துகிறதா என்பதைத் தீர்மானிக்க சிறந்த வழி உங்கள் பயன்பாட்டை ப்ரொஃபைலிங் செய்வதாகும். ரியாக்ட் ப்ரொஃபைலிங்கிற்கு பல கருவிகளை வழங்குகிறது, இதில் ரியாக்ட் டெவ்டூல்ஸ் ப்ரொஃபைலர் மற்றும் React.Profiler API ஆகியவை அடங்கும்.

    ரியாக்ட் டெவ்டூல்ஸ் ப்ரொஃபைலர் உங்கள் பயன்பாட்டின் செயல்திறன் தடயங்களைப் பதிவுசெய்யவும், அடிக்கடி மீண்டும் ரெண்டர் ஆகும் காம்போனென்ட்களை அடையாளம் காணவும் உங்களை அனுமதிக்கிறது. React.Profiler API ஆனது குறிப்பிட்ட காம்போனென்ட்களின் ரெண்டர் நேரத்தை நிரல்ரீதியாக அளவிட உங்களை அனுமதிக்கிறது.

    உங்கள் பயன்பாட்டை ப்ரொஃபைலிங் செய்வதன் மூலம், மெமோயைசேஷனிலிருந்து அதிகப் பயனடையக்கூடிய காம்போனென்ட்களை நீங்கள் அடையாளம் காணலாம் மற்றும் React.memo உண்மையில் செயல்திறனை மேம்படுத்துகிறதா என்பதை உறுதிப்படுத்தலாம்.

    முடிவுரை

    React.memo என்பது ரியாக்ட் காம்போனென்ட் செயல்திறனை மேம்படுத்துவதற்கான ஒரு சக்திவாய்ந்த கருவியாகும். தேவையற்ற மறு-ரெண்டர்களைத் தடுப்பதன் மூலம், இது உங்கள் பயன்பாடுகளின் வேகத்தையும் பதிலளிக்கும் தன்மையையும் மேம்படுத்தி, சிறந்த பயனர் அனுபவத்திற்கு வழிவகுக்கும். இருப்பினும், React.memo-ஐ விவேகமாகப் பயன்படுத்துவதும், அது உண்மையில் செயல்திறனை மேம்படுத்துகிறதா என்பதை உறுதிப்படுத்த உங்கள் பயன்பாட்டை ப்ரொஃபைல் செய்வதும் முக்கியம்.

    இந்த வலைப்பதிவில் விவாதிக்கப்பட்ட கருத்துகள் மற்றும் நுட்பங்களைப் புரிந்துகொள்வதன் மூலம், உலகளாவிய பார்வையாளர்களுக்காக உயர் செயல்திறன் கொண்ட ரியாக்ட் பயன்பாடுகளை உருவாக்க React.memo மற்றும் தொடர்புடைய நுட்பங்களை நீங்கள் திறம்பட பயன்படுத்தலாம், உங்கள் பயன்பாடுகள் உலகெங்கிலும் உள்ள பயனர்களுக்கு வேகமாகவும் பதிலளிக்கக்கூடியதாகவும் இருப்பதை உறுதிசெய்யலாம்.

    உங்கள் ரியாக்ட் பயன்பாடுகளை மேம்படுத்தும்போது நெட்வொர்க் தாமதம் மற்றும் சாதனத் திறன்கள் போன்ற உலகளாவிய காரணிகளைக் கருத்தில் கொள்ள நினைவில் கொள்ளுங்கள். செயல்திறன் மற்றும் அணுகல்தன்மையில் கவனம் செலுத்துவதன் மூலம், இருப்பிடம் அல்லது சாதனத்தைப் பொருட்படுத்தாமல் அனைத்து பயனர்களுக்கும் சிறந்த அனுபவத்தை வழங்கும் பயன்பாடுகளை நீங்கள் உருவாக்கலாம்.

    மேலும் படிக்க மற்றும் ஆதாரங்கள்