വെബ്പാക്ക് 5-ലെ ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂൾ ഫെഡറേഷൻ ഉപയോഗിച്ച് മൈക്രോ-ഫ്രണ്ടെൻഡുകളുടെ ശക്തി പ്രയോജനപ്പെടുത്തുക. സ്കേലബിൾ, പരിപാലിക്കാൻ എളുപ്പമുള്ള, സ്വതന്ത്ര വെബ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ പഠിക്കുക.
വെബ്പാക്ക് 5 ഉപയോഗിച്ചുള്ള ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂൾ ഫെഡറേഷൻ: മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കുള്ള ഒരു സമഗ്ര ഗൈഡ്
നിരന്തരം മാറിക്കൊണ്ടിരിക്കുന്ന വെബ് ഡെവലപ്മെൻ്റ് ലോകത്ത്, വലുതും സങ്കീർണ്ണവുമായ ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുന്നത് ഒരു ശ്രമകരമായ ദൗത്യമാണ്. പരമ്പരാഗത മോണോലിത്തിക് ആർക്കിടെക്ചറുകൾ പലപ്പോഴും ഡെവലപ്മെൻ്റ് സമയം വർദ്ധിപ്പിക്കുന്നതിനും, ഡിപ്ലോയ്മെൻ്റ് തടസ്സങ്ങൾക്കും, കോഡിൻ്റെ ഗുണനിലവാരം നിലനിർത്തുന്നതിലെ വെല്ലുവിളികൾക്കും ഇടയാക്കുന്നു. ഈ വെല്ലുവിളികളെ അഭിമുഖീകരിക്കുന്നതിനുള്ള ഒരു ശക്തമായ ആർക്കിടെക്ചറൽ പാറ്റേണായി മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ ഉയർന്നുവന്നിട്ടുണ്ട്, ഇത് ടീമുകളെ ഒരു വലിയ വെബ് ആപ്ലിക്കേഷൻ്റെ സ്വതന്ത്ര ഭാഗങ്ങൾ നിർമ്മിക്കാനും വിന്യസിക്കാനും അനുവദിക്കുന്നു. വെബ്പാക്ക് 5-ൽ അവതരിപ്പിച്ച ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂൾ ഫെഡറേഷൻ ആണ് മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നടപ്പിലാക്കുന്നതിനുള്ള ഏറ്റവും പ്രതീക്ഷ നൽകുന്ന സാങ്കേതികവിദ്യകളിലൊന്ന്.
എന്താണ് മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ?
ഒരു ഫ്രണ്ടെൻഡ് ആപ്ലിക്കേഷനെ ചെറിയ, സ്വതന്ത്ര യൂണിറ്റുകളായി വിഭജിക്കുന്ന ഒരു ആർക്കിടെക്ചറൽ ശൈലിയാണ് മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ. ഈ യൂണിറ്റുകൾ വ്യത്യസ്ത ടീമുകൾക്ക് സ്വതന്ത്രമായി വികസിപ്പിക്കാനും, പരീക്ഷിക്കാനും, വിന്യസിക്കാനും കഴിയും. ഓരോ മൈക്രോ-ഫ്രണ്ടെൻഡും ഒരു പ്രത്യേക ബിസിനസ്സ് ഡൊമെയ്നിനോ ഫീച്ചറിനോ ഉത്തരവാദിയായിരിക്കും, അവയെല്ലാം റൺടൈമിൽ ഒരുമിച്ച് ചേർത്ത് സമ്പൂർണ്ണ യൂസർ ഇൻ്റർഫേസ് രൂപീകരിക്കുന്നു.
ഇതൊരു കമ്പനി പോലെ ചിന്തിക്കുക: ഒരു വലിയ ഡെവലപ്മെൻ്റ് ടീമിന് പകരം, പ്രത്യേക മേഖലകളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്ന ഒന്നിലധികം ചെറിയ ടീമുകൾ നിങ്ങൾക്കുണ്ട്. ഓരോ ടീമിനും സ്വതന്ത്രമായി പ്രവർത്തിക്കാൻ കഴിയും, ഇത് വേഗതയേറിയ ഡെവലപ്മെൻ്റ് സൈക്കിളുകൾക്കും എളുപ്പമുള്ള പരിപാലനത്തിനും അനുവദിക്കുന്നു. ആമസോൺ പോലുള്ള ഒരു വലിയ ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോം പരിഗണിക്കുക; ഉൽപ്പന്ന കാറ്റലോഗ്, ഷോപ്പിംഗ് കാർട്ട്, ചെക്ക്ഔട്ട് പ്രോസസ്സ്, ഉപയോക്തൃ അക്കൗണ്ട് മാനേജ്മെൻ്റ് എന്നിവ വ്യത്യസ്ത ടീമുകൾ കൈകാര്യം ചെയ്തേക്കാം. ഇവയെല്ലാം സ്വതന്ത്രമായ മൈക്രോ-ഫ്രണ്ടെൻഡുകളാകാം.
മൈക്രോ-ഫ്രണ്ടെൻഡുകളുടെ പ്രയോജനങ്ങൾ:
- സ്വതന്ത്ര വിന്യാസം: ആപ്ലിക്കേഷൻ്റെ മറ്റ് ഭാഗങ്ങളെ ബാധിക്കാതെ ടീമുകൾക്ക് അവരുടെ മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ സ്വതന്ത്രമായി വിന്യസിക്കാൻ കഴിയും. ഇത് വിന്യാസത്തിലെ അപകടസാധ്യത കുറയ്ക്കുകയും വേഗതയേറിയ റിലീസ് സൈക്കിളുകൾക്ക് അനുവദിക്കുകയും ചെയ്യുന്നു.
- സാങ്കേതികവിദ്യയുടെ കാര്യത്തിൽ നിഷ്പക്ഷത: വ്യത്യസ്ത മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ വ്യത്യസ്ത സാങ്കേതികവിദ്യകളോ ഫ്രെയിംവർക്കുകളോ (ഉദാ. റിയാക്റ്റ്, ആംഗുലർ, വ്യൂ.ജെഎസ്) ഉപയോഗിച്ച് നിർമ്മിക്കാൻ കഴിയും. ഇത് ടീമുകളെ അവരുടെ നിർദ്ദിഷ്ട ആവശ്യങ്ങൾക്ക് ഏറ്റവും മികച്ച സാങ്കേതികവിദ്യ തിരഞ്ഞെടുക്കാനും മുഴുവൻ ആപ്ലിക്കേഷനും മാറ്റിയെഴുതാതെ തന്നെ പുതിയ സാങ്കേതികവിദ്യകൾ ക്രമേണ സ്വീകരിക്കാനും അനുവദിക്കുന്നു. ഒരു ടീം ഉൽപ്പന്ന കാറ്റലോഗിനായി റിയാക്റ്റ് ഉപയോഗിക്കുന്നതും, മറ്റൊരു ടീം മാർക്കറ്റിംഗ് ലാൻഡിംഗ് പേജുകൾക്കായി വ്യൂ.ജെഎസ് ഉപയോഗിക്കുന്നതും, മൂന്നാമതൊരു ടീം ചെക്ക്ഔട്ട് പ്രോസസ്സിനായി ആംഗുലർ ഉപയോഗിക്കുന്നതും സങ്കൽപ്പിക്കുക.
- മെച്ചപ്പെട്ട ടീം സ്വയംഭരണം: ടീമുകൾക്ക് അവരുടെ മൈക്രോ-ഫ്രണ്ടെൻഡുകളിൽ പൂർണ്ണമായ ഉടമസ്ഥാവകാശം ഉണ്ട്, ഇത് സ്വയംഭരണം വർദ്ധിപ്പിക്കുന്നതിനും വേഗത്തിലുള്ള തീരുമാനമെടുക്കുന്നതിനും ഡെവലപ്പർമാരുടെ ഉൽപ്പാദനക്ഷമത മെച്ചപ്പെടുത്തുന്നതിനും ഇടയാക്കുന്നു.
- വർദ്ധിച്ച സ്കേലബിലിറ്റി: വ്യക്തിഗത മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ വ്യത്യസ്ത സെർവറുകളിൽ വിന്യസിച്ചുകൊണ്ട് നിങ്ങളുടെ ആപ്ലിക്കേഷൻ തിരശ്ചീനമായി സ്കെയിൽ ചെയ്യാൻ മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നിങ്ങളെ അനുവദിക്കുന്നു.
- കോഡ് പുനരുപയോഗം: പങ്കുവെച്ച കമ്പോണൻ്റുകളും ലൈബ്രറികളും മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കിടയിൽ എളുപ്പത്തിൽ പങ്കിടാൻ കഴിയും.
- പരിപാലിക്കാൻ എളുപ്പം: ചെറിയ കോഡ്ബേസുകൾ സാധാരണയായി മനസ്സിലാക്കാനും പരിപാലിക്കാനും ഡീബഗ് ചെയ്യാനും എളുപ്പമാണ്.
മൈക്രോ-ഫ്രണ്ടെൻഡുകളുടെ വെല്ലുവിളികൾ:
- വർദ്ധിച്ച സങ്കീർണ്ണത: ഒന്നിലധികം മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ കൈകാര്യം ചെയ്യുന്നത് മൊത്തത്തിലുള്ള ആർക്കിടെക്ചറിന് സങ്കീർണ്ണത വർദ്ധിപ്പിക്കും, പ്രത്യേകിച്ചും ആശയവിനിമയം, സ്റ്റേറ്റ് മാനേജ്മെൻ്റ്, വിന്യാസം എന്നിവയുടെ കാര്യത്തിൽ.
- പ്രകടനത്തിലെ ഓവർഹെഡ്: ഒന്നിലധികം മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ ലോഡ് ചെയ്യുന്നത് പ്രകടനത്തിൽ ഓവർഹെഡ് ഉണ്ടാക്കിയേക്കാം, പ്രത്യേകിച്ചും അവ ശരിയായി ഒപ്റ്റിമൈസ് ചെയ്തിട്ടില്ലെങ്കിൽ.
- ക്രോസ്-കട്ടിംഗ് കൺസേൺസ്: ആധികാരികത, അംഗീകാരം, തീമിംഗ് തുടങ്ങിയ ക്രോസ്-കട്ടിംഗ് കൺസേൺസ് കൈകാര്യം ചെയ്യുന്നത് ഒരു മൈക്രോ-ഫ്രണ്ടെൻഡ് ആർക്കിടെക്ചറിൽ വെല്ലുവിളിയാകാം.
- പ്രവർത്തനപരമായ ഓവർഹെഡ്: ഒന്നിലധികം മൈക്രോ-ഫ്രണ്ടെൻഡുകളുടെ വിന്യാസവും നിരീക്ഷണവും കൈകാര്യം ചെയ്യുന്നതിന് പക്വതയുള്ള DevOps രീതികളും ഇൻഫ്രാസ്ട്രക്ചറും ആവശ്യമാണ്.
എന്താണ് ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂൾ ഫെഡറേഷൻ?
ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂൾ ഫെഡറേഷൻ എന്നത് വെബ്പാക്ക് 5-ൻ്റെ ഒരു സവിശേഷതയാണ്, ഇത് റൺടൈമിൽ വെവ്വേറെ കംപൈൽ ചെയ്ത ജാവാസ്ക്രിപ്റ്റ് ആപ്ലിക്കേഷനുകൾക്കിടയിൽ കോഡ് പങ്കിടാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഇത് നിങ്ങളുടെ ആപ്ലിക്കേഷൻ്റെ ഭാഗങ്ങൾ മറ്റ് ആപ്ലിക്കേഷനുകൾക്ക് ഉപയോഗിക്കാൻ കഴിയുന്ന "മൊഡ്യൂളുകളായി" എക്സ്പോസ് ചെയ്യാൻ നിങ്ങളെ പ്രാപ്തരാക്കുന്നു, ഇതിനായി npm പോലുള്ള ഒരു സെൻട്രൽ റിപ്പോസിറ്ററിയിൽ പ്രസിദ്ധീകരിക്കേണ്ട ആവശ്യമില്ല.
മൊഡ്യൂൾ ഫെഡറേഷനെ ആപ്ലിക്കേഷനുകളുടെ ഒരു ഫെഡറേറ്റഡ് ഇക്കോസിസ്റ്റം സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു മാർഗമായി കരുതുക, അവിടെ ഓരോ ആപ്ലിക്കേഷനും അതിൻ്റേതായ പ്രവർത്തനം സംഭാവന ചെയ്യാനും മറ്റ് ആപ്ലിക്കേഷനുകളിൽ നിന്ന് പ്രവർത്തനം ഉപയോഗിക്കാനും കഴിയും. ഇത് ബിൽഡ്-ടൈം ഡിപൻഡൻസികളുടെ ആവശ്യം ഇല്ലാതാക്കുകയും യഥാർത്ഥത്തിൽ സ്വതന്ത്രമായ വിന്യാസങ്ങൾ അനുവദിക്കുകയും ചെയ്യുന്നു.
ഉദാഹരണത്തിന്, ഒരു ഡിസൈൻ സിസ്റ്റം ടീമിന് UI കമ്പോണൻ്റുകൾ മൊഡ്യൂളുകളായി എക്സ്പോസ് ചെയ്യാൻ കഴിയും, കൂടാതെ വ്യത്യസ്ത ആപ്ലിക്കേഷൻ ടീമുകൾക്ക് ഈ കമ്പോണൻ്റുകൾ npm പാക്കേജുകളായി ഇൻസ്റ്റാൾ ചെയ്യാതെ തന്നെ ഡിസൈൻ സിസ്റ്റം ആപ്ലിക്കേഷനിൽ നിന്ന് നേരിട്ട് ഉപയോഗിക്കാൻ കഴിയും. ഡിസൈൻ സിസ്റ്റം ടീം കമ്പോണൻ്റുകൾ അപ്ഡേറ്റ് ചെയ്യുമ്പോൾ, മാറ്റങ്ങൾ എല്ലാ ഉപഭോക്തൃ ആപ്ലിക്കേഷനുകളിലും യാന്ത്രികമായി പ്രതിഫലിക്കും.
മൊഡ്യൂൾ ഫെഡറേഷനിലെ പ്രധാന ആശയങ്ങൾ:
- Host: റിമോട്ട് മൊഡ്യൂളുകൾ ഉപയോഗിക്കുന്ന പ്രധാന ആപ്ലിക്കേഷൻ.
- Remote: മറ്റ് ആപ്ലിക്കേഷനുകൾ ഉപയോഗിക്കുന്നതിനായി മൊഡ്യൂളുകൾ എക്സ്പോസ് ചെയ്യുന്ന ഒരു ആപ്ലിക്കേഷൻ.
- Shared Modules: ഹോസ്റ്റും റിമോട്ട് ആപ്ലിക്കേഷനുകളും തമ്മിൽ പങ്കിടുന്ന മൊഡ്യൂളുകൾ (ഉദാ. റിയാക്റ്റ്, ലോഡാഷ്). ഓരോ മൊഡ്യൂളിൻ്റെയും ഒരൊറ്റ പതിപ്പ് മാത്രം ലോഡ് ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കാൻ മൊഡ്യൂൾ ഫെഡറേഷന് പങ്കിട്ട മൊഡ്യൂളുകളുടെ പതിപ്പും ഡ്യൂപ്ലിക്കേഷനും സ്വയമേവ കൈകാര്യം ചെയ്യാൻ കഴിയും.
- Exposed Modules: ഒരു റിമോട്ട് ആപ്ലിക്കേഷനിൽ നിന്നുള്ള നിർദ്ദിഷ്ട മൊഡ്യൂളുകൾ മറ്റ് ആപ്ലിക്കേഷനുകൾക്ക് ഉപയോഗിക്കാൻ ലഭ്യമാക്കുന്നു.
- RemoteEntry.js: ഒരു റിമോട്ട് ആപ്ലിക്കേഷൻ്റെ എക്സ്പോസ് ചെയ്ത മൊഡ്യൂളുകളെക്കുറിച്ചുള്ള മെറ്റാഡാറ്റ അടങ്ങിയ വെബ്പാക്ക് ജനറേറ്റ് ചെയ്യുന്ന ഒരു ഫയൽ. ഹോസ്റ്റ് ആപ്ലിക്കേഷൻ ഈ ഫയൽ ഉപയോഗിച്ച് റിമോട്ട് മൊഡ്യൂളുകൾ കണ്ടെത്തുകയും ലോഡ് ചെയ്യുകയും ചെയ്യുന്നു.
വെബ്പാക്ക് 5 ഉപയോഗിച്ച് മൊഡ്യൂൾ ഫെഡറേഷൻ സജ്ജീകരിക്കുന്നു: ഒരു പ്രായോഗിക ഗൈഡ്
വെബ്പാക്ക് 5 ഉപയോഗിച്ച് മൊഡ്യൂൾ ഫെഡറേഷൻ സജ്ജീകരിക്കുന്നതിനുള്ള ഒരു പ്രായോഗിക ഉദാഹരണം നോക്കാം. നമ്മൾ രണ്ട് ലളിതമായ ആപ്ലിക്കേഷനുകൾ സൃഷ്ടിക്കും: ഒരു Host ആപ്ലിക്കേഷനും ഒരു Remote ആപ്ലിക്കേഷനും. റിമോട്ട് ആപ്ലിക്കേഷൻ ഒരു കമ്പോണൻ്റ് എക്സ്പോസ് ചെയ്യും, ഹോസ്റ്റ് ആപ്ലിക്കേഷൻ അത് ഉപയോഗിക്കും.
1. പ്രോജക്റ്റ് സജ്ജീകരണം
നിങ്ങളുടെ ആപ്ലിക്കേഷനുകൾക്കായി രണ്ട് പ്രത്യേക ഡയറക്ടറികൾ സൃഷ്ടിക്കുക: `host`, `remote`.
```bash mkdir host remote cd host npm init -y npm install webpack webpack-cli webpack-dev-server html-webpack-plugin --save-dev npm install react react-dom cd ../remote npm init -y npm install webpack webpack-cli webpack-dev-server html-webpack-plugin --save-dev npm install react react-dom ```2. റിമോട്ട് ആപ്ലിക്കേഷൻ കോൺഫിഗറേഷൻ
`remote` ഡയറക്ടറിയിൽ, ഇനിപ്പറയുന്ന ഫയലുകൾ സൃഷ്ടിക്കുക:
- `src/index.js`: ആപ്ലിക്കേഷൻ്റെ എൻട്രി പോയിൻ്റ്.
- `src/RemoteComponent.jsx`: എക്സ്പോസ് ചെയ്യുന്ന കമ്പോണൻ്റ്.
- `webpack.config.js`: വെബ്പാക്ക് കോൺഫിഗറേഷൻ ഫയൽ.
src/index.js:
```javascript import React from 'react'; import ReactDOM from 'react-dom/client'; import RemoteComponent from './RemoteComponent'; const App = () => (Remote Application
src/RemoteComponent.jsx:
```javascript import React from 'react'; const RemoteComponent = () => (This is a Remote Component!
Rendered from the Remote Application.
webpack.config.js:
```javascript const HtmlWebpackPlugin = require('html-webpack-plugin'); const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin'); const path = require('path'); module.exports = { entry: './src/index', mode: 'development', devServer: { port: 3001, static: { directory: path.join(__dirname, 'dist'), }, }, output: { publicPath: 'auto', }, module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-react', '@babel/preset-env'], }, }, }, ], }, plugins: [ new ModuleFederationPlugin({ name: 'remote', filename: 'remoteEntry.js', exposes: { './RemoteComponent': './src/RemoteComponent', }, shared: { react: { singleton: true, eager: true }, 'react-dom': { singleton: true, eager: true }, }, }), new HtmlWebpackPlugin({ template: './public/index.html', }), ], resolve: { extensions: ['.js', '.jsx'], }, }; ```അടിസ്ഥാന HTML ഘടനയോടെ `public/index.html` സൃഷ്ടിക്കുക. പ്രധാനപ്പെട്ടത് `
` ആണ്.3. ഹോസ്റ്റ് ആപ്ലിക്കേഷൻ കോൺഫിഗറേഷൻ
`host` ഡയറക്ടറിയിൽ, ഇനിപ്പറയുന്ന ഫയലുകൾ സൃഷ്ടിക്കുക:
- `src/index.js`: ആപ്ലിക്കേഷൻ്റെ എൻട്രി പോയിൻ്റ്.
- `webpack.config.js`: വെബ്പാക്ക് കോൺഫിഗറേഷൻ ഫയൽ.
src/index.js:
```javascript import React, { Suspense } from 'react'; import ReactDOM from 'react-dom/client'; const RemoteComponent = React.lazy(() => import('remote/RemoteComponent')); const App = () => (Host Application
webpack.config.js:
```javascript const HtmlWebpackPlugin = require('html-webpack-plugin'); const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin'); const path = require('path'); module.exports = { entry: './src/index', mode: 'development', devServer: { port: 3000, static: { directory: path.join(__dirname, 'dist'), }, }, output: { publicPath: 'auto', }, module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-react', '@babel/preset-env'], }, }, }, ], }, plugins: [ new ModuleFederationPlugin({ name: 'host', remotes: { remote: 'remote@http://localhost:3001/remoteEntry.js', }, shared: { react: { singleton: true, eager: true }, 'react-dom': { singleton: true, eager: true }, }, }), new HtmlWebpackPlugin({ template: './public/index.html', }), ], resolve: { extensions: ['.js', '.jsx'], }, }; ```അടിസ്ഥാന HTML ഘടനയോടെ `public/index.html` സൃഷ്ടിക്കുക (റിമോട്ട് ആപ്പിന് സമാനം). പ്രധാനപ്പെട്ടത് `
` ആണ്.4. ബേബൽ ഇൻസ്റ്റാൾ ചെയ്യുക
`host`, `remote` എന്നീ രണ്ട് ഡയറക്ടറികളിലും ബേബൽ ഡിപൻഡൻസികൾ ഇൻസ്റ്റാൾ ചെയ്യുക:
```bash npm install --save-dev @babel/core @babel/preset-env @babel/preset-react babel-loader ```5. ആപ്ലിക്കേഷനുകൾ പ്രവർത്തിപ്പിക്കുക
`host`, `remote` എന്നീ രണ്ട് ഡയറക്ടറികളിലും `package.json`-ൽ ഇനിപ്പറയുന്ന സ്ക്രിപ്റ്റ് ചേർക്കുക:
```json "scripts": { "start": "webpack serve" } ```ഇപ്പോൾ, രണ്ട് ആപ്ലിക്കേഷനുകളും ആരംഭിക്കുക:
```bash cd remote npm start cd ../host npm start ```നിങ്ങളുടെ ബ്രൗസർ തുറന്ന് `http://localhost:3000` എന്നതിലേക്ക് പോകുക. ഹോസ്റ്റ് ആപ്ലിക്കേഷനിൽ റിമോട്ട് കമ്പോണൻ്റ് റെൻഡർ ചെയ്തതായി നിങ്ങൾ കാണും.
പ്രധാന കോൺഫിഗറേഷൻ ഓപ്ഷനുകളുടെ വിശദീകരണം:
- `name`: ആപ്ലിക്കേഷൻ്റെ ഒരു അദ്വിതീയ നാമം.
- `filename`: എക്സ്പോസ് ചെയ്ത മൊഡ്യൂളുകളെക്കുറിച്ചുള്ള മെറ്റാഡാറ്റ അടങ്ങുന്ന ഫയലിൻ്റെ പേര് (ഉദാ. `remoteEntry.js`).
- `exposes`: ഏതൊക്കെ മൊഡ്യൂളുകളാണ് എക്സ്പോസ് ചെയ്യേണ്ടതെന്ന് വ്യക്തമാക്കുന്ന, മൊഡ്യൂൾ നാമങ്ങളുടെയും ഫയൽ പാതകളുടെയും ഒരു മാപ്പ്.
- `remotes`: ഓരോ റിമോട്ട് ആപ്ലിക്കേഷൻ്റെയും remoteEntry.js ഫയൽ എവിടെ കണ്ടെത്താമെന്ന് വ്യക്തമാക്കുന്ന, റിമോട്ട് ആപ്ലിക്കേഷൻ പേരുകളുടെയും URL-കളുടെയും ഒരു മാപ്പ്.
- `shared`: ഹോസ്റ്റും റിമോട്ട് ആപ്ലിക്കേഷനുകളും തമ്മിൽ പങ്കിടേണ്ട മൊഡ്യൂളുകളുടെ ഒരു ലിസ്റ്റ്. `singleton: true` ഓപ്ഷൻ ഓരോ പങ്കിട്ട മൊഡ്യൂളിൻ്റെയും ഒരൊറ്റ ഇൻസ്റ്റൻസ് മാത്രം ലോഡ് ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കുന്നു. `eager: true` ഓപ്ഷൻ പങ്കിട്ട മൊഡ്യൂൾ ആകാംക്ഷയോടെ (അതായത്, മറ്റേതെങ്കിലും മൊഡ്യൂളുകൾക്ക് മുമ്പായി) ലോഡ് ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കുന്നു.
മൊഡ്യൂൾ ഫെഡറേഷനിലെ നൂതന വിദ്യകൾ
കൂടുതൽ സങ്കീർണ്ണമായ മൈക്രോ-ഫ്രണ്ടെൻഡ് ആർക്കിടെക്ചറുകൾ നിർമ്മിക്കാൻ സഹായിക്കുന്ന നിരവധി നൂതന സവിശേഷതകൾ മൊഡ്യൂൾ ഫെഡറേഷൻ വാഗ്ദാനം ചെയ്യുന്നു.
ഡൈനാമിക് റിമോട്ടുകൾ
വെബ്പാക്ക് കോൺഫിഗറേഷനിൽ റിമോട്ട് ആപ്ലിക്കേഷനുകളുടെ URL-കൾ ഹാർഡ്കോഡ് ചെയ്യുന്നതിന് പകരം, നിങ്ങൾക്ക് അവ റൺടൈമിൽ ഡൈനാമിക്കായി ലോഡ് ചെയ്യാൻ കഴിയും. ഇത് ഹോസ്റ്റ് ആപ്ലിക്കേഷൻ പുനർനിർമ്മിക്കാതെ തന്നെ റിമോട്ട് ആപ്ലിക്കേഷനുകളുടെ സ്ഥാനം എളുപ്പത്തിൽ അപ്ഡേറ്റ് ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് റിമോട്ട് ആപ്ലിക്കേഷനുകളുടെ URL-കൾ ഒരു കോൺഫിഗറേഷൻ ഫയലിലോ ഡാറ്റാബേസിലോ സംഭരിക്കുകയും ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് അവയെ ഡൈനാമിക്കായി ലോഡ് ചെയ്യുകയും ചെയ്യാം.
```javascript // In webpack.config.js remotes: { remote: `promise new Promise(resolve => { const urlParams = new URLSearchParams(window.location.search); const remoteUrl = urlParams.get('remote'); // Assume remoteUrl is something like 'http://localhost:3001/remoteEntry.js' const script = document.createElement('script'); script.src = remoteUrl; script.onload = () => { // the key of module federation is that the remote app is // available using the name in the remote resolve(window.remote); }; document.head.appendChild(script); })`, }, ```ഇപ്പോൾ നിങ്ങൾക്ക് `?remote=http://localhost:3001/remoteEntry.js` എന്ന ക്വറി പാരാമീറ്റർ ഉപയോഗിച്ച് ഹോസ്റ്റ് ആപ്പ് ലോഡ് ചെയ്യാം.
പതിപ്പുള്ള പങ്കുവെച്ച മൊഡ്യൂളുകൾ
പങ്കിട്ട മൊഡ്യൂളുകളുടെ അനുയോജ്യമായ ഒരു പതിപ്പ് മാത്രം ലോഡ് ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കാൻ മൊഡ്യൂൾ ഫെഡറേഷന് അവയുടെ പതിപ്പും ഡ്യൂപ്ലിക്കേഷനും സ്വയമേവ കൈകാര്യം ചെയ്യാൻ കഴിയും. ധാരാളം ഡിപൻഡൻസികളുള്ള വലുതും സങ്കീർണ്ണവുമായ ആപ്ലിക്കേഷനുകൾ കൈകാര്യം ചെയ്യുമ്പോൾ ഇത് പ്രത്യേകിച്ചും പ്രധാനമാണ്.
വെബ്പാക്ക് കോൺഫിഗറേഷനിൽ ഓരോ പങ്കിട്ട മൊഡ്യൂളിൻ്റെയും പതിപ്പ് പരിധി നിങ്ങൾക്ക് വ്യക്തമാക്കാം.
```javascript // In webpack.config.js shared: { react: { singleton: true, eager: true, requiredVersion: '^18.0.0' }, 'react-dom': { singleton: true, eager: true, requiredVersion: '^18.0.0' }, }, ```കസ്റ്റം മൊഡ്യൂൾ ലോഡറുകൾ
വിവിധ സ്രോതസ്സുകളിൽ നിന്നോ വ്യത്യസ്ത ഫോർമാറ്റുകളിലോ മൊഡ്യൂളുകൾ ലോഡ് ചെയ്യാൻ ഉപയോഗിക്കാവുന്ന കസ്റ്റം മൊഡ്യൂൾ ലോഡറുകൾ നിർവചിക്കാൻ മൊഡ്യൂൾ ഫെഡറേഷൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഒരു CDN-ൽ നിന്നോ ഒരു കസ്റ്റം മൊഡ്യൂൾ രജിസ്ട്രിയിൽ നിന്നോ മൊഡ്യൂളുകൾ ലോഡ് ചെയ്യുന്നതിന് ഇത് ഉപയോഗപ്രദമാകും.
മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കിടയിൽ സ്റ്റേറ്റ് പങ്കുവെക്കൽ
മൈക്രോ-ഫ്രണ്ടെൻഡ് ആർക്കിടെക്ചറുകളുടെ ഒരു വെല്ലുവിളി വ്യത്യസ്ത മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കിടയിൽ സ്റ്റേറ്റ് പങ്കുവെക്കുക എന്നതാണ്. ഈ വെല്ലുവിളിയെ അഭിമുഖീകരിക്കാൻ നിങ്ങൾക്ക് നിരവധി സമീപനങ്ങൾ സ്വീകരിക്കാം:
- URL അടിസ്ഥാനമാക്കിയുള്ള സ്റ്റേറ്റ് മാനേജ്മെൻ്റ്: URL-ൽ സ്റ്റേറ്റ് സംഭരിക്കുകയും മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കിടയിൽ ആശയവിനിമയം നടത്താൻ URL ഉപയോഗിക്കുകയും ചെയ്യുക. ഇത് ലളിതവും നേരായതുമായ ഒരു സമീപനമാണ്, എന്നാൽ സങ്കീർണ്ണമായ സ്റ്റേറ്റിന് ഇത് ബുദ്ധിമുട്ടാകും.
- കസ്റ്റം ഇവൻ്റുകൾ: മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കിടയിൽ സ്റ്റേറ്റ് മാറ്റങ്ങൾ പ്രക്ഷേപണം ചെയ്യാൻ കസ്റ്റം ഇവൻ്റുകൾ ഉപയോഗിക്കുക. ഇത് മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കിടയിൽ അയഞ്ഞ കപ്ലിംഗ് അനുവദിക്കുന്നു, പക്ഷേ ഇവൻ്റ് സബ്സ്ക്രിപ്ഷനുകൾ കൈകാര്യം ചെയ്യുന്നത് ബുദ്ധിമുട്ടാണ്.
- പങ്കിട്ട സ്റ്റേറ്റ് മാനേജ്മെൻ്റ് ലൈബ്രറി: മുഴുവൻ ആപ്ലിക്കേഷൻ്റെയും സ്റ്റേറ്റ് കൈകാര്യം ചെയ്യാൻ റെഡക്സ് അല്ലെങ്കിൽ മോബ്എക്സ് പോലുള്ള ഒരു പങ്കിട്ട സ്റ്റേറ്റ് മാനേജ്മെൻ്റ് ലൈബ്രറി ഉപയോഗിക്കുക. ഇത് സ്റ്റേറ്റ് കൈകാര്യം ചെയ്യുന്നതിന് കേന്ദ്രീകൃതവും സ്ഥിരതയുള്ളതുമായ ഒരു മാർഗ്ഗം നൽകുന്നു, പക്ഷേ ഇത് ഒരു പ്രത്യേക സ്റ്റേറ്റ് മാനേജ്മെൻ്റ് ലൈബ്രറിയെ ആശ്രയിക്കാൻ ഇടയാക്കും.
- മെസ്സേജ് ബ്രോക്കർ: മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കിടയിലുള്ള ആശയവിനിമയത്തിനും സ്റ്റേറ്റ് പങ്കുവെക്കലിനും റാബിറ്റ്എംക്യു അല്ലെങ്കിൽ കാഫ്ക പോലുള്ള ഒരു മെസ്സേജ് ബ്രോക്കർ ഉപയോഗിക്കുക. ഇത് കൂടുതൽ സങ്കീർണ്ണമായ ഒരു പരിഹാരമാണ്, പക്ഷേ ഇത് ഉയർന്ന അളവിലുള്ള വഴക്കവും സ്കേലബിലിറ്റിയും വാഗ്ദാനം ചെയ്യുന്നു.
മൊഡ്യൂൾ ഫെഡറേഷൻ ഉപയോഗിച്ച് മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നടപ്പിലാക്കുന്നതിനുള്ള മികച്ച രീതികൾ
മൊഡ്യൂൾ ഫെഡറേഷൻ ഉപയോഗിച്ച് മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നടപ്പിലാക്കുമ്പോൾ ഓർമ്മിക്കേണ്ട ചില മികച്ച രീതികൾ ഇതാ:
- ഓരോ മൈക്രോ-ഫ്രണ്ടെൻഡിനും വ്യക്തമായ അതിരുകൾ നിർവചിക്കുക: ഓരോ മൈക്രോ-ഫ്രണ്ടെൻഡും ഒരു പ്രത്യേക ബിസിനസ്സ് ഡൊമെയ്നിനോ ഫീച്ചറിനോ ഉത്തരവാദിയായിരിക്കണം കൂടാതെ വ്യക്തമായി നിർവചിക്കപ്പെട്ട ഇൻ്റർഫേസുകൾ ഉണ്ടായിരിക്കണം.
- സ്ഥിരതയുള്ള ഒരു സാങ്കേതികവിദ്യ സ്റ്റാക്ക് ഉപയോഗിക്കുക: വ്യത്യസ്ത മൈക്രോ-ഫ്രണ്ടെൻഡുകൾക്കായി വ്യത്യസ്ത സാങ്കേതികവിദ്യകൾ ഉപയോഗിക്കാൻ മൊഡ്യൂൾ ഫെഡറേഷൻ നിങ്ങളെ അനുവദിക്കുമെങ്കിലും, സങ്കീർണ്ണത കുറയ്ക്കാനും പരിപാലനം മെച്ചപ്പെടുത്താനും സ്ഥിരതയുള്ള ഒരു സാങ്കേതികവിദ്യ സ്റ്റാക്ക് ഉപയോഗിക്കുന്നത് പൊതുവെ നല്ലതാണ്.
- വ്യക്തമായ ആശയവിനിമയ പ്രോട്ടോക്കോളുകൾ സ്ഥാപിക്കുക: മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ പരസ്പരം എങ്ങനെ ഇടപഴകണം എന്നതിന് വ്യക്തമായ ആശയവിനിമയ പ്രോട്ടോക്കോളുകൾ നിർവചിക്കുക.
- വിന്യാസ പ്രക്രിയ ഓട്ടോമേറ്റ് ചെയ്യുക: മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ സ്വതന്ത്രമായും വിശ്വസനീയമായും വിന്യസിക്കാൻ കഴിയുമെന്ന് ഉറപ്പാക്കാൻ വിന്യാസ പ്രക്രിയ ഓട്ടോമേറ്റ് ചെയ്യുക. CI/CD പൈപ്പ്ലൈനുകളും ഇൻഫ്രാസ്ട്രക്ചർ-ആസ്-കോഡ് ടൂളുകളും ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക.
- നിങ്ങളുടെ മൈക്രോ-ഫ്രണ്ടെൻഡുകളുടെ പ്രകടനം നിരീക്ഷിക്കുക: ഏതെങ്കിലും പ്രകടന തടസ്സങ്ങൾ തിരിച്ചറിയാനും പരിഹരിക്കാനും നിങ്ങളുടെ മൈക്രോ-ഫ്രണ്ടെൻഡുകളുടെ പ്രകടനം നിരീക്ഷിക്കുക. ഗൂഗിൾ അനലിറ്റിക്സ്, ന്യൂ റെലിക്, അല്ലെങ്കിൽ ഡാറ്റാഡോഗ് പോലുള്ള ഉപകരണങ്ങൾ ഉപയോഗിക്കുക.
- ശക്തമായ പിശക് കൈകാര്യം ചെയ്യൽ നടപ്പിലാക്കുക: നിങ്ങളുടെ ആപ്ലിക്കേഷൻ പരാജയങ്ങളെ പ്രതിരോധിക്കാൻ കഴിയുമെന്ന് ഉറപ്പാക്കാൻ ശക്തമായ പിശക് കൈകാര്യം ചെയ്യൽ നടപ്പിലാക്കുക.
- വികേന്ദ്രീകൃത ഭരണ മാതൃക സ്വീകരിക്കുക: മൊത്തത്തിലുള്ള സ്ഥിരതയും ഗുണനിലവാരവും നിലനിർത്തിക്കൊണ്ട്, ടീമുകളെ അവരുടെ സ്വന്തം മൈക്രോ-ഫ്രണ്ടെൻഡുകളെക്കുറിച്ച് തീരുമാനങ്ങൾ എടുക്കാൻ ശാക്തീകരിക്കുക.
മൊഡ്യൂൾ ഫെഡറേഷൻ്റെ യഥാർത്ഥ ലോക ഉദാഹരണങ്ങൾ
നിർദ്ദിഷ്ട കേസ് പഠനങ്ങൾ പലപ്പോഴും രഹസ്യാത്മകമാണെങ്കിലും, മൊഡ്യൂൾ ഫെഡറേഷൻ അവിശ്വസനീയമാംവിധം ഉപയോഗപ്രദമാകുന്ന ചില പൊതുവായ സാഹചര്യങ്ങൾ ഇതാ:
- ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോമുകൾ: നേരത്തെ സൂചിപ്പിച്ചതുപോലെ, വലിയ ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോമുകൾക്ക് ഉൽപ്പന്ന കാറ്റലോഗ്, ഷോപ്പിംഗ് കാർട്ട്, ചെക്ക്ഔട്ട് പ്രോസസ്സ്, ഉപയോക്തൃ അക്കൗണ്ട് മാനേജ്മെൻ്റ് എന്നിവയ്ക്കായി സ്വതന്ത്ര മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നിർമ്മിക്കാൻ മൊഡ്യൂൾ ഫെഡറേഷൻ ഉപയോഗിക്കാം. ഇത് വ്യത്യസ്ത ടീമുകളെ ഈ ഫീച്ചറുകളിൽ സ്വതന്ത്രമായി പ്രവർത്തിക്കാനും ആപ്ലിക്കേഷൻ്റെ മറ്റ് ഭാഗങ്ങളെ ബാധിക്കാതെ അവ വിന്യസിക്കാനും അനുവദിക്കുന്നു. ഒരു ആഗോള പ്ലാറ്റ്ഫോമിന് റിമോട്ട് മൊഡ്യൂളുകൾ വഴി വിവിധ പ്രദേശങ്ങൾക്കായി ഫീച്ചറുകൾ ഇഷ്ടാനുസൃതമാക്കാൻ കഴിയും.
- ഫിനാൻഷ്യൽ സർവീസസ് ആപ്ലിക്കേഷനുകൾ: ഫിനാൻഷ്യൽ സർവീസസ് ആപ്ലിക്കേഷനുകൾക്ക് പലപ്പോഴും സങ്കീർണ്ണമായ യൂസർ ഇൻ്റർഫേസുകളും നിരവധി വ്യത്യസ്ത ഫീച്ചറുകളും ഉണ്ട്. വ്യത്യസ്ത അക്കൗണ്ട് തരങ്ങൾ, ട്രേഡിംഗ് പ്ലാറ്റ്ഫോമുകൾ, റിപ്പോർട്ടിംഗ് ഡാഷ്ബോർഡുകൾ എന്നിവയ്ക്കായി സ്വതന്ത്ര മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നിർമ്മിക്കാൻ മൊഡ്യൂൾ ഫെഡറേഷൻ ഉപയോഗിക്കാം. ചില രാജ്യങ്ങൾക്ക് മാത്രമുള്ള കംപ്ലയിൻസ് ഫീച്ചറുകൾ മൊഡ്യൂൾ ഫെഡറേഷൻ വഴി നൽകാം.
- ഹെൽത്ത്കെയർ പോർട്ടലുകൾ: രോഗികളുടെ മാനേജ്മെൻ്റ്, അപ്പോയിൻ്റ്മെൻ്റ് ഷെഡ്യൂളിംഗ്, മെഡിക്കൽ റെക്കോർഡ് ആക്സസ് എന്നിവയ്ക്കായി സ്വതന്ത്ര മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നിർമ്മിക്കാൻ ഹെൽത്ത്കെയർ പോർട്ടലുകൾക്ക് മൊഡ്യൂൾ ഫെഡറേഷൻ ഉപയോഗിക്കാം. വ്യത്യസ്ത ഇൻഷുറൻസ് ദാതാക്കൾക്കോ പ്രദേശങ്ങൾക്കോ ഉള്ള വ്യത്യസ്ത മൊഡ്യൂളുകൾ ഡൈനാമിക്കായി ലോഡ് ചെയ്യാൻ കഴിയും.
- ഉള്ളടക്ക മാനേജുമെൻ്റ് സിസ്റ്റങ്ങൾ (CMS): ഒരു CMS-ന് മൂന്നാം കക്ഷി ഡെവലപ്പർമാരിൽ നിന്ന് റിമോട്ട് മൊഡ്യൂളുകൾ ലോഡ് ചെയ്തുകൊണ്ട് ഉപയോക്താക്കളെ അവരുടെ വെബ്സൈറ്റുകളിൽ കസ്റ്റം പ്രവർത്തനക്ഷമത ചേർക്കാൻ അനുവദിക്കുന്നതിന് മൊഡ്യൂൾ ഫെഡറേഷൻ ഉപയോഗിക്കാം. വ്യത്യസ്ത തീമുകൾ, പ്ലഗിനുകൾ, വിജറ്റുകൾ എന്നിവ സ്വതന്ത്ര മൈക്രോ-ഫ്രണ്ടെൻഡുകളായി വിതരണം ചെയ്യാം.
- ലേണിംഗ് മാനേജ്മെൻ്റ് സിസ്റ്റങ്ങൾ (LMS): ഒരു LMS-ന് സ്വതന്ത്രമായി വികസിപ്പിച്ചതും മൊഡ്യൂൾ ഫെഡറേഷൻ വഴി ഒരു ഏകീകൃത പ്ലാറ്റ്ഫോമിലേക്ക് സംയോജിപ്പിച്ചതുമായ കോഴ്സുകൾ വാഗ്ദാനം ചെയ്യാൻ കഴിയും. വ്യക്തിഗത കോഴ്സുകളിലെ അപ്ഡേറ്റുകൾക്ക് പ്ലാറ്റ്ഫോം വ്യാപകമായ പുനർവിന്യാസം ആവശ്യമില്ല.
ഉപസംഹാരം
വെബ്പാക്ക് 5-ലെ ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂൾ ഫെഡറേഷൻ മൈക്രോ-ഫ്രണ്ടെൻഡ് ആർക്കിടെക്ചറുകൾ നിർമ്മിക്കുന്നതിന് ശക്തവും വഴക്കമുള്ളതുമായ ഒരു മാർഗ്ഗം നൽകുന്നു. റൺടൈമിൽ വെവ്വേറെ കംപൈൽ ചെയ്ത ജാവാസ്ക്രിപ്റ്റ് ആപ്ലിക്കേഷനുകൾക്കിടയിൽ കോഡ് പങ്കിടാൻ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു, ഇത് സ്വതന്ത്ര വിന്യാസങ്ങൾ, സാങ്കേതികവിദ്യയുടെ വൈവിധ്യം, മെച്ചപ്പെട്ട ടീം സ്വയംഭരണം എന്നിവ സാധ്യമാക്കുന്നു. ഈ ഗൈഡിൽ പ്രതിപാദിച്ചിട്ടുള്ള മികച്ച രീതികൾ പിന്തുടരുന്നതിലൂടെ, സ്കേലബിൾ, പരിപാലിക്കാൻ എളുപ്പമുള്ള, നൂതനമായ വെബ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ നിങ്ങൾക്ക് മൊഡ്യൂൾ ഫെഡറേഷൻ പ്രയോജനപ്പെടുത്താം.
ഫ്രണ്ടെൻഡ് ഡെവലപ്മെൻ്റിൻ്റെ ഭാവി നിസ്സംശയമായും മോഡുലാർ, ഡിസ്ട്രിബ്യൂട്ടഡ് ആർക്കിടെക്ചറുകളിലേക്ക് ചായുന്നു. ഈ ആധുനിക സംവിധാനങ്ങൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു നിർണായക ഉപകരണം മൊഡ്യൂൾ ഫെഡറേഷൻ നൽകുന്നു, ഇത് ടീമുകളെ കൂടുതൽ വേഗത, വഴക്കം, പ്രതിരോധശേഷി എന്നിവയോടെ സങ്കീർണ്ണമായ ആപ്ലിക്കേഷനുകൾ സൃഷ്ടിക്കാൻ പ്രാപ്തരാക്കുന്നു. സാങ്കേതികവിദ്യ പക്വത പ്രാപിക്കുമ്പോൾ, കൂടുതൽ നൂതനമായ ഉപയോഗങ്ങളും മികച്ച രീതികളും ഉയർന്നുവരുമെന്ന് നമുക്ക് പ്രതീക്ഷിക്കാം.