રિએક્ટ પરફોર્મન્સ ઓપ્ટિમાઇઝેશન: બંડલ સાઇઝ ઘટાડવામાં નિપુણતા | MLOG | MLOG

આ ઉદાહરણમાં દરેક રૂટ તેના સંબંધિત કમ્પોનન્ટને આળસથી લોડ કરે છે, જે એપ્લિકેશનના પ્રારંભિક લોડ સમયમાં સુધારો કરે છે.

2. ટ્રી શેકિંગ (Tree Shaking)

ટ્રી શેકિંગ એ એક એવી ટેકનિક છે જે તમારી એપ્લિકેશનમાંથી ડેડ કોડને દૂર કરે છે. ડેડ કોડ એ કોડનો ઉલ્લેખ કરે છે જેનો તમારી એપ્લિકેશનમાં ક્યારેય ઉપયોગ થતો નથી, પરંતુ હજી પણ બંડલમાં શામેલ છે. આ ઘણીવાર ત્યારે થાય છે જ્યારે તમે આખી લાઇબ્રેરીઓ આયાત કરો છો પરંતુ તેમની કાર્યક્ષમતાનો માત્ર એક નાનો ભાગ જ વાપરો છો.

વેબપેક અને રોલઅપ જેવા આધુનિક જાવાસ્ક્રિપ્ટ બંડલર્સ આપમેળે ટ્રી શેકિંગ કરી શકે છે. ટ્રી શેકિંગ અસરકારક રીતે કાર્ય કરે તે સુનિશ્ચિત કરવા માટે, કોમનજેએસ (require સિન્ટેક્સ) ને બદલે ES મોડ્યુલ્સ (import અને export સિન્ટેક્સ) નો ઉપયોગ કરવો મહત્વપૂર્ણ છે. ES મોડ્યુલ્સ બંડલરને તમારા કોડનું સ્થિર રીતે વિશ્લેષણ કરવાની અને કયા નિકાસોનો ખરેખર ઉપયોગ થાય છે તે નિર્ધારિત કરવાની મંજૂરી આપે છે.

ઉદાહરણ:

ચાલો કહીએ કે તમે lodash નામની યુટિલિટી લાઇબ્રેરીનો ઉપયોગ કરી રહ્યાં છો. આખી લાઇબ્રેરી આયાત કરવાને બદલે:

            import _ from 'lodash';

_.map([1, 2, 3], (n) => n * 2);
            

તમારે ફક્ત જરૂરી કાર્યો જ આયાત કરો:

            import map from 'lodash/map';

map([1, 2, 3], (n) => n * 2);
            

આ સુનિશ્ચિત કરે છે કે ફક્ત map ફંક્શન તમારા બંડલમાં શામેલ છે, જે તેના કદમાં નોંધપાત્ર ઘટાડો કરે છે.

3. ડાયનેમિક ઇમ્પોર્ટ્સ (Dynamic Imports)

React.lazy() ની જેમ, ડાયનેમિક ઇમ્પોર્ટ્સ (import() સિન્ટેક્સનો ઉપયોગ કરીને) તમને માંગ પર મોડ્યુલો લોડ કરવાની મંજૂરી આપે છે. આ મોટી લાઇબ્રેરીઓ અથવા કમ્પોનન્ટ લોડ કરવા માટે ઉપયોગી થઈ શકે છે જે ફક્ત વિશિષ્ટ પરિસ્થિતિઓમાં જ જરૂરી છે.

ઉદાહરણ:

            async function handleClick() {
  const module = await import('./MyLargeComponent');
  const MyLargeComponent = module.default;
  // Use MyLargeComponent
}

            

આ ઉદાહરણમાં, MyLargeComponent ફક્ત ત્યારે જ લોડ થશે જ્યારે handleClick ફંક્શનને કૉલ કરવામાં આવે છે, સામાન્ય રીતે વપરાશકર્તાની ક્રિયાના પ્રતિભાવમાં.

4. મિનિફિકેશન અને કમ્પ્રેશન

મિનિફિકેશન તમારા કોડમાંથી બિનજરૂરી અક્ષરોને દૂર કરે છે, જેમ કે વ્હાઇટસ્પેસ, ટિપ્પણીઓ અને નહિ વપરાયેલ વેરિયેબલ્સ. કમ્પ્રેશન એવા અલ્ગોરિધમ્સ લાગુ કરીને તમારા કોડનું કદ ઘટાડે છે જે પેટર્ન શોધે છે અને તેમને વધુ અસરકારક રીતે રજૂ કરે છે.

વેબપેક, પાર્સલ અને રોલઅપ જેવા મોટાભાગના આધુનિક બિલ્ડ ટૂલ્સમાં મિનિફિકેશન અને કમ્પ્રેશન માટે બિલ્ટ-ઇન સપોર્ટ શામેલ છે. ઉદાહરણ તરીકે, વેબપેક મિનિફિકેશન માટે ટર્સર (Terser) નો ઉપયોગ કરે છે અને કમ્પ્રેશન માટે Gzip અથવા Brotli નો ઉપયોગ કરવા માટે રૂપરેખાંકિત કરી શકાય છે.

