Optistream એ તેના એક હજાર જાહેર (public) પેજ માટે SEO ગુમાવ્યા વિના બાર કસ્ટમ WordPress plugins ને સિંગલ કોડબેઝમાં ભેગા કર્યા.
મર્જ (merge) કેમ મહત્વનું હતું
એક સામાન્ય WordPress સાઇટમાં થોડાક plugins હોય છે; જ્યારે મોટી સાઇટ વાયરોથી ભરેલી વર્કશોપ જેવી લાગે છે, જેમાં દરેક વાયર ચાલુ હોય છે પણ કોઈને પણ અનપ્લગ (unplug) કરવો સરળ નથી હોતો. Optistream ની સાઇટ પર બાર Bespoke plugins ચાલતા હતા જે સ્ટ્રીમર પ્રોફાઇલ્સ, esports ટીમો અને ગેમ ડેટાનું સંચાલન કરતા હતા. આ plugins દ્વારા એક હજાર ઇન્ડેક્સ કરી શકાય તેવા (indexable) પેજ બનતા હતા. તે URLs ને અકબંધ રાખવા અનિવાર્ય હતું—કોઈપણ ફેરફાર માઇગ્રેશનને નિષ્ફળ બનાવી શકતો હતો.
જૂની સેટઅપ કેવી દેખાતી હતી
બાર plugins માંથી દરેક પોતાના અલગ ફોલ્ડરમાં રહેતા હતા, પોતાનો અલગ custom post type રજિસ્ટર કરતા હતા, અને WordPress માં અલગ-અલગ પોઈન્ટ્સ પર હૂક (hook) થતા હતા. સમસ્યાઓ વધતી ગઈ:
- Hooks અને assets વિખરાયેલા હતા, જેના કારણે કયો કોડ ક્યારે ચાલશે તે અનુમાન લગાવવું મુશ્કેલ હતું.
- Routing logic અનેક અલગ ફાઇલોમાં હતું, તેથી એક જ URL પર અનેક plugins ની અસર થઈ શકતી હતી.
- CSS ફાઇલો અણધાર્યા ક્રમમાં લોડ થતી હતી, જેના કારણે સ્ટાઇલ ક્લેશ (style clashes) થતા હતા.
- Debugging માટે બાર અલગ-અલગ ડિરેક્ટરીઓ ખોલવી પડતી હતી, જે કોઈપણ ડેવલપર માટે સમયનો બગાડ હતો.
ધ્યેય ફાઇલની સંખ્યા ઘટાડવાનો નહોતો; પરંતુ સમગ્ર સિસ્ટમને એક સિંગલ લાઇફસાયકલ (lifecycle) અને ડિપેન્ડન્સીઝ (dependencies) મેનેજ કરવા માટે એક જ જગ્યા આપવાનો હતો.
માઇગ્રેશન કેવી રીતે આયોજિત કરવામાં આવ્યું હતું
ટીમે પબ્લિક ઇન્ટરફેસ—URLs, templates અને meta data—ને એક એવા કરાર (contract) તરીકે જોયું જે તોડી શકાય તેમ નહોતો. ફ્રન્ટ એન્ડ પર કંઈ પણ બદલાય તો તેને નિષ્ફળતા માનવામાં આવતી. આ નિયમને ધ્યાનમાં રાખીને, તેમણે દરેક સ્ટેપ પછી ચલાવવા માટે એક ચેકલિસ્ટ તૈયાર કર્યું.
1. પબ્લિક કોન્ટ્રાક્ટ્સની યાદી બનાવો
દરેક URL પાથ તેના post type, rewrite slug, template file અને તેના પર આધારિત meta keys સાથે લખવામાં આવ્યો હતો. આ સ્પ્રેડશીટ નિયમનિયક (rulebook) બની ગઈ: જો કોઈ મોડ્યુલ ખસેડ્યા પછી URL બદલાય, તો માઇગ્રેશન રોલબેક (roll back) કરી દેવામાં આવતું.
2. એક સરળ લોડર બનાવો
એક નાની bootstrap ફાઇલ બનાવવામાં આવી હતી. દરેક અગાઉના plugin હવે એક અનુમાનિત ફંક્શન નામ દ્વારા સિંગલ “content domain” રજિસ્ટર કરે છે. લોડર કંઈ ખાસ જટિલ કામ નથી કરતું—જ્યારે જરૂર હોય ત્યારે WordPress માં સાચું મોડ્યુલ ખેંચવા માટે પૂરતું છે. સરળતા નિષ્ફળતાઓને સ્પષ્ટ બનાવે છે.
3. ડેટાનું રક્ષણ કરો
Meta keys નું નામ બદલવાથી કોડ ફેરફાર ડેટા માઇગ્રેશનમાં ફેરવાઈ જાત, જેનાથી બિનજરૂરી જોખમ વધત. જૂની keys અકબંધ રાખવામાં આવી; નવી હેલ્પર ફંક્શન્સ તેને વરે છે (wrap કરે છે), જેનાથી ડેટાબેઝ સ્કીમા સ્થિર રહે છે.
4. CSS ઓનરશિપ ઠીક કરો
સ્ટાઇલિંગ સંઘર્ષોને ત્રણ પગલાં દ્વારા ઉકેલવામાં આવ્યા હતા:
- મોડ્યુલ CSS ફાઇલોને હાઈ પ્રાયોરિટી સાથે enqueued કરવામાં આવે છે જેથી તે છેલ્લે લોડ થાય.
- તમામ સિલેક્ટર્સ (selectors) દરેક મોડ્યુલ માટે એક યુનિક રેપર ક્લાસ (wrapper class) સુધી સીમિત (scoped) રાખવામાં આવ્યા છે.
- જો સ્ટાઇલશીટ બદલાય તો બ્રાઉઝર કેશ (cache) ક્લિયર કરવા માટે enqueuing વખતે
filemtime()નો ઉપયોગ કરવામાં આવે છે.
5. સેફ લૂપનો ઉપયોગ કરો
માઇગ્રેશન એક સમયે એક મોડ્યુલ પ્રમાણે આગળ વધ્યું. એક મોડ્યુલ ખસેડ્યા પછી, ટીમે બીજા મોડ્યુલને અડતા પહેલા post-type રજિસ્ટ્રેશન, રાઉટિંગ અને મોબાઈલ લેઆઉટની ચકાસણી કરી. મૂળ plugins ઇન્સ્ટોલ કરેલા પણ ઇનએક્ટિવ (inactive) રહ્યા, જે ઇન્સ્ટન્ટ રોલબેક પાથ પૂરો પાડતા હતા.
પ્રોડક્શન ચેકલિસ્ટ
દરેક મોડ્યુલ બદલ્યા પછી ટીમે ચકાસણી કરી:
- દરેક content-type URL 200 HTTP સ્ટેટસ રિટર્ન કરે છે.
- કેનોનિકલ (canonical) URL હેડર મૂળ URL સાથે મેચ થાય છે.
- પેજ ટાઇટલ અને meta descriptions બદલાયા નથી.
- બધી ઈમેજ બ્રોકન લિંક્સ વગર લોડ થાય છે.
- મોબાઈલ સ્ક્રીન પર કોઈ હોરિઝોન્ટલ ઓવરફ્લો (horizontal overflow) દેખાતો નથી.
- બ્રાઉઝર કન્સોલમાં શૂન્ય JavaScript અથવા CSS એરર દેખાય છે.
જ્યારે ચેકલિસ્ટ ક્લિયર થયું ત્યારે જ ટીમે જૂના plugin ને કાયમી ધોરણે ડિએક્ટિવેટ કર્યું.
નવું plugin શું પ્રદાન કરે છે
પરિણામી સિંગલ plugin કોડબેઝને નાનો નથી કરતું; તે ફક્ત સીમાઓને (boundaries) દૃશ્યમાન બનાવે છે. બાર તમામ ફંક્શનલ એરિયા હવે એક લાઇફસાયકલ, એક હૂક્સ સેટ અને ડિપેન્ડન્સીઝ મેનેજ કરવા માટે એક જ જગ્યા શેર કરે છે. નવા plugin એ સિસ્ટમને નાની બનાવી નથી, પરંતુ તેની સીમાઓને સ્પષ્ટ બનાવી છે. તે ઓછા plugins હોવા કરતાં વધુ ઉપયોગી સાબિત થયું.
જોખમો અને વિરોધ પક્ષના તર્ક
Optistream નો કિસ્સો દર્શાવે છે કે શિસ્તબદ્ધ 'કોન્ટ્રાક્ટ-ફર્સ્ટ' અભિગમ અને સ્ટેપ-બાય-સ્ટેપ રોલઆઉટ જોખમોને નિયંત્રણમાં રાખી શકે છે.
આગળ શું ધ્યાન રાખવું
જો તમે સમાન એકીકરણ (consolidation) વિશે વિચારી રહ્યા હોવ, તો આ બે સ્તંભોથી શરૂઆત કરો:
- URL સ્ટેબિલિટી – કોડની એક લાઇન લખતા પહેલા દરેક પબ્લિક પાથને મેપ કરો.
- ડેટા સ્ટેબિલિટી – જ્યાં સુધી તમે સંપૂર્ણ માઇગ્રેશન માટે તૈયાર ન હોવ ત્યાં સુધી ડેટાબેઝ ફીલ્ડ્સનું નામ બદલવાનું ટાળો.
ત્યાંથી, એક નાનું લોડર બનાવો, CSS ને સ્કોપ્ડ (scoped) રાખો, અને કડક પ્રોડક્શન ચેકલિસ્ટ ચલાવતા એક સમયે એક મોડ્યુલ ખસેડો.
