Tôi đang gặp sự cố với tốc độ tải bằng cách sử dụng nhiều liên kết jQuery trên vài nghìn yếu tố và đầu vào, có cách nào hiệu quả hơn để thực hiện việc này không?Hiệu suất liên kết jQuery
Trang web có khả năng chuyển đổi giữa các danh sách sản phẩm thông qua cuộc gọi ajax, trang không thể làm mới. Một số danh sách có 10 mục, một số 100, một số hơn 2000. Vấn đề tốc độ phát sinh khi tôi bắt đầu lật giữa các danh sách; mỗi lần danh sách mục 2000+ được tải hệ thống kéo trong khoảng 10 giây.
Trước khi tôi xây dựng lại danh sách, tôi sẽ đặt html của thành phần đích thành '' và hủy liên kết hai liên kết bên dưới. Tôi chắc chắn rằng nó có một cái gì đó để làm với tất cả các phụ huynh, tiếp theo, và các cuộc gọi con tôi đang làm trong callbacks. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.
vòng lặp 2500 lần
<ul>
<li><input type="text" class="product-code" /></li>
<li>PROD-CODE</li>
...
<li>PRICE</li>
</ul>
cuối vòng lặp
$('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
);
});
Live là người chiến thắng! Giờ đây, tốc độ tạm dừng duy nhất của tôi là trình cắm không phải nhấp chuột mà tôi đã tải xuống. Nếu không có sự ràng buộc, việc tạo danh sách là ngay lập tức, bây giờ là khoảng một nửa giây. Với kịch bản không phải nhấp chuột nó treo, nhưng đó là do các ràng buộc tôi tưởng tượng. Cảm ơn rất nhiều! – clownshoes
@chelfers - Bạn đang sử dụng plugin không nhấp chuột phải nào? Điều này cũng nên được khá dễ dàng để chuyển sang '.live()' và nhận được tất cả các mã của bạn ngay lập tức ... nếu bạn đã không làm điều này đã trả lời ở đây và tôi sẽ xem xét. –
'delegate()' chắc chắn là con đường để đi. Nó tối ưu hơn nhiều so với các lựa chọn thay thế khi bạn có hàng nghìn yếu tố mà bạn muốn chụp. Chỉ báo trước là nó đòi hỏi jQuery 1.4. –