14 điểm bởi GN⁺ 2026-01-19 | 3 bình luận | Chia sẻ qua WhatsApp
  • 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ấpplugin 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

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: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

 
tsboard 2026-01-21

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ế.

 
shakespeares 2026-01-19

Quả là bền bỉ thật.. haha

 
GN⁺ 2026-01-19
Ý 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

    • Trước đây BackboneJS thường được dùng nhiều cho mục đích này. Đến giờ nó vẫn đang được bảo trì
      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
    • Bài này làm tôi nhớ lại thời kỳ mì spaghetti code jQuery ngày xưa
      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
    • Tôi cũng đã thử cách tiếp cận này, và nó tốt hơn rất nhiều so với đống jQuery hỗn loạn kiểu thập niên 2010
      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, innerHTML cũng đủ để làm được
    • Ứng dụng jQuery lớn cuối cùng tôi làm cũng dùng mẫu phản ứng kiểu này
      Tô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
    • Đây thực sự là một mẫu rất hay. Nếu thêm signals vào thì hàm cập nhật sẽ được gọi tự động
      Đó 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ó

    • Đám trẻ bây giờ chỉ chạy theo framework mới, nhưng nhờ jQuery và .NET Framework mà tôi lúc nào cũng có việc làm
    • Tôi đã dùng jQuery suốt 15 năm. Nó vẫn là lựa chọn mặc định của tôi
    • Tôi ước ai đó gắn Virtual DOM vào jQuery
      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

    • Đúng vậy. HTMX thực ra phát triển từ intercooler.js, vốn được truyền cảm hứng từ phương thức .load() của jQuery
      Xem 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 đề của jQuery là nó là code mệnh lệnh, nên khi bắt đầu phải xử lý nhiều trạng thái thì mọi thứ trở nên phức tạp
    • Dạo này tôi dùng JS thuần, nhưng sự thanh lịch của giao diện selector $() vẫn là đỉnh cao
      Có 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
    • Khi dùng Django, tôi giải quyết hầu hết vấn đề bằng tổ hợp HTMX và vanilla JS
      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

    • Nhờ React mà việc phát triển ứng dụng đã tốt hơn rất nhiều
      Nghĩ lại địa ngục callback ngày xưa thì hiện tại đúng như mơ
    • Đến khoảng năm 2060 thì có khi React Native mới lên được tầm v0.93
    • Thực ra giờ đã gần như có hai bản React rồi. Đến 2060 chắc thành năm bản mất
  • 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

    • Tôi mới nghe về JsViews lần đầu nhưng thấy khá thú vị
      Cá nhân tôi thích phong cách jQuery hiện đại như cheerioalpine.js
      cheerio.js.org, alpinejs.dev
    • Tôi cũng chưa có việc gì cần dùng jQuery ngay, nhưng source của JsViews đáng để nghiên cứu
      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.js chỉ có 12.82kB
  • Khó 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

    • Có vẻ họ giữ lại hỗ trợ IE11 để không làm chậm việc phát hành 4.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ờ
    • Đó là vì tính tương thích ngược. Vẫn còn những môi trường buộc phải dùng IE11
      Thật đáng quý khi họ vẫn hỗ trợ những người dùng và sản phẩm đó
    • Microsoft dự kiến sẽ hỗ trợ IE11 tới năm 2032 thông qua Windows 10 LTSC và chế độ IE của Edge trên Windows 11
    • Không phải ai trên đời cũng có thể dùng phần cứng và phần mềm mới nhất
      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