Câu hỏi cũ, nhưng nửa thập kỷ sau, nó đáng để xem lại. Ở đây tôi chỉ thảo luận về khía cạnh bộ chọn của jQuery.
document.querySelector[All]
được hỗ trợ bởi tất cả các trình duyệt hiện tại, cho đến IE8, do đó khả năng tương thích không còn là vấn đề nữa. Tôi cũng đã tìm thấy không có vấn đề về hiệu suất để nói (nó được cho là chậm hơn document.getElementById
, nhưng thử nghiệm của riêng tôi cho thấy rằng nó nhanh hơn một chút).
Do đó, khi nói đến việc thao tác trực tiếp một phần tử, nó sẽ được ưu tiên hơn jQuery.
Ví dụ:
var element=document.querySelector('h1');
element.innerHTML='Hello';
là bao la vượt trội so với:
var $element=$('h1');
$element.html('hello');
Để làm bất cứ điều gì, jQuery phải chạy qua hàng trăm dòng mã (tôi đã từng truy tìm mã như ở trên để xem jQuery thực sự đang làm gì với nó). Đây rõ ràng là một sự lãng phí thời gian của mọi người.
Chi phí đáng kể khác của jQuery là thực tế là nó bao bọc mọi thứ bên trong một đối tượng jQuery mới. Chi phí này đặc biệt lãng phí nếu bạn cần mở lại đối tượng hoặc sử dụng một trong các phương thức đối tượng để xử lý các thuộc tính đã được phơi bày trên phần tử gốc.
Tuy nhiên, nơi jQuery có một lợi thế là cách nó xử lý các bộ sưu tập. Nếu yêu cầu là đặt các thuộc tính của nhiều phần tử, jQuery có một each
phương thức dựng sẵn cho phép một cái gì đó như thế này:
var $elements=$('h2'); // multiple elements
$elements.html('hello');
Để làm như vậy với Vanilla JavaScript sẽ cần một cái gì đó như thế này:
var elements=document.querySelectorAll('h2');
elements.forEach(function(e) {
e.innerHTML='Hello';
});
mà một số tìm thấy nản chí.
Các bộ chọn jQuery cũng hơi khác nhau, nhưng các trình duyệt hiện đại (không bao gồm IE8) sẽ không nhận được nhiều lợi ích.
Theo quy định, tôi thận trọng không sử dụng jQuery cho các dự án mới :
- jQuery là một thư viện bên ngoài thêm vào chi phí hoạt động của dự án và phụ thuộc vào các bên thứ ba.
- Hàm jQuery rất tốn kém, xử lý khôn ngoan.
- jQuery áp đặt một phương pháp cần phải học và có thể cạnh tranh với các khía cạnh khác trong mã của bạn.
- jQuery chậm để lộ các tính năng mới trong JavaScript.
Nếu không có vấn đề nào ở trên, thì hãy làm những gì bạn muốn. Tuy nhiên, jQuery không còn quan trọng đối với việc phát triển đa nền tảng như trước đây, vì JavaScript và CSS hiện đại tiến xa hơn nhiều so với trước đây.
Điều này làm cho không đề cập đến các tính năng khác của jQuery. Tuy nhiên, tôi nghĩ rằng họ cũng cần một cái nhìn gần hơn.
querySelector
phương thức. (3) Thực hiện các cuộc gọi AJAX nhanh hơn và dễ dàng hơn với jQuery. (4) Hỗ trợ trong IE6 +. Tôi chắc chắn còn nhiều điểm nữa có thể được thực hiện.