Site icon PlusMagi's Blog By Pitt Phunsanit

jQuery: 4.0.0 เกิดใหม่ แต่เหมือนแจ้งตาย

เมื่อวันที่ 17 มกราคม 2026 ที่ผ่านมา ทาง jQuery ได้ประกาศเปิดตัว jQuery 4.0.0 เวอร์ชันเต็ม (Final Release) อย่างเป็นทางการแล้ว ซึ่งถือเป็นการฉลองครบรอบ 20 ปีของ Library นี้พอดี (นับจากที่เปิดตัวครั้งแรกในปี 2006) แต่ version ก่อนหน้าคือ jQuery 3.7.1 28 สิงหาคม 2023 นับดู ๆ ก็ 3 ปีเลยในการพัฒนาจาก version 3 เป็น 4 แต่ผลที่ได้คือ


บอกลาการรองรับ Browser รุ่นเก่า (The Great Cleanup) ที่เจ้าอื่นทิ้งไปนานแล้ว ซักที

jQuery 4.0.0 ได้ทำการตัด Code ที่ใช้สนับสนุน Browser โบราณออกไปอย่างถาวร เพื่อให้ Library มีขนาดเล็กลงและทำงานเร็วขึ้น โดยเลิกสนับสนุน


Trusted Types (การจัดการ HTML ที่ปลอดภัย)

ปกติเวลาเราใช้คำสั่งอย่าง $(container).html(userInput) ถ้าข้อมูลที่รับมามี Script อันตรายแฝงอยู่ (XSS) เบราว์เซอร์อาจจะโดนเจาะระบบได้


การเปลี่ยนมาใช้ <script> Tag สำหรับ AJAX

ในเวอร์ชันก่อนๆ เวลาเราสั่งโหลด Script ผ่าน AJAX (เช่น $.getScript()) jQuery มักจะใช้ XHR (XMLHttpRequest) ไปดึงโค้ดมาเป็น String แล้วค่อยจับยัดลงหน้าเว็บ


ย้ายระบบ Source Code ไปเป็น ES Modules

เปลี่ยนจากระบบ AMD เดิมมาเป็น ES Modules (ESM) อย่างเต็มตัว และใช้ Rollup ในการ Build ทำให้ Library ทันสมัยและเข้ากับ Build tools ใหม่ๆ ในปัจจุบันได้ดีขึ้นมาก

  1. จาก AMD สู่ ES Modules (ESM)
    • อดีต (AMD): เดิมที Source Code ของ jQuery เขียนโดยใช้รูปแบบ AMD (Asynchronous Module Definition) ซึ่งต้องพึ่งพาเครื่องมืออย่าง RequireJS ในการจัดการลำดับการโหลดไฟล์ต่างๆ ภายใน
    • ปัจจุบัน (ESM): ตอนนี้เปลี่ยนมาใช้ ES Modules (import/export) ซึ่งเป็นมาตรฐานสากลของ JavaScript ยุคใหม่แล้ว
  2. เลิกใช้เครื่องมือเก่า เปลี่ยนมาใช้ Rollup
    • เดิมที jQuery มี Build tool ของตัวเองที่ซับซ้อน แต่ตอนนี้เปลี่ยนมาใช้ Rollup ซึ่งเป็นเครื่องมือมาตรฐานที่วงการ JavaScript ยอมรับในการแพ็ค Library
    • การเปลี่ยนครั้งนี้ทำให้การจัดการโค้ดภายในสะอาดขึ้น และลดความซับซ้อนในการดูแลรักษา (Maintenance)
  3. รองรับการใช้งานผ่าน <script type="module">
    ด้วยการที่ Source เป็น ESM แล้ว คุณสามารถใช้งาน jQuery ในเบราว์เซอร์ได้โดยตรง (ไม่ต้องผ่านขั้นตอน Compile/Bundle) สำหรับโปรเจกต์เล็กๆ หรือการทดสอบ
    <script type="module">
      import $ from './path/to/jquery.module.js';
      $('body').append('<h1>Hello jQuery 4.0.0 ESM!</h1>');
    </script>
    
  4. ทำงานร่วมกับ Modern Build Tools ได้สมบูรณ์
    • Vite
    • Webpack 5
    • Esbuild
    • Next.js / Nuxt.js
  5. ผลลัพธ์ที่สำคัญ: “Tree Shaking” (ในอนาคต)
    แม้ว่าปัจจุบัน jQuery จะยังต้อง import ไปเกือบทั้งก้อนเพื่อให้ทำงานได้สมบูรณ์ แต่การเปลี่ยนโครงสร้างเป็น ESM คือก้าวแรกที่สำคัญมากที่จะช่วยให้ในอนาคต เครื่องมืออย่าง Vite หรือ Webpack สามารถทำ Tree Shaking (การตัดโค้ดส่วนที่ไม่ได้ใช้ออก) ได้อย่างมีประสิทธิภาพมากขึ้น ซึ่งจะส่งผลให้ขนาดไฟล์ที่ผู้ใช้โหลดเล็กลงไปอีกครับ

