ஜாவாஸ்கிரிப்ட் ஸ்லைடுஷோவில் மறுநிகழ்வு சிக்கல்களைக் கையாளுதல்
ஜாவாஸ்கிரிப்ட் மூலம் முடிவற்ற ஸ்லைடுஷோவை உருவாக்கும்போது, செயல்பாடு அழைப்புகளுக்குள் மறுநிகழ்வைக் கையாள்வது ஒரு பொதுவான சவால். ஒரு செயல்பாடு தன்னை மீண்டும் மீண்டும் அழைக்கும் போது மறுநிகழ்வு ஏற்படுகிறது, இது ஒரு எல்லையற்ற சுழற்சி மற்றும் வளர்ந்து வரும் அழைப்பு அடுக்கிற்கு வழிவகுக்கும். படங்களைப் பெறுவது போன்ற ஒத்திசைவற்ற செயல்பாடுகளுக்கு ஸ்லைடுஷோ செயல்பாடு வாக்குறுதிகளைப் பயன்படுத்தினால் இது மிகவும் சிக்கலானது.
இந்தச் சூழ்நிலையில், குறியீடு சரியாகச் செயல்படும் போது, மறுநிகழ்வு உலாவியின் அழைப்பு அடுக்கை ஓவர்லோட் செய்யும் அபாயம் உள்ளது, இது செயல்திறன் சிக்கல்களுக்கு வழிவகுக்கும். ஜாவாஸ்கிரிப்ட்டின் கால் ஸ்டேக் எல்லையற்றது, எனவே மீண்டும் மீண்டும் மீண்டும் வரும் அழைப்புகள், அதிகப்படியான நினைவகப் பயன்பாடு காரணமாக உலாவி செயலிழந்து அல்லது பூட்டப்படலாம்.
சுழல்நிலை செயல்பாட்டை a உடன் மாற்ற முயற்சிக்கிறது போது (உண்மை) லூப் ஒரு கவர்ச்சியான தீர்வாகும், ஆனால் இந்த அணுகுமுறை அதிகப்படியான CPU ஆதாரங்களை உட்கொள்வதன் மூலம் உலாவியை முடக்கலாம். எனவே, பயன்படுத்தி ஸ்லைடுஷோ ஓட்டத்தை கட்டுப்படுத்தும் ஒரு கவனமாக அணுகுமுறை வாக்குறுதி அளிக்கிறார் செயல்திறன் மற்றும் ஸ்திரத்தன்மையை உறுதிப்படுத்துவது அவசியம்.
சுழல்நிலை தர்க்கத்தை கட்டுப்படுத்தப்பட்ட லூப் கட்டமைப்பாக மாற்றுவதன் மூலம் ஜாவாஸ்கிரிப்ட் செயல்பாடுகளில் மறுநிகழ்வைத் தவிர்ப்பது எப்படி என்பதை இந்தக் கட்டுரை ஆராய்கிறது. ஸ்லைடுஷோ செயல்பாட்டின் நிஜ-உலக எடுத்துக்காட்டில் நாங்கள் நடப்போம், மறுநிகழ்வு எங்கு சிக்கலாக இருக்கும் என்பதைக் கண்டறிந்து, உலாவியைப் பூட்டாமல் சிக்கலை எவ்வாறு தீர்ப்பது என்பதை விளக்குவோம்.
கால் ஸ்டாக் ஓவர்ஃப்ளோவைத் தவிர்க்க சுழல்நிலை ஜாவாஸ்கிரிப்ட் செயல்பாட்டை மாற்றுகிறது
ஜாவாஸ்கிரிப்ட் - மறுநிகழ்வைத் தவிர்ப்பதற்கான இடைவெளி வளையத்துடன் கூடிய வாக்குறுதி அடிப்படையிலான அணுகுமுறை
const duration = 2000; // Time to display each slide in milliseconds
const sizes = [[4000, 500], [1000, 4000], [600, 400], [100, 200], [4000, 4000]];
let n = 0;
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
function showSlides(duration) {
const myParent = document.querySelector('#slide-div');
setInterval(async () => {
let sizeIndex = n++ % sizes.length;
let w = sizes[sizeIndex][0];
let h = sizes[sizeIndex][1];
let myRandomizer = `https://placehold.co/${w}x${h}?text=${w}x${h}`;
try {
let myResponse = await fetch(myRandomizer);
let myBlob = await myResponse.blob();
let myUrl = URL.createObjectURL(myBlob);
URL.revokeObjectURL(myParent.querySelector('img').src);
myParent.querySelector('img').src = myUrl;
} catch (error) {
console.error('Error: ', error);
}
}, duration);
}
மறுநிகழ்வு இல்லாமல் ஒத்திசைவற்ற ஜாவாஸ்கிரிப்டைப் பயன்படுத்துதல்
ஜாவாஸ்கிரிப்ட் - ப்ரோமிஸுடன் ஒரு லூப்பைப் பயன்படுத்தி தீர்வு மற்றும் செட்இண்டர்வெல்லைத் தவிர்ப்பது
const duration = 2000; // Time to display each slide in milliseconds
const sizes = [[4000, 500], [1000, 4000], [600, 400], [100, 200], [4000, 4000]];
let n = 0;
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
async function showSlides(duration) {
const myParent = document.querySelector('#slide-div');
while (true) {
let sizeIndex = n++ % sizes.length;
let w = sizes[sizeIndex][0];
let h = sizes[sizeIndex][1];
let myRandomizer = `https://placehold.co/${w}x${h}?text=${w}x${h}`;
try {
let myResponse = await fetch(myRandomizer);
let myBlob = await myResponse.blob();
let myUrl = URL.createObjectURL(myBlob);
URL.revokeObjectURL(myParent.querySelector('img').src);
myParent.querySelector('img').src = myUrl;
} catch (error) {
console.error('Error: ', error);
}
await sleep(duration);
}
}
நிகழ்வு-உந்துதல் அணுகுமுறைகளுடன் மறுநிகழ்வைத் தவிர்ப்பது
ஜாவாஸ்கிரிப்ட் ஸ்லைடுஷோவில் மறுநிகழ்வு சிக்கலைத் தீர்ப்பதற்கான மற்றொரு முக்கிய அம்சம் நிகழ்வு சார்ந்த அணுகுமுறைகளை ஆராய்வது. போன்ற டைமர்களை நம்புவதற்கு பதிலாக இடைவெளியை அமைக்கவும் அல்லது சுழல்நிலை அழைப்புகள், நிகழ்வு-உந்துதல் நிரலாக்கமானது நிகழ்வுகளுக்கு மாறும் வகையில் பதிலளிக்க ஸ்கிரிப்டை அனுமதிக்கிறது. எடுத்துக்காட்டாக, நிலையான இடைவெளியில் ஸ்லைடுகளின் மூலம் தானாக முன்னேறுவதற்குப் பதிலாக, ஸ்லைடுஷோ "அடுத்த" அல்லது "முந்தைய" பொத்தான் அல்லது குறிப்பிட்ட விசை அழுத்த நிகழ்வுகள் போன்ற பயனர் தொடர்புக்காக காத்திருக்கலாம். இது செயல்பாட்டுக் கட்டுப்பாட்டை பயனருக்கு மாற்றுகிறது, மேலும் தேவையற்ற CPU பயன்பாட்டைக் குறைக்கிறது, அதே நேரத்தில் பதிலளிப்பதைத் தக்க வைத்துக் கொள்கிறது.
மேலும், பயன்படுத்தி கோரிக்கை அனிமேஷன் ஃப்ரேம் ஸ்லைடுகளுக்கு இடையே ஒரு மென்மையான மாற்றம் தேவைப்படும் சூழ்நிலைகளில் மறுநிகழ்வை அகற்றவும் இந்த முறை உதவும். போலல்லாமல் இடைவெளியை அமைக்கவும், இது வழக்கமான இடைவெளியில் குறியீட்டை இயக்குகிறது, கோரிக்கை அனிமேஷன் ஃப்ரேம் ஸ்லைடுஷோவின் புதுப்பிப்புகளை திரையின் புதுப்பிப்பு வீதத்துடன் ஒத்திசைக்கிறது, மென்மையான அனிமேஷன்களை உருவாக்குகிறது. உலாவி தாவல் செயலற்ற நிலையில் இருக்கும்போது இடைநிறுத்தப்பட்டு, தேவையற்ற கணக்கீடுகளைக் குறைக்கும் நன்மையும் உள்ளது. இது செயல்திறனை மேம்படுத்துவதற்கும், அழைப்பு அடுக்கை அடைக்காமல் அனிமேஷன்களைக் கையாளுவதற்கும் மிகவும் பயனுள்ளதாக இருக்கும்.
உலாவியின் உள்ளமைக்கப்பட்ட நிகழ்வு வளையம் மற்றும் மைக்ரோடாஸ்க் வரிசையை மேம்படுத்துவது மற்றொரு முக்கிய தேர்வுமுறையாகும். குறிப்பிட்ட உலாவி நிகழ்வுகளுக்கு ஸ்லைடு முன்னேற்றத்தை இணைப்பதன் மூலம், முந்தைய படம் முழுமையாக ஏற்றப்படும் போது அல்லது பயனர் ஒரு குறிப்பிட்ட புள்ளிக்கு ஸ்க்ரோல் செய்யும் போது, செயல்திறன் சிக்கல்கள் இல்லாமல் பயனர் அனுபவத்தில் ஸ்லைடுஷோ தடையின்றி ஒருங்கிணைக்கப்படும். இது தொடர்ச்சியான செயல்பாட்டு அழைப்புகளின் தேவையைத் தவிர்க்கிறது மற்றும் ஒவ்வொரு மாற்றமும் திறமையாகவும் ஒத்திசைவின்றியும் கையாளப்படுவதை உறுதி செய்கிறது.
ஜாவாஸ்கிரிப்ட் ஸ்லைடுஷோவில் மறுநிகழ்வைத் தவிர்ப்பது குறித்த பொதுவான கேள்விகள்
- ஜாவாஸ்கிரிப்டில் மறுநிகழ்வு என்றால் என்ன, ஸ்லைடுஷோக்களில் இது ஏன் பிரச்சனை?
- ஒரு செயல்பாடு தன்னை அழைக்கும் போது மறுநிகழ்வு ஏற்படுகிறது, மேலும் தொடர்ந்து செய்தால், அது ஸ்டாக் ஓவர்ஃப்ளோவுக்கு வழிவகுக்கும். ஸ்லைடுஷோவில், இது அதிகப்படியான நினைவகப் பயன்பாட்டை ஏற்படுத்தும் மற்றும் உலாவியை செயலிழக்கச் செய்யும்.
- ஜாவாஸ்கிரிப்ட் செயல்பாட்டில் மறுநிகழ்வை எவ்வாறு தவிர்க்கலாம்?
- ஒரு தீர்வு பயன்படுத்தப்படுகிறது setInterval அல்லது setTimeout மறுநிகழ்வு இல்லாமல் பணிகளை திட்டமிட வேண்டும். மற்றொரு விருப்பம் நிகழ்வு-உந்துதல் மாதிரி ஆகும், அங்கு குறிப்பிட்ட பயனர் அல்லது உலாவி நிகழ்வுகளால் செயல்பாடுகள் தூண்டப்படுகின்றன.
- ஏன் பயன்படுத்த என் முயற்சி while(true) உலாவியை பூட்டவா?
- பயன்படுத்தி while(true) போன்ற ஒரு ஒத்திசைவற்ற செயல்பாடு இல்லாமல் await அல்லது setTimeout இடைநிறுத்தப்படாமல் ஒரு தொடர்ச்சியான சுழற்சியில் இயங்குகிறது, இது முக்கிய தொடரிழையைத் தடுக்கிறது, இதனால் உலாவி உறைகிறது.
- நான் பயன்படுத்தலாமா Promises மறுநிகழ்வைத் தவிர்க்கவா?
- ஆம், Promises சுழல்நிலை செயல்பாடு அழைப்புகள் இல்லாமல் ஒத்திசைவற்ற செயலாக்கத்தை அனுமதிக்கவும். இது ஒவ்வொரு செயல்பாடும் அடுத்தது தொடங்கும் முன் முடிவடைவதை உறுதிசெய்கிறது, ஸ்டாக் வழிதல் தடுக்கிறது.
- என்ன requestAnimationFrame மற்றும் அது எப்படி உதவுகிறது?
- requestAnimationFrame உலாவியின் புதுப்பிப்பு விகிதத்துடன் ஒத்திசைக்கப்பட்ட மென்மையான அனிமேஷன்களை உருவாக்க உங்களை அனுமதிக்கும் ஒரு முறையாகும். இது திறமையானது மற்றும் உலாவி தாவல் செயலற்ற நிலையில் இருக்கும்போது தேவையற்ற கணக்கீடுகளைத் தடுக்கிறது.
தொடர்ச்சியான சுழல்களுக்கான மறுநிகழ்வைத் தவிர்ப்பது
ஜாவாஸ்கிரிப்ட் செயல்பாடுகளில், குறிப்பாக பயன்படுத்தும் போது, மறுநிகழ்வைத் தவிர்ப்பது வாக்குறுதி அளிக்கிறார், செயல்திறனைப் பராமரிக்க மிகவும் முக்கியமானது. லூப் அடிப்படையிலான அணுகுமுறை அல்லது நிகழ்வு-உந்துதல் மாதிரிக்கு மாறுவதன் மூலம், டெவலப்பர்கள் அழைப்பு அடுக்கை முடிவில்லாமல் வளர்வதைத் தடுக்கலாம் மற்றும் உலாவி செயலிழப்புகளைத் தவிர்க்கலாம்.
போன்ற முறைகளைப் பயன்படுத்துதல் இடைவெளியை அமைக்கவும் அல்லது கோரிக்கை அனிமேஷன் ஃப்ரேம், அதே போல் ஒத்திசைவற்ற செயல்பாடுகளை திறம்பட கையாள்வது, ஸ்லைடு காட்சிகள் போன்ற பணிகளை சீராக செயல்படுத்த அனுமதிக்கும். இந்த தீர்வுகள் சிறந்த நினைவக நிர்வாகத்தை வழங்குகின்றன மற்றும் சுழல்நிலை செயல்பாட்டு அழைப்புகளுடன் தொடர்புடைய சிக்கல்களைத் தடுக்கின்றன, நீண்ட கால செயல்முறைகளில் நிலைத்தன்மையை உறுதி செய்கின்றன.
JavaScript ஸ்லைடுஷோ உகப்பாக்கத்திற்கான ஆதாரங்கள் மற்றும் குறிப்புகள்
- ஜாவாஸ்கிரிப்டில் மறுநிகழ்வு மற்றும் அழைப்பு அடுக்குகளை கையாளுதல் பற்றிய தகவல்களை இங்கே காணலாம் MDN வெப் டாக்ஸ்: ஜாவாஸ்கிரிப்ட் ரிகர்ஷன் .
- JavaScript இல் Promises இன் பயன்பாட்டை நன்கு புரிந்து கொள்ள, பார்க்கவும் JavaScript.info: வாக்குறுதி அடிப்படைகள் .
- செயல்திறன் பற்றிய கூடுதல் விவரங்கள் இடைவெளியை அமைக்கவும் மற்றும் கோரிக்கை அனிமேஷன் ஃப்ரேம் MDN ஆவணத்தில் காணலாம்.
- டைனமிக் பட பொருட்களை உருவாக்குவதற்கான வழிகாட்டுதலுக்காக createObjectURL மற்றும் revokeObjectURL , MDN இன் URL API பிரிவைப் பார்வையிடவும்.
- ஜாவாஸ்கிரிப்டில் ஒத்திசைவற்ற செயல்பாடுகள் பற்றிய கூடுதல் தகவல்களைக் காணலாம் freeCodeCamp: Asynchronous Programming மற்றும் கால்பேக்குகள் .