Binlerce öğe ve girişte birden fazla jQuery bağlaması kullanarak yükleme hızıyla ilgili sorun yaşıyorum, bunu yapmanın daha verimli bir yolu var mı?jQuery bind verimi
Site ajax aramaları ile ürün listeleri arasında geçiş yapma olanağına sahiptir, sayfa yenilenemiyor. Bazı listelerde, bazıları 100, bazıları 2000'den fazla olmak üzere 10 öğe vardır. Listeler arasında dolaşmaya başladığımda hız sorunu ortaya çıkar; 2000+ öğe listesi her yüklendiğinde, sistem yaklaşık 10 saniye sürüyor.
Listeyi yeniden oluşturmadan önce, hedef öğenin html'sini '' olarak ayarlıyorum ve aşağıdaki iki bağlamayı açamıyorum. Eminim ki, tüm ebeveynle, bir daha sonra ve geri aramalarda yaptığım çocuk çağrılarıyla bir ilgisi var. Herhangi bir yardım çok takdir edilmektedir.
döngü 2500 defa
<ul>
<li><input type="text" class="product-code" /></li>
<li>PROD-CODE</li>
...
<li>PRICE</li>
</ul>
uç döngü
$('li.product-code').bind('click', function(event){
selector = '#p-'+ $(this).prev('li').children('input').attr('lm');
$(selector).val(
($(selector).val() == '' ? 1 : (parseFloat($(selector).val()) + 1))
);
Remote.Cart.lastProduct = selector;
Remote.Cart.Products.Push(
Remote.Cart.customerKey,
{
code : $(this).prev('li').children('input').attr('code'),
title : $(this).next('li').html(),
quantity : $('#p-'+ $(this).prev('li').children('input').attr('lm')).val(),
price : $(this).prev('li').children('input').attr('price'),
weight : $(this).prev('li').children('input').attr('weight'),
taxable : $(this).prev('li').children('input').attr('taxable'),
productId : $(this).prev('li').children('input').attr('productId'),
links : $(this).prev('li').children('input').attr('productLinks')
},
'#p-'+ $(this).prev('li').children('input').attr('lm'),
false,
(parseFloat($(selector).val()) - 1)
);
return false;
});
$('input.product-qty').bind('keyup', function(){
Remote.Cart.lastProduct = '#p-'+ $(this).attr('lm');
Remote.Cart.Products.Push(
Remote.Cart.customerKey,
{
code : $(this).attr('code') ,
title : $(this).parent().next('li').next('li').html(),
quantity : $(this).val(),
price : $(this).attr('price'),
weight : $(this).attr('weight'),
taxable : $(this).attr('taxable'),
productId : $(this).attr('productId'),
links : $(this).attr('productLinks')
},
'#p-'+ $(this).attr('lm'),
false,
previousValue
);
});
Canlı kazanır! Şimdi benim tek hızlı asistanım indirdiğim bir sağ tıklama eklentisidir. Bağlantılar olmadan liste oluşturma anında yapıldı, şimdi yaklaşık yarım saniyedir. Sağ tıklatma betiği ile askıda kalıyor, ancak bunun hayal ettiğim bağlantılardan kaynaklanıyor. Çok teşekkürler! – clownshoes
@chelfers - Hangi sağ tıklama eklentisini kullanıyorsunuz? Bu da '.live()' ye geçmek ve tüm kodunuzu anında almak için oldukça kolay olmalı ... eğer bunu daha önce yapmadıysanız ve bir göz atacağım. –
'delegate()' kesinlikle gitmek için bir yoldur. Yakalamak istediğiniz binlerce etkinliğe sahip olduğunuzda, alternatiflerden çok daha uygun. Tek uyarı, jQuery 1.4 gerektirmesidir. –