لماذا هذا مسج .تحريك دعوة بطيئة جدا ؟
-
05-07-2019 - |
سؤال
مرحبا جميعا لدي جميلة على التوالي إلى الأمام وظيفة
enableModule : function(moduleName){
var module = $('div#'+moduleName);
console.log('enabling '+moduleName);
console.time('animate');
module.animate({'opacity' : '1.0'}, 300, function(){console.timeEnd('animate');});
module.find('.disabled_sheild').remove();
module.removeClass('disabled');
console.log('end of enable Module');
}
الرسوم المتحركة النفس, التعتيم تغيير, هو سريع جدا ولكن هناك مثل التأخر في استدعاء ذلك.وحدة التحكم.الوقت() عن أوقات 2540MS أكبر.أنا أفكر أنه قد يكون بسبب div#وحدة يجري الرسوم المتحركة جنبا إلى جنب مع الأطفال ؟ ولكن هذا dosent معنى لأن لدي وظيفة أخرى "disableModule" الذي يفعل الشيء نفسه في الاتجاه المعاكس و يعمل بسرعة معقولة.
هنا هو تعطيل وظيفة الوحدة ، إلى حد كبير أكثر يحدث ولكن يعود مرة من حوالي 242ms
disableModule : function(moduleName){
$('div#'+moduleName+', div.'+moduleName).each(function(){
var module = $(this);
module.prepend('<div class="disabled_sheild"></div>');
var sheild = module.find('.disabled_sheild');
sheild.css({'position' : 'absolute', 'z-index' : '200'});
sheild.width(module.width());
sheild.height(module.height());
jQuery.each(jQuery.browser, function(i) {
if($.browser.msie){
//module.css("display","none");
//if using ie give sheild a transparent background layout
}else{
console.time('animate');
module.animate({'opacity' : '0.5'}, function(){ console.timeEnd('animate');});
}
});
});
}
المحلول
وبعد بعض المشاكل شاقة ط تعقب ذلك وصولا الى كونها قضية مع حلقة الكشف عن متصفح في طريقة تعطيل:
jQuery.each(jQuery.browser, function(i) {
if($.browser.msie){
//module.css("display","none");
//if using ie give sheild a transparent background layout
}else{
console.time('animate');
module.animate({opacity : 0.5}, 200, function(){console.timeEnd('animate');});
}
});
وتعليقا هذه الكتلة من جلب كل ما يصل الى سرعة. أنا سحبت تقريبا شعري بعد محاولة لتحسين كل شيء آخر.
نصائح أخرى
هل حاولت ببساطة إعادة أوردنج لهم ؟
module.find('.disabled_sheild').remove();
module.removeClass('disabled');
module.animate({'opacity' : '1.0'}, 300, function(){console.timeEnd('animate');});
الرسوم المتحركة يحدث بشكل غير متزامن ، find
و remove
أساليب يمكن أن تستهلك موارد (خاصة منذ find
يمشي شجرة DOM) التي يمكن أن تستخدم إلا في الرسوم المتحركة.
أيضا, منذ كنت حيوي خلق "تعطيل درع" في disable
الطريقة يمكن حفظ تشغيله
module.data("disabledShield", module.prepend('<div class="disabled_sheild"></div>'));
ومجرد استخدام هذا المرجع في enable
طريقة لتجنب دوم الأقدام
module.data("disabledShield").remove();
module.removeClass('disabled');
module.animate({'opacity' : '1.0'}, 300, function(){console.timeEnd('animate');});
(انظر http://docs.jquery.com/Internals/jQuery.data على الطبيب $.data
)