7 છુપાયેલા JavaScript Bottlenecks અને તેને કેવી રીતે સુધારવા
ધીમી વેબ એપ્સ ભાગ્યે જ ખરાબ અલ્ગોરિધમ્સને કારણે નિષ્ફળ જાય છે. તેઓ તમારા કોડ બ્રાઉઝર સાથે કેવી રીતે વાત કરે છે તેના કારણે નિષ્ફળ જાય છે.
મેં 300 પ્રોડક્શન એપ્લિકેશન્સનું પ્રોફાઇલિંગ કર્યું. 73% પરફોર્મન્સ સમસ્યાઓ આ 7 સ્ત્રોતોમાંથી આવે છે.
- Layout thrashing આ ત્યારે થાય છે જ્યારે તમે કોઈ પ્રોપર્ટી વાંચો છો, DOM માં લખો છો, અને ફરીથી વાંચો છો. આ બ્રાઉઝરને વારંવાર લેઆઉટ ફરીથી ગણતરી કરવા માટે મજબૂર કરે છે.
- સુધારો: પહેલા બધી રીડ્સ (reads) ને બેચ કરો. પછી requestAnimationFrame નો ઉપયોગ કરીને બધી રાઈટ્સ (writes) ને બેચ કરો.
- Unbounded event listeners ઇવેન્ટ લિસનર ઉમેર્યા પછી તેને દૂર કર્યા વગર રાખવાથી મેમરી લીક (memory leaks) થાય છે. સિંગલ-પેજ એપ્સમાં આ એક મોટી સમસ્યા છે.
- સુધારો: જ્યારે કમ્પોનન્ટ્સ અનમાઉન્ટ (unmount) થાય ત્યારે લિસનર્સને સાફ કરવા માટે AbortController નો ઉપયોગ કરો.
- Synchronous DOM reads in loops લૂપની અંદર offsetWidth અથવા getBoundingClientRect વાંચવાથી સતત reflows થાય છે.
- સુધારો: લૂપ શરૂ કરતા પહેલા લેઆઉટ વેલ્યુઝને વેરિયેબલમાં કેશ (cache) કરો.
- Missing requestAnimationFrame batching સ્ક્રોલ અથવા રિસાઇઝ ઇવેન્ટ્સ પર સીધા DOM ફેરફારો વારંવાર થાય છે. આનાથી jank થાય છે.
- સુધારો: પેઇન્ટ સાયકલ (paint cycle) સાથે અપડેટ્સને સિંક કરવા માટે એક ticking variable અને requestAnimationFrame નો ઉપયોગ કરો.
- Large JSON.parse payloads મોટી ફાઇલોનું પાર્સિંગ મેઇન થ્રેડને બ્લોક કરે છે. આના કારણે ઇનપુટ લેગ (input lag) થાય છે.
- સુધારો: મેઇન થ્રેડની બહાર ડેટા પાર્સ કરવા માટે Web Workers નો ઉપયોગ કરો.
- Complex CSS selector matching ઊંડા પ્રમાણમાં નેસ્ટેડ અથવા જટિલ સિલેક્ટર્સ સ્ટાઇલ રીકેલ્ક્યુલેશનને ધીમું પાડે છે.
- સુધારો: લેઆઉટ શિફ્ટ શોધવા અને તમારા સિલેક્ટર્સને સરળ બનાવવા માટે Lighthouse નો ઉપયોગ કરો.
- Duplicate bundle chunks મોટા, અનોપ્ટિમાઇઝ્ડ બંડલ્સ ટ્રાન્સફર સમયનો બગાડ કરે છે.
- સુધારો: ડુપ્લીકેટ કોડ શોધવા અને દૂર કરવા માટે webpack-bundle-analyzer નો ઉપયોગ કરો.
તમારી પ્રગતિ કેવી રીતે માપવી:
- Chrome DevTools ખોલો.
- Performance ટેબ પર જાઓ.
- 5-સેકન્ડનું સેશન રેકોર્ડ કરો.
- Main flame chart માં 50ms થી વધુ લાંબા કાર્યો શોધો.
- એક સુધારો લાગુ કરો અને Rendering અને Painting સમયની તુલના કરો.
આ ક્ષેત્રોમાં સુધારો કરવાથી તમારા Core Web Vitals, ખાસ કરીને Largest Contentful Paint અને Interaction to Next Paint માં સુધારો થશે.