- Sau khoảng 10 năm, bản cập nhật major version jQuery 4.0.0 đã chính thức được công bố
- Ngừng hỗ trợ IE 10 trở xuống và các trình duyệt cũ, tinh gọn mã nguồn và tăng cường tuân thủ các tiêu chuẩn hiện đại; đa số người dùng có thể nâng cấp mà không cần thay đổi mã
- Chuyển sang cấu trúc dựa trên ES module, áp dụng Rollup cho quá trình build để đảm bảo tương thích với môi trường phát triển hiện đại
- Bổ sung hỗ trợ Trusted Types và CSP để giảm thiểu xung đột với các chính sách bảo mật
- Loại bỏ API deprecated và tinh giản bản slim build để cải thiện hiệu năng và khả năng bảo trì
Tổng quan chính về jQuery 4.0.0
- jQuery 4.0.0 là một bản phát hành major quy mô lớn sau khoảng 10 năm, được hoàn thiện sau chu kỳ phát triển dài và nhiều bản pre-release
- Phần lớn người dùng có thể nâng cấp mà không cần sửa mã
- Loại bỏ mã legacy và các tham số không công khai đã tích lũy từ các phiên bản trước
- Hướng dẫn nâng cấp và plugin jQuery Migrate cũng được cung cấp để hỗ trợ chuyển đổi từ các phiên bản cũ
- Có thể phân phối qua CDN chính thức và npm, các CDN khác sẽ được cập nhật lần lượt
Thay đổi về hỗ trợ trình duyệt
- Ngừng hỗ trợ IE 10 trở xuống, IE 11 sẽ được loại bỏ dần trong jQuery 5.0
- Edge Legacy, iOS bản cũ (cũ hơn 3 phiên bản gần nhất), Firefox bản cũ (cũ hơn 2 phiên bản gần nhất), Android Browser cũng không còn được hỗ trợ
- Nếu cần hỗ trợ trình duyệt cũ, khuyến nghị tiếp tục dùng jQuery 3.x
Tương thích Trusted Types và CSP
- Bổ sung hỗ trợ Trusted Types để xử lý an toàn đối tượng TrustedHTML
- Phần lớn các yêu cầu script bất đồng bộ được chuyển sang nền tảng thẻ ``, giúp tránh lỗi CSP
- Khi dùng tùy chọn
"headers" thì vẫn có thể dùng XHR, nhưng nên dùng scriptAttrs
Chuyển sang ES module
- Mã nguồn jQuery đã được chuyển hoàn toàn từ AMD sang ES module
- Thay cho RequireJS trước đây, Rollup được chọn làm công cụ build
- Việc kiểm thử cũng được thực hiện riêng trên nền tảng ES module
- `` giúp đảm bảo tương thích với trình duyệt hiện đại và các build tool
Loại bỏ API deprecated
- Các API đã ở trạng thái không còn được khuyến nghị từ lâu đã bị loại bỏ hoàn toàn
- Các hàm bị xóa:
jQuery.isArray, jQuery.parseJSON, jQuery.trim, jQuery.type, jQuery.now, jQuery.isNumeric, jQuery.isFunction, jQuery.isWindow, jQuery.camelCase, jQuery.nodeName, jQuery.cssNumber, jQuery.cssProps, jQuery.fx.interval
- Thay thế bằng các phương thức native như
Array.isArray(), JSON.parse(), String.prototype.trim(), Date.now()
- Cùng với việc loại bỏ mã liên quan đến IE, kích thước giảm khoảng 3KB theo gzip
Loại bỏ các phương thức chỉ dùng nội bộ
- Các phương thức push, sort, splice vốn chỉ dùng nội bộ đã bị xóa khỏi prototype của jQuery
- Có thể thay
$elems.push(elem) bằng dạng [].push.call($elems, elem)
Thay đổi thứ tự sự kiện focus
- Thống nhất theo thứ tự sự kiện focus/blur theo đặc tả W3C
- Thứ tự mới: blur → focusout → focus → focusin
- Khác với thứ tự trước đây của jQuery nên cần chú ý tương thích
- Tất cả trình duyệt ngoài IE đều hoạt động theo cùng thứ tự này
Cải thiện slim build
- Loại bỏ Deferreds và Callbacks, giúp giảm kích thước tệp xuống còn khoảng 19.5KB (gzip)
- Vì đa số trình duyệt đều hỗ trợ Promise native, có thể dùng để thay thế
- Nếu vẫn cần hỗ trợ IE11, nên dùng bản build chính hoặc Promise polyfill
- Slim build loại trừ các mô-đun liên quan đến Ajax và animation nên nhỏ hơn khoảng 8KB
Tải xuống và phân phối
- Có thể tải từ CDN chính thức và npm
- Bản chính thức:
- Bản Slim:
- Lệnh cài đặt npm:
npm install jquery@4.0.0
Những người đóng góp và kỷ niệm 20 năm
- Nhiều người đóng góp mã nguồn mở đã tham gia vá lỗi, báo cáo bug và kiểm thử
- Nhân dịp kỷ niệm 20 năm jQuery, đội ngũ đã hội ngộ tại Dallas, nhà sáng lập John Resig cũng tham gia qua Zoom
Tóm tắt các thay đổi mã chính (Changelog)
- Ajax: cải thiện xử lý dữ liệu nhị phân, ngăn lỗi CSP, tăng cường xử lý lỗi JSONP
- CSS: sửa cách tính kích thước phần tử ``, cải thiện xử lý khoảng trắng trong biến CSS, loại bỏ hook
opacity
- Core: chuyển
AMD → ES module, dùng DOMParser, xóa mã tương thích cho trình duyệt cũ
- Event: xử lý focus/blur native, loại bỏ shim
event.which
- Selector: tích hợp Sizzle, cải thiện
:has và :even/:odd, thêm chaining cho uniqueSort
- Docs: cập nhật liên kết HTTPS, chỉnh lý tài liệu README và CONTRIBUTING
- Release: tự động hóa quy trình build và phát hành, chuyển sang nền tảng
release-it
Tóm tắt
- jQuery 4.0.0 là phiên bản tái cấu trúc phù hợp với tiêu chuẩn web hiện đại và chính sách bảo mật
- Loại bỏ mã legacy, module hóa ES, tăng cường bảo mật, tinh gọn dung lượng để củng cố nền tảng bảo trì dài hạn
- Đây được xem là bản phát hành mang tính biểu tượng kỷ niệm 20 năm của hệ sinh thái jQuery
3 bình luận
Kỷ niệm 20 năm thật đáng xúc động. Giờ đây tuy hầu như không còn dịp để dùng nữa, nhưng tôi vẫn mong nó tiếp tục được yêu mến như một công cụ hữu ích ngoài thực tế.
Quả là bền bỉ thật.. haha
Ý kiến trên Hacker News
Có một bài viết liên quan tổng hợp khá hay cách dùng jQuery theo kiểu phản ứng trong codebase legacy khi không thể dùng framework hiện đại
Reactive jQuery for Spaghetti-fied Legacy Codebases
Nếu phải dùng jQuery vì lý do legacy, Backbone có thể là một bước đệm tốt trước khi chuyển sang framework hiện đại
Trang chủ BackboneJS, Danh sách tag trên GitHub
Thật ra đôi khi code React bị thiết kế quá mức còn tệ hơn cả code jQuery được tổ chức tốt
React đúng là đã nâng mặt bằng chất lượng lên, nhưng đôi lúc dùng đúng công cụ quen thuộc lại hiệu quả hơn
Nó đặc biệt hợp với các bài toán phạm vi nhỏ như Userscript, khi build step lại quá phiền phức
Thực ra ngay cả không có jQuery thì chỉ với
querySelector,addEventListener,innerHTMLcũng đủ để làm đượcTôi phải nhét một frontend tìm kiếm tùy chỉnh vào trong Joomla CMS, và nó hoạt động khá ổn
Đó chính là cách chúng tôi làm trong Reactive Mastro
jQuery vẫn là một trong những thư viện tôi yêu thích nhất
Nó là công cụ đã tạo dựng sự nghiệp cho tôi nên tôi luôn có nhiều tình cảm với nó
Tổ hợp jQuery + jQuery UI + plugin + AI có vẻ sẽ có tiềm năng rất lớn
Mỗi lần nghe nói về HTMX là tôi lại nghĩ: “Cái đó chẳng phải chỉ cần ba dòng jQuery là xong sao?”
Dù sao thì jQuery lúc nào cũng giải quyết được vấn đề, và đó mới là điều quan trọng
.load()của jQueryXem tài liệu jQuery.load()
Tôi phát hiện ra điều này khi đang tối ưu hiệu năng, và thực sự càng thêm nể jQuery
$()vẫn là đỉnh caoCó lẽ chênh lệch hiệu năng cũng có thể được bù bằng việc tính toán trước
Nó đơn giản mà vẫn mang lại cảm giác giống SPA
Good ol’ jQuery, đúng là một sự hiện diện đáng biết ơn
Thật vui khi thấy jQuery vẫn được bảo trì và cập nhật
Nhưng điều đó cũng có nghĩa là React có thể cũng sẽ còn sống tới năm 2060, và nghĩ vậy thì hơi buồn
Nghĩ lại địa ngục callback ngày xưa thì hiện tại đúng như mơ
Tôi cũng học phát triển web bằng jQuery vào thời kỳ 2000~2010, khi framework SPA vẫn chưa phổ biến
Có lẽ khá nhiều thứ tôi làm hồi đó đến giờ vẫn còn đang chạy
Xin gửi lời cảm ơn tới đội ngũ jQuery
Xin chúc mừng tất cả những ai đã tham gia vào bản phát hành jQuery 4.0
Nếu muốn cách tiếp cận có cấu trúc hơn, có một hệ thống template phản ứng tên là JsViews
Nó cũ và ổn định, nhưng không được chú ý nhiều như các framework hiện đại
Cá nhân tôi thích phong cách jQuery hiện đại như cheerio và alpine.js
cheerio.js.org, alpinejs.dev
Chỉ là thiết kế trang web quá lỗi thời nên có vẻ tỷ lệ được chấp nhận thấp
Dù vậy nó tải rất nhanh, và độ nhẹ của nó khá ấn tượng
jsrender.min.jschỉ có 12.82kBKhó tin nhưng jQuery 4.0 vẫn hỗ trợ IE11
Việc này dự kiến cuối cùng sẽ bị loại bỏ trong jQuery 5.0
Xem PR liên quan, issue
Nghĩ tới việc 3.0 đã ra mắt từ 10 năm trước thì khá bất ngờ
Thật đáng quý khi họ vẫn hỗ trợ những người dùng và sản phẩm đó
Vẫn còn nhiều phòng máy trường học đang dùng hệ thống cũ
Công sức bỏ vào công cụ nâng cấp của jQuery thực sự rất đáng khâm phục
Tôi vẫn yêu cú pháp chaining của jQuery
15 năm trước tôi từng viết một tutorial jQuery bằng tiếng Pháp và nó có rất nhiều lượt xem
Hy vọng tôi cũng đã góp phần nhỏ vào việc lan tỏa jQuery