การยกเลิก Method ที่ล้าสมัย (Deprecated APIs)

Method หลายตัวที่เคยถูกประกาศว่า “ไม่แนะนำให้ใช้” (Deprecated) มานาน จะถูกถอดออกในเวอร์ชันนี้


Internal-only methods removed from jQuery prototype

  1. ปัญหาของ push, sort, และ splice ในอดีต
    ตามปกติแล้ว Object ของ jQuery จะมีลักษณะคล้าย Array (Array-like object) เพื่อให้เราวนลูปหรือเข้าถึง Element ผ่าน index ได้ แต่ในเวอร์ชันก่อนๆ ทีมพัฒนาได้แอบใส่ Method ของ Array แท้ๆ เข้ามาใน Prototype ของ jQuery ด้วย ได้แก่ .push(), .sort(), .splice() เพราะ Method เหล่านี้ทำงานไม่เหมือน Method อื่นของ jQuery (เช่น .css() หรือ .hide()) เพราะมันทำการแก้ไขตัวแปรเดิมโดยตรง (Mutation) และ ไม่สามารถทำ Chaining ต่อได้ (เช่นเขียน $(el).push(newEl).hide() ไม่ได้) ซึ่งขัดกับหัวใจหลักของ jQuery ที่เน้นการ Chain คำสั่งต่อกันไปเรื่อยๆ
  2. วิธีแก้ไขถ้าคุณเคยใช้ Method เหล่านี้
var $elems = $('.my-items');
var newElem = document.getElementById('new');
$elems.push(newElem); // Error: $elems.push is not a function

แบบใหม่ (ใช้ได้ทุกเวอร์ชัน)

var $elems = $('.my-items');
var newElem = document.getElementById('new');

// ใช้ Array.push มายืมมือทำงานให้
[].push.call($elems, newElem);

การเปลี่ยนลำดับ Focus Event ให้ตรงตามมาตรฐาน W3C

นี่เป็นหนึ่งใน Breaking Change ที่สำคัญ คือการปรับลำดับของ event: blur, focusout, focus, และ in ให้ตรงกับมาตรฐานโลก ซึ่งจะแตกต่างจากลำดับที่ jQuery เคยใช้ในเวอร์ชันก่อน ๆ


สรุปการอัปเกรด

ถ้าคุณมีโปรเจกต์เดิมที่ใช้ jQuery 3.x อยู่ ทางทีมงานได้เตรียม jQuery Migrate plugin และ Upgrade Guide ไว้ให้แล้ว เพื่อให้การย้ายไป 4.0.0 เป็นไปอย่างราบรื่นที่สุดครับ


ทำไม่คิดว่าตาย

เป็นเพราะว่า จุดเด่นของ jQuery คือ jQuery selectors และ AJAX แต่มันสามารทำได้ตรง ๆ แล้วใน JavaScript ใหม่ ๆ ที่ติดมากับ browser และการที่มันออก version 4 ออกมาช้ามากจนคนเปลี่ยนไปใช้ตัวอื่น ๆ แล้ว ทั้ง ๆ อย่างผมก็ใช้ jQuery มาตั้งแต่ทำงานเดือนแรกเลย


อ่านเพิ่มเติม

Exit mobile version