SWC ట్రాన్స్ఫార్మ్ కాన్ఫిగరేషన్పై పట్టు సాధించడం ద్వారా Next.js పనితీరును గరిష్ట స్థాయికి తీసుకువెళ్లండి. ఈ సమగ్ర గైడ్ గ్లోబల్ వెబ్ అప్లికేషన్ల కోసం అధునాతన ఆప్టిమైజేషన్ పద్ధతులను వివరిస్తుంది.
Next.js కంపైలర్ ఆప్టిమైజేషన్లు: SWC ట్రాన్స్ఫార్మ్ కాన్ఫిగరేషన్పై పట్టు సాధించడం
Next.js, ఒక శక్తివంతమైన రియాక్ట్ ఫ్రేమ్వర్క్, అసాధారణమైన పనితీరు సామర్థ్యాలను అందిస్తుంది. గరిష్ట పనితీరును సాధించడంలో ఒక ముఖ్యమైన అంశం స్పీడీ వెబ్ కంపైలర్ (SWC)ను అర్థం చేసుకోవడం మరియు కాన్ఫిగర్ చేయడం. ఇది వెర్షన్ 12 నుండి Next.js కోసం డిఫాల్ట్ కంపైలర్. ఈ సమగ్ర గైడ్ SWC ట్రాన్స్ఫార్మ్ కాన్ఫిగరేషన్ యొక్క సంక్లిష్టతలను వివరిస్తుంది, మీ Next.js అప్లికేషన్లను గరిష్ట పనితీరు మరియు గ్లోబల్ స్కేలబిలిటీ కోసం చక్కగా ట్యూన్ చేయడానికి మీకు అధికారం ఇస్తుంది.
SWC అంటే ఏమిటి మరియు ఇది ఎందుకు ముఖ్యం?
SWC అనేది కంపైలేషన్, బండ్లింగ్, మినిఫికేషన్ మరియు మరిన్నింటి కోసం ఒక నెక్స్ట్-జనరేషన్ ప్లాట్ఫారమ్. ఇది రస్ట్ (Rust)లో వ్రాయబడింది మరియు Next.js కోసం మునుపటి డిఫాల్ట్ కంపైలర్ అయిన బేబెల్ (Babel) కంటే గణనీయంగా వేగంగా ఉండేలా రూపొందించబడింది. ఈ వేగం తక్కువ బిల్డ్ సమయాలు, వేగవంతమైన డెవలప్మెంట్ ఇటరేషన్లు, మరియు అంతిమంగా, మెరుగైన డెవలపర్ అనుభవానికి దారితీస్తుంది. SWC ఈ క్రింది పనులను నిర్వహిస్తుంది:
- ట్రాన్స్పైలేషన్ (Transpilation): ఆధునిక జావాస్క్రిప్ట్ మరియు టైప్స్క్రిప్ట్ కోడ్ను వివిధ బ్రౌజర్లకు అనుకూలంగా ఉండే పాత వెర్షన్లుగా మార్చడం.
- బండ్లింగ్ (Bundling): వేగవంతమైన లోడింగ్ కోసం బహుళ జావాస్క్రిప్ట్ ఫైల్లను కొన్ని ఆప్టిమైజ్డ్ బండిల్స్గా కలపడం.
- మినిఫికేషన్ (Minification): వైట్స్పేస్ మరియు కామెంట్ల వంటి అనవసరమైన అక్షరాలను తొలగించడం ద్వారా కోడ్ పరిమాణాన్ని తగ్గించడం.
- కోడ్ ఆప్టిమైజేషన్ (Code Optimization): కోడ్ సామర్థ్యం మరియు పనితీరును మెరుగుపరచడానికి వివిధ రూపాంతరాలను వర్తింపజేయడం.
SWCని ఉపయోగించడం ద్వారా, Next.js అప్లికేషన్లు ముఖ్యంగా పెద్ద మరియు సంక్లిష్ట ప్రాజెక్ట్లలో గణనీయమైన పనితీరు లాభాలను సాధించగలవు. డెవలప్మెంట్ సమయంలో వేగవంతమైన మెరుగుదలలు కనిపిస్తాయి, ఫీడ్బ్యాక్ లూప్లను తగ్గిస్తాయి, మరియు ప్రొడక్షన్లో, ప్రపంచవ్యాప్తంగా వినియోగదారులకు వేగవంతమైన ప్రారంభ పేజీ లోడ్లకు దారితీస్తుంది.
SWC ట్రాన్స్ఫార్మ్ కాన్ఫిగరేషన్ను అర్థం చేసుకోవడం
SWC యొక్క శక్తి దాని కాన్ఫిగర్ చేయగల ట్రాన్స్ఫార్మ్లలో ఉంది. ఈ ట్రాన్స్ఫార్మ్లు కంపైలేషన్ ప్రక్రియలో మీ కోడ్ను సవరించే ప్లగిన్లు. ఈ ట్రాన్స్ఫార్మ్లను అనుకూలీకరించడం ద్వారా, మీరు మీ నిర్దిష్ట ప్రాజెక్ట్ అవసరాలకు SWC ప్రవర్తనను సర్దుబాటు చేయవచ్చు మరియు పనితీరును ఆప్టిమైజ్ చేయవచ్చు. SWC కోసం కాన్ఫిగరేషన్ సాధారణంగా మీ `next.config.js` లేదా `next.config.mjs` ఫైల్లో నిర్వహించబడుతుంది.
SWC ట్రాన్స్ఫార్మ్ కాన్ఫిగరేషన్ యొక్క ముఖ్య అంశాల విచ్ఛిన్నం ఇక్కడ ఉంది:
1. `swcMinify` ఆప్షన్
`next.config.js` లోని `swcMinify` ఆప్షన్, మినిఫికేషన్ కోసం SWC ఉపయోగించబడుతుందా లేదా అని నియంత్రిస్తుంది. డిఫాల్ట్గా, ఇది `true` కి సెట్ చేయబడింది, ఇది SWC యొక్క అంతర్నిర్మిత మినిఫైయర్ (terser)ను ప్రారంభిస్తుంది. మీరు కస్టమ్ మినిఫికేషన్ సెటప్ కలిగి ఉంటే లేదా అనుకూలత సమస్యలను ఎదుర్కొంటే దీనిని నిలిపివేయడం అవసరం కావచ్చు, కానీ సాధారణంగా, గరిష్ట పనితీరు కోసం దీనిని ప్రారంభించి ఉంచడం మంచిది.
// next.config.js
module.exports = {
swcMinify: true,
};
2. `@swc/core` ని నేరుగా ఉపయోగించడం (అధునాతన)
SWC యొక్క రూపాంతరాలపై మరింత సూక్ష్మ నియంత్రణ కోసం, మీరు నేరుగా `@swc/core` ప్యాకేజీని ఉపయోగించవచ్చు. ఇది కంపైలేషన్ ప్రక్రియ యొక్క వివిధ అంశాల కోసం కస్టమ్ కాన్ఫిగరేషన్లను పేర్కొనడానికి మిమ్మల్ని అనుమతిస్తుంది. ఈ విధానం మరింత సంక్లిష్టమైనది కానీ అత్యంత సౌలభ్యాన్ని అందిస్తుంది.
3. ముఖ్యమైన SWC ట్రాన్స్ఫార్మ్లు మరియు ఆప్షన్లు
అనేక ముఖ్యమైన SWC ట్రాన్స్ఫార్మ్లు మరియు ఆప్షన్లు మీ అప్లికేషన్ పనితీరును గణనీయంగా ప్రభావితం చేస్తాయి. ఇక్కడ కొన్ని అత్యంత ముఖ్యమైనవి ఉన్నాయి:
a. `jsc.parser`
`jsc.parser` విభాగం జావాస్క్రిప్ట్ మరియు టైప్స్క్రిప్ట్ పార్సర్ను కాన్ఫిగర్ చేస్తుంది. మీరు ఈ క్రింది ఆప్షన్లను పేర్కొనవచ్చు:
- `syntax`: జావాస్క్రిప్ట్ లేదా టైప్స్క్రిప్ట్ (`ecmascript` లేదా `typescript`) పార్స్ చేయాలో నిర్దేశిస్తుంది.
- `jsx`: JSX మద్దతును ప్రారంభిస్తుంది.
- `decorators`: డెకరేటర్ మద్దతును ప్రారంభిస్తుంది.
- `dynamicImport`: డైనమిక్ ఇంపోర్ట్ సింటాక్స్ను ప్రారంభిస్తుంది.
// next.config.js
module.exports = {
compiler: {
jsc: {
parser: {
syntax: 'typescript',
jsx: true,
decorators: true,
dynamicImport: true,
},
},
},
};
b. `jsc.transform`
`jsc.transform` విభాగంలో మీరు కోర్ ట్రాన్స్ఫర్మేషన్ లాజిక్ను కాన్ఫిగర్ చేస్తారు. ఇక్కడే మీరు వివిధ ట్రాన్స్ఫార్మ్లను ప్రారంభించవచ్చు మరియు అనుకూలీకరించవచ్చు.
i. `legacyDecorator`
మీరు డెకరేటర్లను ఉపయోగిస్తుంటే, పాత డెకరేటర్ సింటాక్స్తో అనుకూలత కోసం `legacyDecorator` ఆప్షన్ చాలా ముఖ్యం. మీ ప్రాజెక్ట్ లెగసీ డెకరేటర్లను ఉపయోగిస్తుంటే దీనిని `true` కి సెట్ చేయండి.
ii. `react`
`react` ట్రాన్స్ఫార్మ్ రియాక్ట్-నిర్దిష్ట రూపాంతరాలను నిర్వహిస్తుంది, అవి:
- `runtime`: రియాక్ట్ రన్టైమ్ను నిర్దేశిస్తుంది (`classic` లేదా `automatic`). `automatic` కొత్త JSX ట్రాన్స్ఫార్మ్ను ఉపయోగిస్తుంది.
- `pragma`: JSX ఎలిమెంట్ల కోసం ఉపయోగించాల్సిన ఫంక్షన్ను నిర్దేశిస్తుంది (డిఫాల్ట్గా `React.createElement`).
- `pragmaFrag`: JSX ఫ్రాగ్మెంట్ల కోసం ఉపయోగించాల్సిన ఫంక్షన్ను నిర్దేశిస్తుంది (డిఫాల్ట్గా `React.Fragment`).
- `throwIfNamespace`: ఒక JSX ఎలిమెంట్ నేమ్స్పేస్ను ఉపయోగిస్తే ఎర్రర్ ఇస్తుంది.
- `development`: డెవలప్మెంట్ బిల్డ్లలో రియాక్ట్ కాంపోనెంట్లకు ఫైల్ పేర్లను జోడించడం వంటి డెవలప్మెంట్-నిర్దిష్ట ఫీచర్లను ప్రారంభిస్తుంది.
- `useBuiltins`: నేరుగా ఇంపోర్ట్ చేయడానికి బదులుగా అంతర్నిర్మిత బేబెల్ హెల్పర్లను ఉపయోగించండి.
- `refresh`: ఫాస్ట్ రిఫ్రెష్ (హాట్ రీలోడింగ్) ప్రారంభిస్తుంది.
// next.config.js
module.exports = {
compiler: {
jsc: {
transform: {
react: {
runtime: 'automatic',
development: process.env.NODE_ENV === 'development',
refresh: true,
},
},
},
},
};
iii. `optimizer`
`optimizer` ట్రాన్స్ఫార్మ్లో కాన్స్టాంట్ ప్రొపగేషన్ మరియు డెడ్ కోడ్ ఎలిమినేషన్ వంటి కోడ్ సామర్థ్యాన్ని మెరుగుపరిచే ఆప్టిమైజేషన్లు ఉంటాయి. ఈ ఆప్టిమైజర్లను ప్రారంభించడం ద్వారా చిన్న బండిల్ సైజ్లు మరియు వేగవంతమైన ఎగ్జిక్యూషన్ సమయాలు లభిస్తాయి.
// next.config.js
module.exports = {
compiler: {
jsc: {
transform: {
optimizer: {
simplify: true,
globals: {
vars: {},
},
},
},
},
},
};
c. `jsc.target`
`jsc.target` ఆప్షన్ ECMAScript టార్గెట్ వెర్షన్ను నిర్దేశిస్తుంది. ఇది SWC ఏ స్థాయి జావాస్క్రిప్ట్ సింటాక్స్కు ట్రాన్స్పైల్ చేస్తుందో నిర్ణయిస్తుంది. దీనిని తక్కువ వెర్షన్కు సెట్ చేయడం విస్తృత బ్రౌజర్ అనుకూలతను నిర్ధారిస్తుంది, కానీ ఇది కొత్త భాషా ఫీచర్ల వాడకాన్ని కూడా పరిమితం చేయవచ్చు.
// next.config.js
module.exports = {
compiler: {
jsc: {
target: 'es5',
},
},
};
గమనిక: `es5` విస్తృత అనుకూలతను అందిస్తున్నప్పటికీ, ఇది ఆధునిక జావాస్క్రిప్ట్ యొక్క కొన్ని పనితీరు ప్రయోజనాలను తగ్గించవచ్చు. మీ టార్గెట్ ప్రేక్షకులు ఆధునిక బ్రౌజర్లను ఉపయోగిస్తుంటే `es2017` లేదా `es2020` వంటి టార్గెట్ను ఉపయోగించడాన్ని పరిగణించండి.
d. `minify`
`jsc` కింద `minify` ఆప్షన్ ఉపయోగించి మినిఫికేషన్ను ప్రారంభించండి లేదా నిలిపివేయండి. `swcMinify` సాధారణంగా దీనిని నిర్వహిస్తున్నప్పటికీ, `@swc/core` నేరుగా ఉపయోగించబడే నిర్దిష్ట సందర్భాలలో మీరు దీనిని నేరుగా కాన్ఫిగర్ చేయవలసి రావచ్చు.
// next.config.js
module.exports = {
compiler: {
jsc: {
minify: true,
},
},
};
4. ఉదాహరణ కాన్ఫిగరేషన్లు
SWC ట్రాన్స్ఫార్మ్లను ఎలా అనుకూలీకరించాలో ప్రదర్శించే కొన్ని ఉదాహరణ కాన్ఫిగరేషన్లు ఇక్కడ ఉన్నాయి:
ఉదాహరణ 1: లెగసీ డెకరేటర్ సపోర్ట్ను ప్రారంభించడం
// next.config.js
module.exports = {
compiler: {
jsc: {
parser: {
syntax: 'typescript',
decorators: true,
},
transform: {
legacyDecorator: true,
decoratorMetadata: true,
},
},
},
};
ఉదాహరణ 2: డెవలప్మెంట్ కోసం రియాక్ట్ ట్రాన్స్ఫార్మ్ను కాన్ఫిగర్ చేయడం
// next.config.js
module.exports = {
compiler: {
jsc: {
transform: {
react: {
runtime: 'automatic',
development: process.env.NODE_ENV === 'development',
refresh: true,
},
},
},
},
};
ఉదాహరణ 3: ఒక నిర్దిష్ట ECMAScript టార్గెట్ను సెట్ చేయడం
// next.config.js
module.exports = {
compiler: {
jsc: {
target: 'es2020',
},
},
};
SWC కాన్ఫిగరేషన్ ట్రబుల్షూటింగ్
SWC ట్రాన్స్ఫార్మ్లను కాన్ఫిగర్ చేయడం కొన్నిసార్లు సవాలుగా ఉంటుంది. ఇక్కడ కొన్ని సాధారణ సమస్యలు మరియు వాటిని ఎలా పరిష్కరించాలో ఉన్నాయి:
- అనూహ్యమైన ఎర్రర్లు: మీ SWC కాన్ఫిగరేషన్ను సవరించిన తర్వాత మీరు అనూహ్యమైన ఎర్రర్లను ఎదుర్కొంటే, మీ సింటాక్స్ను రెండుసార్లు తనిఖీ చేయండి మరియు మీరు చెల్లుబాటు అయ్యే ఆప్షన్లను ఉపయోగిస్తున్నారని నిర్ధారించుకోండి. అందుబాటులో ఉన్న ఆప్షన్ల పూర్తి జాబితా కోసం అధికారిక SWC డాక్యుమెంటేషన్ను సంప్రదించండి.
- అనుకూలత సమస్యలు: కొన్ని ట్రాన్స్ఫార్మ్లు కొన్ని లైబ్రరీలు లేదా ఫ్రేమ్వర్క్లతో అనుకూలంగా ఉండకపోవచ్చు. మీరు అనుకూలత సమస్యలను ఎదుర్కొంటే, సమస్యాత్మక ట్రాన్స్ఫార్మ్ను నిలిపివేయడానికి లేదా ప్రత్యామ్నాయ పరిష్కారాన్ని కనుగొనడానికి ప్రయత్నించండి.
- పనితీరు క్షీణత: SWC సాధారణంగా బేబెల్ కంటే వేగంగా ఉన్నప్పటికీ, తప్పుగా కాన్ఫిగర్ చేయబడిన ట్రాన్స్ఫార్మ్లు కొన్నిసార్లు పనితీరు క్షీణతకు దారితీయవచ్చు. మీ SWC కాన్ఫిగరేషన్ను సవరించిన తర్వాత మీరు వేగం తగ్గడాన్ని గమనిస్తే, మీ మార్పులను వెనక్కి తీసుకోవడానికి లేదా విభిన్న ఆప్షన్లతో ప్రయోగాలు చేయడానికి ప్రయత్నించండి.
- కాష్ను చెల్లుబాటు చేయకుండా చేయడం: కొన్నిసార్లు Next.js లేదా SWC పాత కాన్ఫిగరేషన్లను కాష్ చేయవచ్చు. `next.config.js` ఫైల్లో మార్పులు చేసిన తర్వాత మీ Next.js కాష్ (`.next` ఫోల్డర్) ను క్లియర్ చేయడానికి లేదా మీ డెవలప్మెంట్ సర్వర్ను పునఃప్రారంభించడానికి ప్రయత్నించండి.
Next.js లో SWC ఆప్టిమైజేషన్ కోసం ఉత్తమ పద్ధతులు
మీ Next.js అప్లికేషన్లలో SWC ప్రయోజనాలను గరిష్టంగా పొందడానికి, ఈ ఉత్తమ పద్ధతులను అనుసరించండి:
- SWCని అప్డేట్ చేయండి: తాజా పనితీరు మెరుగుదలలు మరియు బగ్ పరిష్కారాల ప్రయోజనం పొందడానికి మీ Next.js మరియు `@swc/core` ప్యాకేజీలను క్రమం తప్పకుండా అప్డేట్ చేయండి.
- మీ అప్లికేషన్ను ప్రొఫైల్ చేయండి: పనితీరు అడ్డంకులను గుర్తించడానికి మరియు ఏ ట్రాన్స్ఫార్మ్లు అత్యధిక ప్రభావాన్ని చూపుతున్నాయో నిర్ణయించడానికి ప్రొఫైలింగ్ సాధనాలను ఉపయోగించండి.
- వివిధ కాన్ఫిగరేషన్లతో ప్రయోగాలు చేయండి: మీ ప్రాజెక్ట్ కోసం ఉత్తమ సెట్టింగ్లను కనుగొనడానికి వివిధ SWC కాన్ఫిగరేషన్లతో ప్రయోగాలు చేయడానికి బయపడకండి.
- డాక్యుమెంటేషన్ను సంప్రదించండి: అందుబాటులో ఉన్న ట్రాన్స్ఫార్మ్లు మరియు ఆప్షన్లపై వివరణాత్మక సమాచారం కోసం అధికారిక SWC మరియు Next.js డాక్యుమెంటేషన్ను చూడండి.
- ఎన్విరాన్మెంట్ వేరియబుల్స్ను ఉపయోగించండి: పర్యావరణం (డెవలప్మెంట్, ప్రొడక్షన్, మొదలైనవి) ఆధారంగా నిర్దిష్ట ట్రాన్స్ఫార్మ్లను షరతులతో ప్రారంభించడానికి లేదా నిలిపివేయడానికి ఎన్విరాన్మెంట్ వేరియబుల్స్ (`NODE_ENV` వంటివి) ఉపయోగించండి.
SWC వర్సెస్ బేబెల్: ఒక త్వరిత పోలిక
Next.js యొక్క పాత వెర్షన్లలో బేబెల్ డిఫాల్ట్ కంపైలర్ అయినప్పటికీ, SWC ముఖ్యంగా వేగం పరంగా గణనీయమైన ప్రయోజనాలను అందిస్తుంది. ఇక్కడ ఒక త్వరిత పోలిక ఉంది:
ఫీచర్ | SWC | బేబెల్ |
---|---|---|
వేగం | గణనీయంగా వేగవంతమైనది | నెమ్మదిగా ఉంటుంది |
దీనిలో వ్రాయబడింది | రస్ట్ (Rust) | జావాస్క్రిప్ట్ |
Next.js లో డిఫాల్ట్ | అవును (Next.js 12 నుండి) | కాదు |
కాన్ఫిగరేషన్ సంక్లిష్టత | అధునాతన కాన్ఫిగరేషన్ల కోసం సంక్లిష్టంగా ఉండవచ్చు | అదే విధమైన సంక్లిష్టత |
ఎకోసిస్టమ్ | పెరుగుతోంది, కానీ బేబెల్ కంటే చిన్నది | పరిపక్వమైన మరియు విస్తృతమైనది |
SWC మరియు Next.js యొక్క భవిష్యత్తు
SWC నిరంతరం అభివృద్ధి చెందుతోంది, కొత్త ఫీచర్లు మరియు ఆప్టిమైజేషన్లు క్రమం తప్పకుండా జోడించబడుతున్నాయి. Next.js SWCని స్వీకరించడం కొనసాగిస్తున్నందున, మనం ఇంకా గొప్ప పనితీరు మెరుగుదలలు మరియు మరింత అధునాతన టూలింగ్ను ఆశించవచ్చు. Vercel యొక్క ఇంక్రిమెంటల్ బండ్లర్ అయిన టర్బోప్యాక్తో SWC యొక్క ఏకీకరణ, బిల్డ్ సమయాలను మరింత వేగవంతం చేసే మరియు డెవలపర్ అనుభవాన్ని మెరుగుపరిచే మరో ఆశాజనకమైన అభివృద్ధి.
ఇంకా, SWC మరియు టర్బోప్యాక్ వంటి సాధనాల చుట్టూ ఉన్న రస్ట్-ఆధారిత ఎకోసిస్టమ్ మెరుగైన భద్రత మరియు విశ్వసనీయతకు అవకాశాలను అందిస్తుంది. రస్ట్ యొక్క మెమరీ భద్రతా లక్షణాలు జావాస్క్రిప్ట్-ఆధారిత సాధనాలలో సాధారణంగా ఉండే కొన్ని రకాల దుర్బలత్వాలను నివారించడంలో సహాయపడతాయి.
ముగింపు
పనితీరు మరియు గ్లోబల్ స్కేలబిలిటీ కోసం Next.js అప్లికేషన్లను ఆప్టిమైజ్ చేయడానికి SWC ట్రాన్స్ఫార్మ్ కాన్ఫిగరేషన్పై పట్టు సాధించడం చాలా అవసరం. అందుబాటులో ఉన్న వివిధ ట్రాన్స్ఫార్మ్లు మరియు ఆప్షన్లను అర్థం చేసుకోవడం ద్వారా, మీరు మీ నిర్దిష్ట ప్రాజెక్ట్ అవసరాలకు అనుగుణంగా SWC ప్రవర్తనను చక్కగా ట్యూన్ చేయవచ్చు. మీ అప్లికేషన్ను ప్రొఫైల్ చేయడం, వివిధ కాన్ఫిగరేషన్లతో ప్రయోగాలు చేయడం, మరియు తాజా SWC మరియు Next.js విడుదలలతో అప్డేట్గా ఉండటం గుర్తుంచుకోండి. SWC మరియు దాని శక్తివంతమైన ఆప్టిమైజేషన్ సామర్థ్యాలను స్వీకరించడం ప్రపంచవ్యాప్తంగా వినియోగదారుల కోసం వేగవంతమైన, మరింత సమర్థవంతమైన, మరియు మరింత విశ్వసనీయమైన వెబ్ అప్లికేషన్లను నిర్మించడానికి మీకు అధికారం ఇస్తుంది.
ఈ గైడ్ SWCని అర్థం చేసుకోవడానికి మరియు ఉపయోగించుకోవడానికి ఒక దృఢమైన పునాదిని అందిస్తుంది. మీరు SWC కాన్ఫిగరేషన్లోకి లోతుగా వెళ్ళేటప్పుడు, తదుపరి మార్గదర్శకత్వం మరియు మద్దతు కోసం అధికారిక డాక్యుమెంటేషన్ మరియు కమ్యూనిటీ వనరులను సంప్రదించడం గుర్తుంచుకోండి. వెబ్ పనితీరు ప్రపంచం నిరంతరం అభివృద్ధి చెందుతోంది, మరియు వక్రరేఖకు ముందు ఉండటానికి నిరంతర అభ్యాసం కీలకం.