यह requestAnimationFrame
की मेरी समझ पर एक चेक है। मुझे debounce फ़ंक्शन की आवश्यकता है, क्योंकि जब भी विंडो का आकार बदलता है और मैं ब्राउजर को अधिभारित नहीं करना चाहता हूं, तो मैं कुछ डोम इंटरैक्शन कर रहा हूं। एक सामान्य डिबॉन्स फ़ंक्शन प्रति अंतराल में केवल एक बार पारित कार्य को कॉल करेगा; अंतराल आमतौर पर दूसरा तर्क है। मुझे लगता है कि बहुत सारे यूआई काम के लिए, इष्टतम अंतराल उस समय की सबसे छोटी राशि है जो ब्राउज़र को अधिभारित नहीं करता है। मुझे ऐसा लगता है requestAnimationFrame
करना होगा कि वास्तव में क्या है कि कि:क्या डेबॉन्स फ़ंक्शन के भीतर requestAnimationFrame का उपयोग करना अच्छा विचार है?
var debounce = function (func, execAsap) {
var timeout;
return function debounced() {
var obj = this, args = arguments;
function delayed() {
if (!execAsap)
func.apply(obj, args);
timeout = null;
};
if (timeout)
cancelAnimationFrame(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = requestAnimationFrame(delayed);
};
}
ऊपर कोड the above debounce
link से सीधी नकल बंद है, लेकिन requestAnimationFrame साथ setTimeout के बजाय इस्तेमाल किया। मेरी समझ में, यह जितनी जल्दी हो सके पास-इन फ़ंक्शन को कतारबद्ध करेगा, लेकिन ब्राउजर की तुलना में तेज़ी से आने वाली कोई भी कॉल गिर जाएगी। यह सबसे आसान संभव बातचीत का उत्पादन करना चाहिए। क्या मैं सही रास्ते पर हूं? या मैं requestAnimationFrame
गलत समझ रहा हूँ?
(बेशक यह केवल आधुनिक ब्राउज़रों पर काम करता है, लेकिन वहाँ requestAnimationFrame के लिए आसान polyfills कि अभी वापस setTimeout के लिए आते हैं।)
यदि यह फिर से निकालने के बारे में है, और आप एक चिकनी एनीमेशन चाहते हैं, तो आप * थ्रॉटलिंग * नहीं * debouncing * चाहते हैं। कृपया उस ब्लॉग पोस्ट को दोबारा पढ़ें जिसे आपने लिंक किया है, यह देखने के लिए कि क्या अंतर है - debounce "अंतराल पर एक बार पारित कार्य को कॉल नहीं कर रहा है" – Bergi
@Bergi इसके लिए धन्यवाद। मैंने पहली बार इसके बारे में सोचा था, लेकिन मैंने इसे फिर से देखा, और अंतर पर बेन आलमैन के नोटों के माध्यम से पढ़ा http://benalman.com/projects/jquery-throttle-debounce-plugin/, और मुझे लगता है कि आप सही हो सकते हैं - हालांकि, मुझे लगता है कि एक तेज ब्राउज़र के साथ जो जल्दी से प्रतिक्रिया दे सकता है, यह दोनों के बीच अंतर को कम करता है। – carpeliam
वही बात सोच रहा था। मुझे खुशी है कि मुझे यह पोस्ट मिला। 'Var obj = this' के बजाय उपयोग किए जाने वाले संदर्भ पैरामीटर को जोड़ना एक अच्छा विचार होगा। इस तरह लोगों को कॉल करने से पहले 'बाइंड' का उपयोग नहीं करना पड़ेगा और एक और फ़ंक्शन स्कोप – Dogoku