𝗕𝗲𝘆𝗼𝗻𝗱 𝗠𝗶𝘀𝘀𝗶𝗻𝗴 𝗘𝘅𝗽𝗼𝗿𝘁𝘀: 𝗕𝘂𝗶𝗹𝗱𝗶𝗻𝗴 𝗮𝗻 𝗘𝗮𝗿𝗹𝘆 𝗚𝗮𝗿𝗯𝗮𝗴𝗲 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗼𝗿
મેં Webpack ડોક્યુમેન્ટેશનમાં મિસિંગ લિંક્સને ઠીક કરવા માટે એક સ્ટાન્ડર્ડ પ્લગઈનનો ઉપયોગ કરવાનો પ્રયાસ કર્યો. તે નિષ્ફળ ગયું.
મોટા કોડબેઝમાં પ્લગઈન ઇન્ટિગ્રેટ કરવું એ સરળ કામ નથી. તે એક આર્કિટેક્ચરલ પડકાર બની ગયું. મારે Abstract Syntax Tree (AST) મેનિપ્યુલેશન, મેમરીનો ઉપયોગ અને રિકર્સિવ લૂપ્સનું સંચાલન કરવું પડ્યું.
સ્ટાન્ડર્ડ પ્લગઈન્સ સાથેની સમસ્યા
ઉકેલ શોધવા માટે મેં ત્રણ પ્રયોગો કર્યા.
પ્રયોગ ૧: પ્લગઈને ૧૩૫ પ્રકારો (types) રિકવર કર્યા. જોકે, તેણે તેમને એક ઇન્ટરનલ મોડ્યુલમાં મૂકી દીધા. અમારા ટૂલે તેમના માટે એક અલગ ફોલ્ડર બનાવ્યું. અમારે તેમને મેન્યુઅલી સોર્ટ કરવા પડ્યા. ડોક્યુમેન્ટેશન પણ માળખાગત રીતે ખોટું હતું.
પ્રયોગ ૨: મેં એક્સટર્નલ પ્રકારોને છુપાવવા માટે એક સેટિંગ ચાલુ કર્યું. આ અમુક બાબતો માટે કામ કરી ગયું. તેણે પેલોડ ઘટાડીને 60 Webpack પ્રકારો કરી દીધા. પરંતુ TypeDoc એ નેસ્ટેડ ડિપેન્ડન્સીઝને અવગણી. તેના કારણે ઘણા પ્રકારો છુપાયેલા રહી ગયા જ્યારે તેઓ હજુ પણ મેમરીનો ઉપયોગ કરી રહ્યા હતા.
પ્રયોગ ૩: મેં પ્રકારોને તેમના મૂળ મોડ્યુલ્સ સાથે ફરીથી મેપ કરવાનો પ્રયાસ કર્યો. આના કારણે રિકર્સિવ લૂપ સર્જાયું. પ્લગઈન સતત નેસ્ટેડ ઇન્ટરફેસને એક્સટ્રેક્ટ કરતું રહ્યું જ્યાં સુધી તેણે 630 પ્રકારો બનાવ્યા નહીં. ડોક્યુમેન્ટેશન 'નોઈઝ' (noise) થી ભરાઈ ગયું હતું. તેણે યુઝર એક્સપિરિયન્સ બગાડી નાખ્યો.
ઉકેલ: અર્લી ગાર્બેજ કલેક્શન
મારે વધારાના નોઈઝ વગર પ્રકારો તેમના સાચા મોડ્યુલ્સમાં જોઈતા હતા. મેં આઉટપુટને ઠીક કરવાનો પ્રયાસ કરવાનું છોડી દીધું અને પ્રક્રિયાને (process) ઠીક કરવાનું શરૂ કર્યું.
મેં EVENT_RESOLVE_END નામનું એક હૂક વાપર્યું. આનાથી મને રિઝોલ્યુશન પછી તરત જ AST ને ઇન્ટરસેપ્ટ કરવાની મંજૂરી મળી. મેં TypeDoc કેટેગરીઝ અસાઇન કરે અથવા વધુ મેમરી વાપરે તે પહેલાં આ કર્યું.
મારું લોજિક ત્રણ સ્ટેપ્સ અનુસરે છે:
- AST માં ઇન્ટરનલ મોડ્યુલ શોધો.
- કસ્ટમ યુટિલિટીનો ઉપયોગ કરીને દરેક નોડ તપાસો.
- નોઈઝ ડિલીટ કરો. મેં ૩૦૦ બિનજરૂરી નોડ્સને તરત જ ડિલીટ કરવા માટે
project.removeReflectionનો ઉપયોગ કર્યો. આનાથી Node.js ને મેમરી ફ્રી કરવામાં મદદ મળી. - મહત્વના પ્રકારોને ખસેડો. મેં બાકીના ૩૦૦ પ્રકારોને રૂટ સ્કોપમાં મર્જ કર્યા.
પરિણામ: મેં ૨૪૦ મહત્વપૂર્ણ પ્રકારો બચાવ્યા. તેઓ હવે દેખાય છે અને યોગ્ય રીતે રૂટ થયેલા છે. મેં ત્રીજા પ્રયોગના રિકર્સિવ નોઈઝથી બચાવ મેળવ્યો.
શીખવા મળેલા પાઠ
• AST ને વહેલા હેન્ડલ કરો. બિનજરૂરી નોડ્સ દૂર કરવાથી પછીથી મેમરીનો બગાડ અટકાવી શકાય છે. • હેક્સ (hacks) ને બદલે હૂક્સનો ઉપયોગ કરો. કમ્પાઈલર લાઇફસાયકલને સમજવાથી સ્વચ્છ કામ કરી શકાય છે. • ફીડબેક આર્કિટેક્ચરને સુધારે છે. મેન્ટેનર રિવ્યુઝે મને વધુ સારી સિસ્ટમ બનાવવામાં મદદ કરી. • વધુ ડેટા એટલે વધુ સારું નહીં. સારી એન્જિનિયરિંગનો અર્થ ડેટા અને ઉપયોગિતા (usability) વચ્ચે સંતુલન શોધવાનો છે.