ઉદાહરણ (વેબપેક કન્ફિગરેશન):

            const TerserPlugin = require('terser-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
  // ...
  optimization: {
    minimize: true,
    minimizer: [new TerserPlugin()],
  },
  plugins: [
    new CompressionPlugin({
      algorithm: 'gzip',
      test: /\.(js|css)$/,
      threshold: 10240,
      minRatio: 0.8,
    }),
  ],
};

            

આ કન્ફિગરેશન ટર્સરનો ઉપયોગ કરીને મિનિફિકેશન અને Gzip નો ઉપયોગ કરીને કમ્પ્રેશનને સક્ષમ કરે છે. threshold વિકલ્પ ફાઇલને સંકુચિત કરવા માટે ન્યૂનતમ કદ (બાઇટ્સમાં) સ્પષ્ટ કરે છે.

5. છબી ઓપ્ટિમાઇઝેશન

છબીઓ ઘણીવાર તમારી એપ્લિકેશનના બંડલ કદમાં નોંધપાત્ર ફાળો આપી શકે છે. તમારી છબીઓને ઓપ્ટિમાઇઝ કરવાથી પ્રદર્શનમાં નાટકીય રીતે સુધારો થઈ શકે છે.

છબી ઓપ્ટિમાઇઝેશન માટેની ટેકનિક:

6. લાઇબ્રેરીઓ સમજદારીપૂર્વક પસંદ કરો

તમે તમારી એપ્લિકેશનમાં ઉપયોગ કરો છો તે લાઇબ્રેરીઓનું કાળજીપૂર્વક મૂલ્યાંકન કરો. કેટલીક લાઇબ્રેરીઓ ખૂબ મોટી હોઈ શકે છે, ભલે તમે તેમની કાર્યક્ષમતાનો માત્ર એક નાનો ભાગ જ વાપરો. નાની, વધુ કેન્દ્રિત લાઇબ્રેરીઓનો ઉપયોગ કરવાનું વિચારો જે ફક્ત તમને જોઈતી સુવિધાઓ પ્રદાન કરે છે.

ઉદાહરણ:

Moment.js જેવી મોટી તારીખ ફોર્મેટિંગ લાઇબ્રેરીનો ઉપયોગ કરવાને બદલે, date-fns અથવા Day.js જેવા નાના વિકલ્પોનો ઉપયોગ કરવાનું વિચારો. આ લાઇબ્રેરીઓ નોંધપાત્ર રીતે નાની છે અને સમાન કાર્યક્ષમતા પૂરી પાડે છે.

બંડલ સાઇઝની સરખામણી:

7. HTTP/2

HTTP/2 એ HTTP પ્રોટોકોલનું એક નવું સંસ્કરણ છે જે HTTP/1.1 કરતાં ઘણા પ્રદર્શન સુધારાઓ પ્રદાન કરે છે, જેમાં શામેલ છે:

તમારા સર્વર પર HTTP/2 સક્ષમ કરવાથી તમારી રિએક્ટ એપ્લિકેશનના પ્રદર્શનમાં નોંધપાત્ર સુધારો થઈ શકે છે, ખાસ કરીને જ્યારે ઘણી નાની ફાઇલો સાથે કામ કરતી વખતે. મોટાભાગના આધુનિક વેબ સર્વર્સ અને CDNs HTTP/2 ને સપોર્ટ કરે છે.

8. બ્રાઉઝર કેશિંગ

બ્રાઉઝર કેશિંગ બ્રાઉઝર્સને સ્થિર અસ્કયામતો (જેમ કે છબીઓ, જાવાસ્ક્રિપ્ટ ફાઇલો અને CSS ફાઇલો) ને સ્થાનિક રીતે સંગ્રહિત કરવાની મંજૂરી આપે છે. જ્યારે કોઈ વપરાશકર્તા તમારી એપ્લિકેશનની ફરી મુલાકાત લે છે, ત્યારે બ્રાઉઝર આ અસ્કયામતોને ફરીથી ડાઉનલોડ કરવાને બદલે કેશમાંથી મેળવી શકે છે, જે લોડ સમયમાં નોંધપાત્ર ઘટાડો કરે છે.

તમારી સ્થિર અસ્કયામતો માટે યોગ્ય કેશ હેડર સેટ કરવા માટે તમારા સર્વરને રૂપરેખાંકિત કરો. Cache-Control હેડર સૌથી મહત્વપૂર્ણ છે. તે તમને સ્પષ્ટ કરવાની મંજૂરી આપે છે કે બ્રાઉઝરે કોઈ અસ્કયામતને કેટલા સમય માટે કેશ કરવી જોઈએ.

ઉદાહરણ:

            Cache-Control: public, max-age=31536000
            

આ હેડર બ્રાઉઝરને એક વર્ષ માટે અસ્કયામતને કેશ કરવાનું કહે છે.

9. સર્વર-સાઇડ રેન્ડરિંગ (SSR)

