ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിനും, വെബ്സൈറ്റ് പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനും, ഉപയോക്തൃ അനുഭവം വർദ്ധിപ്പിക്കുന്നതിനുമുള്ള നൂതന കോഡ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകളെക്കുറിച്ചുള്ള ആഴത്തിലുള്ള ഒരു പഠനം.
ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിൽ ഒപ്റ്റിമൈസേഷൻ തന്ത്രം: നൂതന കോഡ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകൾ
ഇന്നത്തെ വെബ് ഡെവലപ്മെന്റ് രംഗത്ത്, വേഗതയേറിയതും പ്രതികരണാത്മകവുമായ ഒരു ഉപയോക്തൃ അനുഭവം നൽകുന്നത് പരമപ്രധാനമാണ്. വലിയ ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകൾ വെബ്സൈറ്റ് ലോഡിംഗ് സമയത്തെ കാര്യമായി ബാധിക്കും, ഇത് ഉപയോക്താക്കളിൽ നിരാശയുണ്ടാക്കുകയും ബിസിനസ്സ് മെട്രിക്കുകളെ പ്രതികൂലമായി ബാധിക്കുകയും ചെയ്യും. ഈ വെല്ലുവിളിയെ നേരിടാനുള്ള ഒരു ശക്തമായ സാങ്കേതികതയാണ് കോഡ് സ്പ്ലിറ്റിംഗ്. ഇത് നിങ്ങളുടെ ആപ്ലിക്കേഷന്റെ കോഡിനെ ചെറുതും കൈകാര്യം ചെയ്യാൻ എളുപ്പമുള്ളതുമായ ഭാഗങ്ങളായി വിഭജിക്കുന്നു, അവ ആവശ്യാനുസരണം ലോഡ് ചെയ്യാൻ സാധിക്കും.
ഈ സമഗ്രമായ ഗൈഡ് നൂതന കോഡ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകളിലേക്ക് ആഴത്തിൽ ഇറങ്ങിച്ചെല്ലുന്നു, നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിനും വെബ്സൈറ്റിന്റെ പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനുമുള്ള വിവിധ തന്ത്രങ്ങളും മികച്ച രീതികളും പര്യവേക്ഷണം ചെയ്യുന്നു. വെബ്പാക്ക്, റോൾഅപ്പ്, പാർസൽ തുടങ്ങിയ വിവിധ ബണ്ട്ലറുകൾക്ക് ബാധകമായ ആശയങ്ങൾ ഞങ്ങൾ ഉൾക്കൊള്ളുകയും എല്ലാ തലങ്ങളിലുമുള്ള ഡെവലപ്പർമാർക്ക് പ്രവർത്തനക്ഷമമായ ഉൾക്കാഴ്ചകൾ നൽകുകയും ചെയ്യും.
എന്താണ് കോഡ് സ്പ്ലിറ്റിംഗ്?
ഒരു വലിയ ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലിനെ ചെറുതും സ്വതന്ത്രവുമായ ഭാഗങ്ങളായി വിഭജിക്കുന്ന രീതിയാണ് കോഡ് സ്പ്ലിറ്റിംഗ്. മുഴുവൻ ആപ്ലിക്കേഷൻ കോഡും തുടക്കത്തിൽ തന്നെ ലോഡ് ചെയ്യുന്നതിന് പകരം, ആവശ്യമുള്ള കോഡ് മാത്രം ആവശ്യമുള്ളപ്പോൾ ഡൗൺലോഡ് ചെയ്യപ്പെടുന്നു. ഈ സമീപനം നിരവധി നേട്ടങ്ങൾ വാഗ്ദാനം ചെയ്യുന്നു:
- മെച്ചപ്പെട്ട പ്രാരംഭ ലോഡ് സമയം: പ്രാരംഭ പേജ് ലോഡിനിടെ ഡൗൺലോഡ് ചെയ്യുകയും പാഴ്സ് ചെയ്യുകയും ചെയ്യേണ്ട ജാവാസ്ക്രിപ്റ്റിന്റെ അളവ് കുറയ്ക്കുന്നു, ഇത് വേഗതയേറിയ പ്രകടനത്തിന് കാരണമാകുന്നു.
- മെച്ചപ്പെട്ട ഉപയോക്തൃ അനുഭവം: വേഗതയേറിയ ലോഡ് സമയം കൂടുതൽ പ്രതികരണാത്മകവും ആസ്വാദ്യകരവുമായ ഉപയോക്തൃ അനുഭവത്തിലേക്ക് നയിക്കുന്നു.
- മികച്ച കാഷിംഗ്: ചെറിയ ബണ്ടിലുകൾ കൂടുതൽ കാര്യക്ഷമമായി കാഷെ ചെയ്യാൻ കഴിയും, ഇത് തുടർന്നുള്ള സന്ദർശനങ്ങളിൽ കോഡ് ഡൗൺലോഡ് ചെയ്യേണ്ടതിന്റെ ആവശ്യകത കുറയ്ക്കുന്നു.
- ബാൻഡ്വിഡ്ത്ത് ഉപയോഗം കുറയ്ക്കുന്നു: ഉപയോക്താക്കൾക്ക് ആവശ്യമുള്ള കോഡ് മാത്രം ഡൗൺലോഡ് ചെയ്താൽ മതി, ഇത് ബാൻഡ്വിഡ്ത്ത് ലാഭിക്കുകയും ഡാറ്റാ ചാർജുകൾ കുറയ്ക്കുകയും ചെയ്യുന്നു, പ്രത്യേകിച്ച് പരിമിതമായ ഇന്റർനെറ്റ് സൗകര്യമുള്ള പ്രദേശങ്ങളിലെ ഉപയോക്താക്കൾക്ക് ഇത് പ്രയോജനകരമാണ്.
കോഡ് സ്പ്ലിറ്റിംഗിന്റെ തരങ്ങൾ
കോഡ് സ്പ്ലിറ്റിംഗിനായി പ്രധാനമായും രണ്ട് സമീപനങ്ങളുണ്ട്:
1. എൻട്രി പോയിന്റ് സ്പ്ലിറ്റിംഗ്
നിങ്ങളുടെ ആപ്ലിക്കേഷന്റെ വിവിധ എൻട്രി പോയിന്റുകൾക്കായി പ്രത്യേക ബണ്ടിലുകൾ ഉണ്ടാക്കുന്ന രീതിയാണ് എൻട്രി പോയിന്റ് സ്പ്ലിറ്റിംഗ്. ഓരോ എൻട്രി പോയിന്റും ഒരു പ്രത്യേക ഫീച്ചറിനെയോ പേജിനെയോ പ്രതിനിധീകരിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഇ-കൊമേഴ്സ് വെബ്സൈറ്റിന് ഹോംപേജ്, പ്രൊഡക്റ്റ് ലിസ്റ്റിംഗ് പേജ്, ചെക്ക്ഔട്ട് പേജ് എന്നിവയ്ക്ക് പ്രത്യേക എൻട്രി പോയിന്റുകൾ ഉണ്ടായിരിക്കാം.
ഉദാഹരണം:
`index.js`, `about.js` എന്നീ രണ്ട് എൻട്രി പോയിന്റുകളുള്ള ഒരു വെബ്സൈറ്റ് പരിഗണിക്കുക. വെബ്പാക്ക് ഉപയോഗിച്ച്, നിങ്ങളുടെ `webpack.config.js` ഫയലിൽ ഒന്നിലധികം എൻട്രി പോയിന്റുകൾ ക്രമീകരിക്കാൻ കഴിയും:
module.exports = {
entry: {
index: './src/index.js',
about: './src/about.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
ഈ കോൺഫിഗറേഷൻ `index.bundle.js`, `about.bundle.js` എന്നിങ്ങനെ രണ്ട് പ്രത്യേക ബണ്ടിലുകൾ ഉണ്ടാക്കും. ബ്രൗസർ ആക്സസ് ചെയ്യുന്ന പേജിന് അനുയോജ്യമായ ബണ്ടിൽ മാത്രം ഡൗൺലോഡ് ചെയ്യും.
2. ഡൈനാമിക് ഇംപോർട്ട്സ് (റൂട്ട്-ബേസ്ഡ് അല്ലെങ്കിൽ കമ്പോണന്റ്-ബേസ്ഡ് സ്പ്ലിറ്റിംഗ്)
ഒരു ഉപയോക്താവ് ഒരു പ്രത്യേക ഫീച്ചറുമായി സംവദിക്കുമ്പോഴോ ഒരു പ്രത്യേക റൂട്ടിലേക്ക് പോകുമ്പോഴോ ആവശ്യാനുസരണം ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂളുകൾ ലോഡ് ചെയ്യാൻ ഡൈനാമിക് ഇംപോർട്ട്സ് നിങ്ങളെ അനുവദിക്കുന്നു. ഈ സമീപനം കോഡ് ലോഡിംഗിൽ കൂടുതൽ സൂക്ഷ്മമായ നിയന്ത്രണം നൽകുന്നു, കൂടാതെ വലുതും സങ്കീർണ്ണവുമായ ആപ്ലിക്കേഷനുകളിൽ പ്രകടനം ഗണ്യമായി മെച്ചപ്പെടുത്താനും കഴിയും.
ഉദാഹരണം:
റൂട്ട് അടിസ്ഥാനമാക്കിയുള്ള കോഡ് സ്പ്ലിറ്റിംഗിനായി ഒരു റിയാക്ട് ആപ്ലിക്കേഷനിൽ ഡൈനാമിക് ഇംപോർട്ട്സ് ഉപയോഗിക്കുന്നത്:
import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
const Products = lazy(() => import('./pages/Products'));
function App() {
return (
Loading... ഈ ഉദാഹരണത്തിൽ, `Home`, `About`, `Products` എന്നീ കമ്പോണന്റുകൾ `React.lazy()` ഉപയോഗിച്ച് ഡൈനാമിക്കായി ലോഡ് ചെയ്യുന്നു. കമ്പോണന്റുകൾ ലോഡ് ചെയ്യുമ്പോൾ `Suspense` കമ്പോണന്റ് ഒരു ഫാൾബാക്ക് യുഐ (ലോഡിംഗ് ഇൻഡിക്കേറ്റർ) നൽകുന്നു. കോഡ് ഡൗൺലോഡ് ചെയ്യാൻ കാത്തിരിക്കുമ്പോൾ ഉപയോക്താവിന് ഒരു ശൂന്യമായ സ്ക്രീൻ കാണുന്നില്ലെന്ന് ഇത് ഉറപ്പാക്കുന്നു. ഈ പേജുകൾ ഇപ്പോൾ പ്രത്യേക ഭാഗങ്ങളായി വിഭജിക്കപ്പെടുകയും അതത് റൂട്ടുകളിലേക്ക് പോകുമ്പോൾ മാത്രം ലോഡ് ചെയ്യപ്പെടുകയും ചെയ്യുന്നു.
നൂതന കോഡ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകൾ
അടിസ്ഥാന കോഡ് സ്പ്ലിറ്റിംഗ് രീതികൾക്ക് പുറമെ, നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകൾ കൂടുതൽ ഒപ്റ്റിമൈസ് ചെയ്യാൻ കഴിയുന്ന നിരവധി നൂതന ടെക്നിക്കുകൾ ഉണ്ട്.
1. വെണ്ടർ സ്പ്ലിറ്റിംഗ്
തേർഡ്-പാർട്ടി ലൈബ്രറികളെ (ഉദാഹരണത്തിന്, റിയാക്ട്, ആംഗുലർ, വ്യൂ.ജെഎസ്) ഒരു പ്രത്യേക ബണ്ടിലിലേക്ക് വേർതിരിക്കുന്നതിനെയാണ് വെണ്ടർ സ്പ്ലിറ്റിംഗ് എന്ന് പറയുന്നത്. ഈ ലൈബ്രറികൾ നിങ്ങളുടെ ആപ്ലിക്കേഷൻ കോഡിനെ അപേക്ഷിച്ച് ഇടയ്ക്കിടെ മാറാൻ സാധ്യത കുറവായതിനാൽ, ബ്രൗസറിന് അവയെ കൂടുതൽ കാര്യക്ഷമമായി കാഷെ ചെയ്യാൻ കഴിയും.
ഉദാഹരണം (വെബ്പാക്ക്):
module.exports = {
// ... other configurations
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all'
}
}
}
}
};
ഈ വെബ്പാക്ക് കോൺഫിഗറേഷൻ `node_modules` ഡയറക്ടറിയിൽ നിന്നുള്ള എല്ലാ കോഡും അടങ്ങുന്ന `vendors.bundle.js` എന്ന പേരിൽ ഒരു പ്രത്യേക ബണ്ടിൽ ഉണ്ടാക്കുന്നു.
2. കോമൺ ചങ്ക് എക്സ്ട്രാക്ഷൻ
ഒന്നിലധികം ബണ്ടിലുകൾക്കിടയിൽ പങ്കിടുന്ന കോഡിനെ തിരിച്ചറിഞ്ഞ്, ആ പങ്കിട്ട കോഡ് അടങ്ങുന്ന ഒരു പ്രത്യേക ബണ്ടിൽ ഉണ്ടാക്കുന്നതിനെയാണ് കോമൺ ചങ്ക് എക്സ്ട്രാക്ഷൻ എന്ന് പറയുന്നത്. ഇത് ആവർത്തനങ്ങൾ കുറയ്ക്കുകയും കാഷിംഗ് കാര്യക്ഷമത മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നു.
ഉദാഹരണം (വെബ്പാക്ക്):
module.exports = {
// ... other configurations
optimization: {
splitChunks: {
chunks: 'all',
minSize: 20000, // Minimum size, in bytes, for a chunk to be created.
maxAsyncRequests: 30, // Maximum number of parallel requests when on-demand loading.
maxInitialRequests: 30, // Maximum number of parallel requests at an entry point.
automaticNameDelimiter: '~',
cacheGroups: {
defaultVendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
default: {
minChunks: 2, // Minimum number of chunks that must share a module before splitting.
priority: -20,
reuseExistingChunk: true
}
}
}
}
};
ഈ കോൺഫിഗറേഷൻ നിർദ്ദിഷ്ട മാനദണ്ഡങ്ങളെ (ഉദാഹരണത്തിന്, `minChunks`, `minSize`) അടിസ്ഥാനമാക്കി പൊതുവായ ഭാഗങ്ങൾ സ്വയമേവ വേർതിരിച്ചെടുക്കും.
3. റൂട്ട് പ്രീഫെച്ചിംഗും പ്രീലോഡിംഗും
ഉപയോക്താവിന്റെ ഭാവിയിലെ പ്രവർത്തനങ്ങൾ മുൻകൂട്ടി കണ്ട്, റിസോഴ്സുകൾ മുൻകൂട്ടി ലോഡ് ചെയ്യുന്നതിനുള്ള ടെക്നിക്കുകളാണ് പ്രീഫെച്ചിംഗും പ്രീലോഡിംഗും. ബ്രൗസർ നിഷ്ക്രിയമായിരിക്കുമ്പോൾ പ്രീഫെച്ചിംഗ് പശ്ചാത്തലത്തിൽ റിസോഴ്സുകൾ ഡൗൺലോഡ് ചെയ്യുന്നു, അതേസമയം നിലവിലെ പേജിന് അത്യാവശ്യമായ നിർദ്ദിഷ്ട റിസോഴ്സുകളുടെ ലോഡിംഗിന് പ്രീലോഡിംഗ് മുൻഗണന നൽകുന്നു.
പ്രീഫെച്ചിംഗ് ഉദാഹരണം:
ബ്രൗസർ നിഷ്ക്രിയമായിരിക്കുമ്പോൾ `about.bundle.js` ഫയൽ പ്രീഫെച്ച് ചെയ്യാൻ ഈ എച്ച്ടിഎംഎൽ ടാഗ് ബ്രൗസറിനോട് നിർദ്ദേശിക്കുന്നു. ഇത് 'എബൗട്ട്' പേജിലേക്കുള്ള നാവിഗേഷൻ വേഗത്തിലാക്കാൻ സഹായിക്കും.
പ്രീലോഡിംഗ് ഉദാഹരണം:
ഈ എച്ച്ടിഎംഎൽ ടാഗ് `critical.bundle.js` ഫയലിന്റെ ലോഡിംഗിന് മുൻഗണന നൽകാൻ ബ്രൗസറിനോട് നിർദ്ദേശിക്കുന്നു. പേജിന്റെ പ്രാരംഭ റെൻഡറിംഗിന് അത്യാവശ്യമായ കോഡ് ലോഡ് ചെയ്യുന്നതിന് ഇത് ഉപയോഗപ്രദമാണ്.
4. ട്രീ ഷേക്കിംഗ്
നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകളിൽ നിന്ന് ഉപയോഗിക്കാത്ത കോഡ് (ഡെഡ് കോഡ്) ഒഴിവാക്കുന്നതിനുള്ള ഒരു സാങ്കേതികതയാണ് ട്രീ ഷേക്കിംഗ്. ഇത് ഉപയോഗിക്കാത്ത ഫംഗ്ഷനുകൾ, വേരിയബിളുകൾ, മൊഡ്യൂളുകൾ എന്നിവ കണ്ടെത്തുകയും നീക്കം ചെയ്യുകയും ചെയ്യുന്നു, ഇത് ചെറിയ ബണ്ടിൽ വലുപ്പത്തിലേക്ക് നയിക്കുന്നു. വെബ്പാക്ക്, റോൾഅപ്പ് പോലുള്ള ബണ്ട്ലറുകൾ ട്രീ ഷേക്കിംഗ് സ്വാഭാവികമായി പിന്തുണയ്ക്കുന്നു.
ട്രീ ഷേക്കിംഗിനുള്ള പ്രധാന പരിഗണനകൾ:
- ഇഎസ് മൊഡ്യൂളുകൾ (ESM) ഉപയോഗിക്കുക: ഉപയോഗിക്കാത്ത കോഡ് ഏതാണെന്ന് നിർണ്ണയിക്കാൻ ട്രീ ഷേക്കിംഗ് ഇഎസ് മൊഡ്യൂളുകളുടെ ( `import`, `export` സ്റ്റേറ്റ്മെന്റുകൾ ഉപയോഗിച്ച്) സ്റ്റാറ്റിക് ഘടനയെ ആശ്രയിക്കുന്നു.
- സൈഡ് എഫക്റ്റുകൾ ഒഴിവാക്കുക: ഫംഗ്ഷന്റെ പരിധിക്ക് പുറത്ത് പ്രവർത്തനങ്ങൾ നടത്തുന്ന കോഡാണ് സൈഡ് എഫക്റ്റുകൾ (ഉദാഹരണത്തിന്, ഗ്ലോബൽ വേരിയബിളുകൾ പരിഷ്കരിക്കുന്നത്). സൈഡ് എഫക്റ്റുകളുള്ള കോഡ് ട്രീ ഷേക്ക് ചെയ്യാൻ ബണ്ട്ലറുകൾക്ക് ബുദ്ധിമുട്ടുണ്ടായേക്കാം.
- `package.json`-ലെ `sideEffects` പ്രോപ്പർട്ടി ഉപയോഗിക്കുക: നിങ്ങളുടെ പാക്കേജിലെ ഏതൊക്കെ ഫയലുകൾക്ക് സൈഡ് എഫക്റ്റുകൾ ഉണ്ടെന്ന് `package.json` ഫയലിലെ `sideEffects` പ്രോപ്പർട്ടി ഉപയോഗിച്ച് വ്യക്തമാക്കാം. ഇത് ബണ്ട്ലറിന് ട്രീ ഷേക്കിംഗ് ഒപ്റ്റിമൈസ് ചെയ്യാൻ സഹായിക്കുന്നു.
5. കമ്പ്യൂട്ടേഷണലി തീവ്രമായ ജോലികൾക്കായി വെബ് വർക്കേഴ്സ് ഉപയോഗിക്കുന്നത്
പ്രധാന ത്രെഡിനെ ബ്ലോക്ക് ചെയ്യാതെ, പശ്ചാത്തല ത്രെഡിൽ ജാവാസ്ക്രിപ്റ്റ് കോഡ് പ്രവർത്തിപ്പിക്കാൻ വെബ് വർക്കേഴ്സ് നിങ്ങളെ അനുവദിക്കുന്നു. ഇമേജ് പ്രോസസ്സിംഗ്, ഡാറ്റാ അനാലിസിസ്, അല്ലെങ്കിൽ സങ്കീർണ്ണമായ കണക്കുകൂട്ടലുകൾ പോലുള്ള കമ്പ്യൂട്ടേഷണലി തീവ്രമായ ജോലികൾക്ക് ഇത് പ്രത്യേകിച്ചും ഉപയോഗപ്രദമാണ്. ഈ ജോലികൾ ഒരു വെബ് വർക്കറിലേക്ക് മാറ്റുന്നതിലൂടെ, നിങ്ങളുടെ യൂസർ ഇന്റർഫേസ് പ്രതികരണാത്മകമായി നിലനിർത്താൻ കഴിയും.
ഉദാഹരണം:
// main.js
const worker = new Worker('worker.js');
worker.onmessage = (event) => {
console.log('Result from worker:', event.data);
};
worker.postMessage({ data: 'some data for processing' });
// worker.js
self.onmessage = (event) => {
const data = event.data.data;
// Perform computationally intensive task
const result = processData(data);
self.postMessage(result);
};
function processData(data) {
// ... your processing logic
return 'processed data';
}
6. മൊഡ്യൂൾ ഫെഡറേഷൻ
വെബ്പാക്ക് 5-ൽ ലഭ്യമായ മൊഡ്യൂൾ ഫെഡറേഷൻ, വ്യത്യസ്ത ആപ്ലിക്കേഷനുകൾക്കിടയിൽ റൺടൈമിൽ കോഡ് പങ്കിടാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഇത് മൈക്രോ-ഫ്രണ്ടെൻഡുകൾ നിർമ്മിക്കാനും മറ്റ് ആപ്ലിക്കേഷനുകളിൽ നിന്ന് ഡൈനാമിക്കായി മൊഡ്യൂളുകൾ ലോഡ് ചെയ്യാനും നിങ്ങളെ പ്രാപ്തരാക്കുന്നു, ഇത് മൊത്തത്തിലുള്ള ബണ്ടിൽ വലുപ്പം കുറയ്ക്കുകയും പ്രകടനം മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നു.
ഉദാഹരണം:
നിങ്ങൾക്ക് `app1`, `app2` എന്നിങ്ങനെ രണ്ട് ആപ്ലിക്കേഷനുകൾ ഉണ്ടെന്ന് കരുതുക. `app1`-ൽ നിന്ന് `app2`-ലേക്ക് ഒരു ബട്ടൺ കമ്പോണന്റ് പങ്കിടാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു.
app1 (webpack.config.js):
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other configurations
plugins: [
new ModuleFederationPlugin({
name: 'app1',
filename: 'remoteEntry.js',
exposes: {
'./Button': './src/Button.js'
}
})
]
};
app2 (webpack.config.js):
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other configurations
plugins: [
new ModuleFederationPlugin({
name: 'app2',
remotes: {
app1: 'app1@http://localhost:3000/remoteEntry.js'
}
})
]
};
`app2`-ൽ, നിങ്ങൾക്ക് ഇപ്പോൾ `app1`-ൽ നിന്ന് ബട്ടൺ കമ്പോണന്റ് ഇമ്പോർട്ട് ചെയ്യാനും ഉപയോഗിക്കാനും കഴിയും:
import Button from 'app1/Button';
കോഡ് സ്പ്ലിറ്റിംഗിനായുള്ള ടൂളുകളും ലൈബ്രറികളും
നിങ്ങളുടെ പ്രോജക്റ്റുകളിൽ കോഡ് സ്പ്ലിറ്റിംഗ് നടപ്പിലാക്കാൻ സഹായിക്കുന്ന നിരവധി ടൂളുകളും ലൈബ്രറികളും ഉണ്ട്:
- വെബ്പാക്ക്: എൻട്രി പോയിന്റ് സ്പ്ലിറ്റിംഗ്, ഡൈനാമിക് ഇംപോർട്ട്സ്, വെണ്ടർ സ്പ്ലിറ്റിംഗ് എന്നിവയുൾപ്പെടെ വിവിധ കോഡ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകളെ പിന്തുണയ്ക്കുന്ന ശക്തവും വൈവിധ്യപൂർണ്ണവുമായ ഒരു മൊഡ്യൂൾ ബണ്ട്ലർ.
- റോൾഅപ്പ്: ട്രീ ഷേക്കിംഗിലും ഉയർന്ന ഒപ്റ്റിമൈസ് ചെയ്ത ബണ്ടിലുകൾ നിർമ്മിക്കുന്നതിലും മികവ് പുലർത്തുന്ന ഒരു മൊഡ്യൂൾ ബണ്ട്ലർ.
- പാർസൽ: കുറഞ്ഞ സജ്ജീകരണത്തോടെ കോഡ് സ്പ്ലിറ്റിംഗ് സ്വയമേവ കൈകാര്യം ചെയ്യുന്ന ഒരു സീറോ-കോൺഫിഗറേഷൻ ബണ്ട്ലർ.
- റിയാക്ട്.ലേസി: ഡൈനാമിക് ഇംപോർട്ട്സ് ഉപയോഗിച്ച് കമ്പോണന്റുകൾ ലേസി-ലോഡ് ചെയ്യുന്നതിനുള്ള ഒരു ബിൽറ്റ്-ഇൻ റിയാക്ട് എപിഐ.
- ലോഡബിൾ കമ്പോണന്റ്സ്: റിയാക്ടിൽ കോഡ് സ്പ്ലിറ്റിംഗിനായുള്ള ഒരു ഹയർ-ഓർഡർ കമ്പോണന്റ്.
കോഡ് സ്പ്ലിറ്റിംഗിനായുള്ള മികച്ച രീതികൾ
കോഡ് സ്പ്ലിറ്റിംഗ് ഫലപ്രദമായി നടപ്പിലാക്കാൻ, ഇനിപ്പറയുന്ന മികച്ച രീതികൾ പരിഗണിക്കുക:
- നിങ്ങളുടെ ആപ്ലിക്കേഷൻ വിശകലനം ചെയ്യുക: വലിയ കമ്പോണന്റുകൾ, അപൂർവ്വമായി ഉപയോഗിക്കുന്ന ഫീച്ചറുകൾ, അല്ലെങ്കിൽ റൂട്ട്-അടിസ്ഥാനത്തിലുള്ള അതിരുകൾ എന്നിവയിൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ച്, കോഡ് സ്പ്ലിറ്റിംഗിന് ഏറ്റവും കൂടുതൽ സ്വാധീനം ചെലുത്താൻ കഴിയുന്ന മേഖലകൾ തിരിച്ചറിയുക.
- പ്രകടന ബജറ്റുകൾ സജ്ജമാക്കുക: ടാർഗെറ്റ് ലോഡ് സമയങ്ങൾ അല്ലെങ്കിൽ ബണ്ടിൽ വലുപ്പങ്ങൾ പോലുള്ള നിങ്ങളുടെ വെബ്സൈറ്റിനായുള്ള പ്രകടന ലക്ഷ്യങ്ങൾ നിർവചിക്കുക, നിങ്ങളുടെ കോഡ് സ്പ്ലിറ്റിംഗ് ശ്രമങ്ങളെ നയിക്കാൻ ഈ ബജറ്റുകൾ ഉപയോഗിക്കുക.
- പ്രകടനം നിരീക്ഷിക്കുക: കോഡ് സ്പ്ലിറ്റിംഗ് നടപ്പിലാക്കിയതിന് ശേഷം നിങ്ങളുടെ വെബ്സൈറ്റിന്റെ പ്രകടനം ട്രാക്ക് ചെയ്യുക, അത് ആഗ്രഹിച്ച ഫലങ്ങൾ നൽകുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക. പ്രകടന മെട്രിക്കുകൾ അളക്കാൻ ഗൂഗിൾ പേജ്സ്പീഡ് ഇൻസൈറ്റ്സ്, വെബ്പേജ്ടെസ്റ്റ്, അല്ലെങ്കിൽ ലൈറ്റ്ഹൗസ് പോലുള്ള ഉപകരണങ്ങൾ ഉപയോഗിക്കുക.
- കാഷിംഗ് ഒപ്റ്റിമൈസ് ചെയ്യുക: തുടർന്നുള്ള സന്ദർശനങ്ങളിൽ ഉപയോക്താക്കൾക്ക് കോഡ് ഡൗൺലോഡ് ചെയ്യേണ്ടതിന്റെ ആവശ്യകത കുറയ്ക്കുന്നതിന് ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകൾ ശരിയായി കാഷെ ചെയ്യാൻ നിങ്ങളുടെ സെർവർ കോൺഫിഗർ ചെയ്യുക. ഉപയോക്താക്കൾക്ക് എല്ലായ്പ്പോഴും കോഡിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് ലഭിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കാൻ കാഷെ-ബസ്റ്റിംഗ് ടെക്നിക്കുകൾ ഉപയോഗിക്കുക (ഉദാഹരണത്തിന്, ഫയൽ നാമത്തിൽ ഒരു ഹാഷ് ചേർക്കുന്നത്).
- ഒരു കണ്ടന്റ് ഡെലിവറി നെറ്റ്വർക്ക് (സിഡിഎൻ) ഉപയോഗിക്കുക: ലോകമെമ്പാടുമുള്ള ഉപയോക്താക്കൾക്ക് ലോഡിംഗ് സമയം മെച്ചപ്പെടുത്തുന്നതിന് നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകൾ ഒരു സിഡിഎൻ-ൽ വിതരണം ചെയ്യുക.
- ഉപയോക്തൃ ജനസംഖ്യാശാസ്ത്രം പരിഗണിക്കുക: നിങ്ങളുടെ ലക്ഷ്യമിടുന്ന പ്രേക്ഷകരുടെ പ്രത്യേക ആവശ്യങ്ങൾക്കനുസരിച്ച് നിങ്ങളുടെ കോഡ് സ്പ്ലിറ്റിംഗ് തന്ത്രം ക്രമീകരിക്കുക. ഉദാഹരണത്തിന്, നിങ്ങളുടെ ഉപയോക്താക്കളിൽ ഒരു പ്രധാന ഭാഗം വേഗത കുറഞ്ഞ ഇന്റർനെറ്റ് കണക്ഷനുകളിലാണെങ്കിൽ, നിങ്ങൾക്ക് കോഡ് സ്പ്ലിറ്റിംഗിൽ കൂടുതൽ ശ്രദ്ധിക്കേണ്ടി വന്നേക്കാം.
- ഓട്ടോമേറ്റഡ് ബണ്ടിൽ അനാലിസിസ്: നിങ്ങളുടെ ബണ്ടിൽ വലുപ്പങ്ങൾ ദൃശ്യവൽക്കരിക്കാനും ഒപ്റ്റിമൈസേഷനുള്ള അവസരങ്ങൾ കണ്ടെത്താനും വെബ്പാക്ക് ബണ്ടിൽ അനലൈസർ പോലുള്ള ഉപകരണങ്ങൾ ഉപയോഗിക്കുക.
യഥാർത്ഥ ലോക ഉദാഹരണങ്ങളും കേസ് സ്റ്റഡീസും
നിരവധി കമ്പനികൾ അവരുടെ വെബ്സൈറ്റ് പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനായി കോഡ് സ്പ്ലിറ്റിംഗ് വിജയകരമായി നടപ്പിലാക്കിയിട്ടുണ്ട്. ഏതാനും ഉദാഹരണങ്ങൾ താഴെ നൽകുന്നു:
- ഗൂഗിൾ: ഗൂഗിൾ അതിന്റെ വെബ് ആപ്ലിക്കേഷനുകളായ ജിമെയിൽ, ഗൂഗിൾ മാപ്സ് എന്നിവയിൽ വേഗതയേറിയതും പ്രതികരണാത്മകവുമായ ഉപയോക്തൃ അനുഭവം നൽകുന്നതിനായി കോഡ് സ്പ്ലിറ്റിംഗ് വ്യാപകമായി ഉപയോഗിക്കുന്നു.
- ഫേസ്ബുക്ക്: ഫേസ്ബുക്ക് അതിന്റെ വിവിധ ഫീച്ചറുകളുടെയും കമ്പോണന്റുകളുടെയും ലോഡിംഗ് ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിന് കോഡ് സ്പ്ലിറ്റിംഗ് ഉപയോഗിക്കുന്നു, ഉപയോക്താക്കൾക്ക് ആവശ്യമുള്ള കോഡ് മാത്രം ഡൗൺലോഡ് ചെയ്താൽ മതിയെന്ന് ഉറപ്പാക്കുന്നു.
- നെറ്റ്ഫ്ലിക്സ്: നെറ്റ്ഫ്ലിക്സ് അതിന്റെ വെബ് ആപ്ലിക്കേഷന്റെ സ്റ്റാർട്ടപ്പ് സമയം മെച്ചപ്പെടുത്തുന്നതിന് കോഡ് സ്പ്ലിറ്റിംഗ് ഉപയോഗിക്കുന്നു, ഇത് ഉപയോക്താക്കൾക്ക് വേഗത്തിൽ കണ്ടന്റ് സ്ട്രീം ചെയ്യാൻ തുടങ്ങാൻ അനുവദിക്കുന്നു.
- വലിയ ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോമുകൾ (ആമസോൺ, ആലിബാബ): ഈ പ്ലാറ്റ്ഫോമുകൾ ലോകമെമ്പാടുമുള്ള ദശലക്ഷക്കണക്കിന് ഉപയോക്താക്കൾക്ക് ഷോപ്പിംഗ് അനുഭവം മെച്ചപ്പെടുത്തിക്കൊണ്ട്, ഉൽപ്പന്ന പേജ് ലോഡിംഗ് സമയം ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിന് കോഡ് സ്പ്ലിറ്റിംഗ് പ്രയോജനപ്പെടുത്തുന്നു. ഉപയോക്തൃ ഇടപെടലിനെ അടിസ്ഥാനമാക്കി അവർ ഉൽപ്പന്ന വിശദാംശങ്ങൾ, അനുബന്ധ ഇനങ്ങൾ, ഉപയോക്തൃ അവലോകനങ്ങൾ എന്നിവ ഡൈനാമിക്കായി ലോഡ് ചെയ്യുന്നു.
ഈ ഉദാഹരണങ്ങൾ വെബ്സൈറ്റ് പ്രകടനവും ഉപയോക്തൃ അനുഭവവും മെച്ചപ്പെടുത്തുന്നതിൽ കോഡ് സ്പ്ലിറ്റിംഗിന്റെ ഫലപ്രാപ്തി കാണിക്കുന്നു. കോഡ് സ്പ്ലിറ്റിംഗിന്റെ തത്വങ്ങൾ വിവിധ പ്രദേശങ്ങളിലും ഇന്റർനെറ്റ് വേഗതയിലും സാർവത്രികമായി ബാധകമാണ്. വേഗത കുറഞ്ഞ ഇന്റർനെറ്റ് കണക്ഷനുകളുള്ള പ്രദേശങ്ങളിൽ പ്രവർത്തിക്കുന്ന കമ്പനികൾക്ക് ആക്രമണാത്മക കോഡ് സ്പ്ലിറ്റിംഗ് തന്ത്രങ്ങൾ നടപ്പിലാക്കുന്നതിലൂടെ ഏറ്റവും പ്രധാനപ്പെട്ട പ്രകടന മെച്ചപ്പെടുത്തലുകൾ കാണാൻ കഴിയും.
ഉപസംഹാരം
ജാവാസ്ക്രിപ്റ്റ് ബണ്ടിലുകൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിനും വെബ്സൈറ്റ് പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനുമുള്ള ഒരു നിർണായക സാങ്കേതികതയാണ് കോഡ് സ്പ്ലിറ്റിംഗ്. നിങ്ങളുടെ ആപ്ലിക്കേഷന്റെ കോഡിനെ ചെറുതും കൈകാര്യം ചെയ്യാൻ എളുപ്പമുള്ളതുമായ ഭാഗങ്ങളായി വിഭജിക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് പ്രാരംഭ ലോഡ് സമയം കുറയ്ക്കാനും ഉപയോക്തൃ അനുഭവം വർദ്ധിപ്പിക്കാനും കാഷിംഗ് കാര്യക്ഷമത മെച്ചപ്പെടുത്താനും കഴിയും. വിവിധതരം കോഡ് സ്പ്ലിറ്റിംഗ് മനസ്സിലാക്കുകയും മികച്ച രീതികൾ സ്വീകരിക്കുകയും ചെയ്യുന്നതിലൂടെ, നിങ്ങളുടെ വെബ് ആപ്ലിക്കേഷനുകളുടെ പ്രകടനം ഗണ്യമായി മെച്ചപ്പെടുത്താനും ഉപയോക്താക്കൾക്ക് മികച്ച അനുഭവം നൽകാനും കഴിയും.
വെബ് ആപ്ലിക്കേഷനുകൾ കൂടുതൽ സങ്കീർണ്ണമാകുമ്പോൾ, കോഡ് സ്പ്ലിറ്റിംഗ് കൂടുതൽ പ്രാധാന്യമർഹിക്കും. ഏറ്റവും പുതിയ കോഡ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകളിലും ടൂളുകളിലും അപ്-ടു-ഡേറ്റ് ആയിരിക്കുന്നതിലൂടെ, നിങ്ങളുടെ വെബ്സൈറ്റുകൾ പ്രകടനത്തിനായി ഒപ്റ്റിമൈസ് ചെയ്തിട്ടുണ്ടെന്നും ലോകമെമ്പാടും തടസ്സമില്ലാത്ത ഉപയോക്തൃ അനുഭവം നൽകുന്നുവെന്നും ഉറപ്പാക്കാൻ കഴിയും.