2012-03-29 8 views
42

मैं एक बड़े, जटिल पेज कि knockout.js पर काफी निर्भर करता है में सुधार के लिए दिशा-निर्देश। प्रदर्शन एक मुद्दा बनना शुरू हो रहा है लेकिन कॉल स्टैक की जांच करना और बाधाओं को खोजने की कोशिश करना एक असली चुनौती है।प्रदर्शन ट्यूनिंग एक नॉकआउट आवेदन - प्रतिक्रिया समय

मैं एक और सवाल (Knockout.js -- understanding foreach and with) कि स्वीकार किए जाते हैं जवाब टिप्पणी में देखा:

... और मुझे with जहां उच्च प्रदर्शन भूमि के ऊपर की वजह से आवश्यक है का उपयोग नहीं करने का सुझाव ...

बयान मान लिया जाये कि सच है, यह पता करने के लिए वास्तव में उपयोगी सामान है और मैं इस तरह के प्रदर्शन सुझावों के लिए एक स्रोत नहीं मिला है।

इसलिए, मेरा सवाल यह है:

वहाँ सामान्य दिशा निर्देशों/मुख्य युक्तियां है कि मैं इससे पहले कि मैं क्लासिक प्रदर्शन ट्यूनिंग में गहरी मिल अपने आवेदन के प्रदर्शन को मदद करने के लिए आवेदन कर सकते हैं कर रहे हैं।

+0

मैं साझा करने के लिए सुझावों की एक संख्या है बन , लेकिन कोई समय नहीं। आज रात पोस्ट करेंगे। –

+0

@RPNiemeyer - धन्यवाद रयान। वह महान होगा। –

+1

मेरे पास कोई सामान्य सुझाव नहीं है, लेकिन आप 2.1 के बीटा को आजमा सकते हैं क्योंकि टिप्पणियों का सुझाव है कि कुछ सामान्य प्रदर्शन सुधार हुए हैं। – ShaneBlake

उत्तर

37

मुझे लगता है कि यह सुझाव दिए गए मैं एक ही जवाब में मन में है कि लेआउट के लिए बहुत अधिक होगा।

मैंने इस विषय पर ब्लॉग पोस्ट की एक श्रृंखला शुरू की। पहली पोस्ट here है।

यह पोस्ट थोड़ा सा वर्णन करता है कि कैसे if/with काम करता है (बाध्यकारी ट्रिगर होने पर बच्चों को टेम्पलेट का उपयोग करके टेम्पलेट का उपयोग करता है और फिर से प्रस्तुत करता है) और बताता है कि इन बाइंडिंग को अपेक्षा से अधिक बार फिर से प्रस्तुत करने का कारण बन सकता है।

मैं भविष्य में पोस्ट के साथ इस उत्तर को अपडेट करूंगा।

+4

उत्कृष्ट ब्लॉग पोस्ट, रयान। 'If' बाइंडिंग रीरेंडरिंग के आसपास के सुझावों को लागू करने से पहले ही मेरे आवेदन में एक अंतरनीय अंतर आया है। इस मुद्दे पर भावी ब्लॉग पोस्ट की प्रतीक्षा कर रहे हैं। –

+2

[यहां] (http://www.knockmeout.net/2012/04/knockoutjs-performance-gotcha।एचटीएमएल) और [यहां] (http://www.knockmeout.net/2012/06/knockoutjs-performance-gotcha-3-all-bindings.html) इस विषय पर नवीनतम पोस्ट हैं। – Sherlock

+0

हाय, और पोस्ट के लिए धन्यवाद। मेरा एक सवाल है। मैं AJAX से एक अवलोकन योग्य सरणी पुनर्प्राप्त कर रहा हूं लेकिन तालिका पर डेटा लोड करने के लिए प्रदर्शन इतना धीमा हो रहा है। क्या आप मुझे एक और तरीका सुझा सकते हैं, कृपया? – UserEsp

6

सबसे बड़ी gotchas मैंने पाया है (और नहीं कहीं और चर्चा की देखा) से एक है कि नॉकआउट फिर से मूल्यांकन करता हर एक तत्व जब भी किसी भी बदलता है तत्व पर बाध्यकारी पर बाध्यकारी है।

यह आम तौर पर एक बड़ा सौदा नहीं है, लेकिन बाइंडिंग के लिए जो महंगे होते हैं (उदाहरण के लिए template), यह महत्वपूर्ण प्रदर्शन समस्याएं पैदा कर सकता है।

बाइंडिंग कि एक आभासी तत्व के लिए सामग्री/बच्चों (template, foreach, आदि) प्रस्तुत करना (containerless control flow syntax का प्रयोग करके) संलग्न अगर वे नहीं कर रहे हैं केवल तत्व पर बाध्यकारी।

+1

यह जेएसपीआरएफ परीक्षण दिखाता है कि टेम्पलेट बाइंडिंग का संकेत कितना महंगा है। http://jsperf.com/knockout-template-binding-performance/2 –

+0

आरपी निमेयर ने इस मुद्दे से संबंधित एक ब्लॉग पोस्ट किया: http://www.knockmeout.net/2012/06/knockoutjs-performance-gotcha-3- all-bindings.html –

+3

नॉकआउट 3.0 इस समस्या को हल करता है, संयोग से: http://blog.stevensanderson.com/2013/07/09/knockout-v2-3-0-released-v3-0-0-beta-available/ – Jonathan

0

मुझे लगता है कि मानचित्रण भी मदद कर सकते हैं इस परीक्षण का पालन करें और jquert नक्शा, नॉकआउट मानचित्र का उपयोग के बीच अंतर देख सकते हैं knockout-map-vs-jquery-map

जब आप भारी ObservableArrays मानचित्रण का उपयोग शुरू महत्वपूर्ण

संबंधित मुद्दे