સર્વર-સાઇડ રેન્ડરિંગ (SSR) માં તમારા રિએક્ટ કમ્પોનન્ટને સર્વર પર રેન્ડર કરવું અને પ્રારંભિક HTML ક્લાયંટને મોકલવું શામેલ છે. આ પ્રારંભિક લોડ સમય અને SEO માં સુધારો કરી શકે છે, કારણ કે સર્ચ એન્જિન HTML સામગ્રીને સરળતાથી ક્રોલ કરી શકે છે.

Next.js અને Gatsby જેવા ફ્રેમવર્ક તમારી રિએક્ટ એપ્લિકેશન્સમાં SSR લાગુ કરવાનું સરળ બનાવે છે.

SSR ના લાભો:

  • સુધારેલ પ્રારંભિક લોડ સમય: બ્રાઉઝર પૂર્વ-રેન્ડર કરેલ HTML મેળવે છે, જે તેને સામગ્રીને ઝડપથી પ્રદર્શિત કરવાની મંજૂરી આપે છે.
  • વધુ સારું SEO: સર્ચ એન્જિન HTML સામગ્રીને સરળતાથી ક્રોલ કરી શકે છે, જે તમારી એપ્લિકેશનની સર્ચ એન્જિન રેન્કિંગમાં સુધારો કરે છે.
  • વધારેલ વપરાશકર્તા અનુભવ: વપરાશકર્તાઓ સામગ્રીને ઝડપથી જુએ છે, જે વધુ આકર્ષક અનુભવ તરફ દોરી જાય છે.
  • 10. મેમોઇઝેશન (Memoization)

    મેમોઇઝેશન એ મોંઘા ફંક્શન કૉલ્સના પરિણામોને કેશ કરવાની અને જ્યારે સમાન ઇનપુટ્સ ફરીથી આવે ત્યારે તેનો પુનઃઉપયોગ કરવાની એક તકનીક છે. રિએક્ટમાં, તમે ફંક્શનલ કમ્પોનન્ટને મેમોઇઝ કરવા માટે React.memo() હાયર-ઓર્ડર કમ્પોનન્ટનો ઉપયોગ કરી શકો છો. આ કમ્પોનન્ટના પ્રોપ્સ બદલાયા ન હોય ત્યારે બિનજરૂરી રી-રેન્ડર્સને અટકાવે છે.

    ઉદાહરણ:

                import React from 'react';
    
    const MyComponent = React.memo(function MyComponent(props) {
      // Render component
      return 
    {props.data}
    ; }); export default MyComponent;

    આ ઉદાહરણમાં, MyComponent ફક્ત ત્યારે જ રી-રેન્ડર થશે જો props.data પ્રોપ બદલાશે. જો તમને કમ્પોનન્ટ ક્યારે રી-રેન્ડર થવું જોઈએ તેના પર વધુ નિયંત્રણની જરૂર હોય તો તમે React.memo() ને કસ્ટમ સરખામણી ફંક્શન પણ પ્રદાન કરી શકો છો.

    વાસ્તવિક-વિશ્વના ઉદાહરણો અને આંતરરાષ્ટ્રીય વિચારણાઓ

    બંડલ સાઇઝ ઘટાડવાના સિદ્ધાંતો સાર્વત્રિક છે, પરંતુ તેમનો અમલ તમારા પ્રોજેક્ટના વિશિષ્ટ સંદર્ભ અને લક્ષ્ય પ્રેક્ષકોના આધારે બદલાઈ શકે છે. અહીં કેટલાક ઉદાહરણો છે:

    સાધનો અને સંસાધનો

    બંડલ સાઇઝ ઘટાડવા માટે અહીં કેટલાક મદદરૂપ સાધનો અને સંસાધનો છે:

    નિષ્કર્ષ

    બંડલનું કદ ઘટાડવું એ એક ચાલુ પ્રક્રિયા છે જેમાં વિગતો પર કાળજીપૂર્વક ધ્યાન આપવાની જરૂર છે. આ માર્ગદર્શિકામાં દર્શાવેલ તકનીકોને લાગુ કરીને, તમે તમારી રિએક્ટ એપ્લિકેશનના પ્રદર્શનમાં નોંધપાત્ર સુધારો કરી શકો છો અને વધુ સારો વપરાશકર્તા અનુભવ પ્રદાન કરી શકો છો. તમારા બંડલના કદનું નિયમિતપણે વિશ્લેષણ કરવાનું અને ઓપ્ટિમાઇઝેશન માટેના ક્ષેત્રોને ઓળખવાનું યાદ રાખો. નાના બંડલના લાભો - ઝડપી લોડ સમય, સુધારેલ વપરાશકર્તા જોડાણ અને એકંદરે બહેતર અનુભવ - પ્રયત્નોને સાર્થક કરે છે.

    જેમ જેમ વેબ ડેવલપમેન્ટ પ્રથાઓ વિકસિત થતી રહે છે, તેમ તેમ બંડલ સાઇઝ ઘટાડવા માટેની નવીનતમ તકનીકો અને સાધનો સાથે અપ-ટુ-ડેટ રહેવું એ ઉચ્ચ-પ્રદર્શનવાળી રિએક્ટ એપ્લિકેશન્સ બનાવવા માટે નિર્ણાયક છે જે વૈશ્વિક પ્રેક્ષકોની માંગને પહોંચી વળે.