Mozilla องค์กรที่ทำเกือบทุกอย่างยกเว้นเว็บเบราว์เซอร์ จัดเทศกาล JavaScriptmas ออกโจทย์เขียนโปรแกรมภาษา JavaScript วันละ 1 โจทย์ ระหว่างวันที่ 1-24 ธันวาคม
ผู้สนใจสามารถเข้าร่วมทำโจทย์ได้บน แพลตฟอร์มเขียนโค้ดออนไลน์ Scrimba โดยผู้โชคดี 2 รายที่ทำโจทย์ถูกอย่างน้อย 1 ข้อ จะได้รับรางวัลเป็น MacBook Air M3 และของที่ระลึกจาก Mozilla Developer Network (MDN) กับ Scrimba
ตัวอย่างโจทย์มีหลากหลาย ทั้งทำ DOM manipulation, UI design, CSS, accessibility, cyber security เป็นต้น
ที่มา - Mozilla
GitHub ออกรายงาน Octoverse โดยมีการระบุความนิยมของภาษา Python ที่ปีนี้ขึ้นมาแซงหน้า JavaScript เป็นอันดับ 1 แล้ว หลังจากแซง Java มาอยู่อันดับ 2 ตั้งแต่ 2019 ส่วนอันดับ 3-5 ได้แก่ TypeScript, Java และ C# ซึ่งการลดอันดับของ JavaScript ก็มีส่วนเกี่ยวข้องโดยตรงกับการเติบโตของ TypeScript ที่เป็น JavaScript เวอร์ชันปรับปรุงนั่นเอง
GitHub ระบุว่าการเติบโตของความนิยมของ Python สอดคล้องกับการเติบโตของ Jupyter Notebooks โดยปัจจุบันมี Repos ที่มี Jupyter กว่า 1.5 ล้าน Repos ซึ่งเติบโตจากปี 2022 ถึง 170%
ที่มา - GitHub
Deno รันไทม์ JavaScript/TypeScript ออกเวอร์ชั่น 2.0 หลังออกเวอร์ชั่นแรกมาสี่ปี ความเปลี่ยนแปลงสำคัญคือการทำงานร่วมกันได้กับ Node.js เต็มตัว สามารถอ่านไฟล์ package.json
และโฟลเดอร์ node_modules
ได้
สำหรับ Deno เองที่จริงมีระบบจัดการแพ็กเกจผ่านไฟล์ deno.json
ของตัวเอง และตอนนี้ก็ยังสามารถใช้งานอ้างอิงแพ็กเกจ npm ได้เหมือนกัน แนวทางการเข้ากันได้กับ Node.js ทำให้ตอนนี้สามารถใช้งานเฟรมเวิร์คยอดนิยมได้แทบทั้งหมด เช่น Next.js, Astro, Remix, Angular, SevelteKit
sorrycc นักพัฒนา front-end ของ Alipay หรือ Ant Group ประกาศโอเพนซอร์สโครงการ Mako โครงการเครื่องมือ build front-end ความเร็วสูงที่เขียนด้วยภาษา Rust โดยเน้นความเร็วในการรันและขนาดสคริปต์ที่ได้ Mako สามารถทำงานได้ประสิทธิภาพดีกว่า Rsbuild, Farm, หรือ Vite
ทีมงานทดสอบ build โครงการ Ant Design Pro ที่ webpack ใช้เวลา 16 วินาที ส่วน Mako ใช้เวลาเพียง 3.9 วินาทีเท่านั้น และเมื่อดูเวลา Hot Module Replacement ก็เร็วกว่ามากจนแทบเป็น real-time
ทีมงานเริ่มพัฒนา Mako เมื่อเดือนมีนาคม 2023 โดยเริ่มจากทีมงานที่ไม่เคยเขียน Rust 3 คน เรียนรู้ผ่านโครงการก่อนหน้า เช่น Farm หรือ Rspack ตลอดจน ChatGPT และตอนนี้ก็ใช้งานเป็นการภายใน Ant อยู่ในหลายโครงการแล้ว
Google Sheets ปรับปรุงการทำงานบนเดสก์ท็อปใหม่ โดยการคำนวณค่าในตารางจะเร็วขึ้น 2 เท่า จากการแปลงโค้ดส่วนคำนวณมาเป็น WebAssembly Garbage Collection (WasmGC) แทนการรันเป็น JavaScript แบบเดิม
แรกสุดนั้น เอนจินคำนวณของ Google Sheets ทำงานที่ฝั่งเซิร์ฟเวอร์ เขียนด้วย Java และเริ่มใช้ในปี 2006 จากนั้นเริ่มปรับมาคำนวณที่ฝั่งเบราว์เซอร์แทนในปี 2013 โดยช่วงแรกทำผ่าน Google Web Toolkit (GWT) ช่วงหลังเปลี่ยนมาใช้ Java ช่วยผ่าน Java to Closure JavaScript transpiler (J2CL)
Polyfill โครงการจาวาสคริปต์สำหรับอิมพลีเมนต์ฟีเจอร์ใหม่ๆ ในเบราว์เซอร์ให้กับเบราว์เซอร์เก่าๆ ถูกแทรกโค้ดดึงผู้ใช้เข้าเว้บพนันหากเว็บเหยื่อดึงจาวาสคริปต์ผ่านโดเมน cdn.polyfill.io
ที่เป็นเว็บเริ่มต้นแต่เดิม
Andrew Betts ผู้สร้างโครงการ Polyfill ออกมาระบุว่าเขาไม่ใช่เจ้าของโเดมนแต่แรก และต่อมาโดเมนถูกขายไปยังบริษัทจีนแห่งหนึ่งโดยเขาไม่รับรู้ด้วย อีกเหตุผลที่ควรเลิกใช้ Polyfill คือเบราว์เซอร์ยุคใหม่มีฟีเจอร์ครบถ้วนใกล้เคียงกันหมดแล้ว
HTMX เฟรมเวิร์คเว็บขนาดเล็กที่ได้รับความนิยมสูงขึ้นมากในช่วงหลังออกเวอร์ชั่น 2.0 หลังจากออกเวอร์ชั่น 1.0 มาตั้งแต่ปี 2020 โดยปรับเปลี่ยนด้วยการย้ายส่วนขยายต่างๆ เช่น Server Side Events, Web Sockets, Preload ออกเป็นโครงการแยกและเปิดให้อัพเดตเวอร์ชั่นได้แยกจากโครงการหลัก
หลังจากแยกส่วนขยายออกไปแล้ว เวอร์ชั่นนี้จึงถอดฟีเจอร์ที่เคยอยู่ในโครงการหลักออกไปต่างหาก ปรับ API ให้เป็นมาตรฐานมากขึ้น แต่โดยรวมแล้วการใช้งานยังคงเดิมอยู่แม้จะไม่สามารถทำงานกับโค้ดเดิมได้แล้วเพราะ API เปลี่ยน ที่สำคัญคือถอดการรองรับ Internet Explorer ออกทั้งหมด
Meta เปิดตัว React Compiler โครงการทดลองของ React ที่ช่วยปรับแต่งประสิทธิภาพของแอพให้ดีขึ้น ลดจำนวนคอมโพเนนต์จะถูกเรนเดอร์ใหม่ให้เหลือน้อยที่สุด เมื่อเกิดการเปลี่ยนสถานะขึ้นมา
ชื่อของ React Compiler อาจชวนงงๆ อยู่บ้าง เพราะ React เขียนด้วย JavaScript ที่เป็นภาษาแบบ interpreter แต่จริงๆ แล้ว React Compiler ทำหน้าที่เข้ามาอ่านโค้ดของเราเพื่อช่วยปรับแต่งประสิทธิภาพของโค้ดให้อัตโนมัติ ช่วยทำงานด้านแคช (memoization) ที่ก่อนหน้านี้โปรแกรมเมอร์ต้องทำเอง เช่น useMemo, useCallback, React.memo
กูเกิลเขียนโพสต์ประกาศควบรวมเฟรมเวิร์ค Angular และ Wiz อย่างเป็นทางการ หลังประกาศไปก่อนหน้านี้บนเวทีงาน NG Conf 2024
คนทั่วไปรู้จัก Angular กันอยู่แล้ว แต่ Wiz เป็นเฟรมเวิร์คที่ใช้กันเฉพาะภายในกูเกิลเองเท่านั้น ตัวอย่างผลิตภัณฑ์ที่ใช้งาน Wiz อยู่แล้วมีทั้ง Google Search, Google Photos, Google Payments รูปแบบการทำงานของ Wiz คือเรนเดอร์หน้าเพจที่ฝั่งเซิร์ฟเวอร์ (server-side rendering) แล้ว "สตรีม" เพจมายังเครื่องของผู้ใช้ เพื่อลดการเรนเดอร์ JavaScript ที่ฝั่งไคลเอนต์ให้มากที่สุด
กูเกิลประกาศควบรวมเฟรมเวิร์ค Angular เข้ากับเฟรมเวิร์คภายในบริษัทอีกตัวชื่อ Wiz
Wiz เป็นเฟรมเวิร์คที่ถูกใช้งานภายในกูเกิลมานานแล้ว แต่ไม่ได้เปิดเผยต่อคนนอก แนวทางการใช้งาน Wiz มักเป็นแอพฝั่งคอนซูเมอร์ เช่น Search, Workspace, YouTube ที่ต้องการประสิทธิภาพสูง ตอบสนองเร็ว ในขณะที่ Angular ใช้กับแอพฝั่งองค์กร แต่ภายหลังความแตกต่างของเฟรมเวิร์คสองตัวนี้ก็น้อยลงเรื่อยๆ ทำให้ทั้งสองทีมมาหารือกัน และตัดสินใจควบรวมมันเข้าด้วยกัน
WinterJS รันไทม์จาวาสคริปต์ที่พัฒนาต่อจาก SpiderMonkey และเขียนด้วย Rust เพิ่งประกาศเปิดตัวมาเมื่อสี่เดือนที่แล้ว ตอนนี้โครงการเข้าสู่เวอร์ชั่น 1.0 เรียบร้อยแล้ว เนื่องจากทำ API เข้ากันได้กับมาตรฐาน WinterCG และยังทำ API ของ Cloudflare
ในแง่ของประสิทธิภาพ WinterJS รันแบบเนทีฟได้ที่ระดับ 150k req/s เร็วกว่า Bun และ NodeJS ชัดเจน แต่หากคอมไพล์เป็น WASM นั้นประสิทธิภาพยังได้เพียง 20k req/s เท่านั้น
โครงการ Bun เพิ่มฟีเจอร์ Bun Shell ในเวอร์ชั่น 1.0.24 เปิดทางให้โปรแกรมเมอร์จาวาสคริปต์สามารถเขียนสคริปต์แบบเดียวกับ shell เพื่อให้จัดการระบบได้ซับซ้อนขึ้น เช่น การสำรองข้อมูล, ลบไฟล์, และรันโปรแกรมภายนอก
Bun Shell เป็น shell ที่อิมพลีเมนต์ขึ้นใหม่ทั้งหมด แก้ปัญหาการเรียก shell ภายนอกผ่าน subprocess ต่างๆ ที่กินเวลานาน และยังไม่สามารถทำงานข้ามแพลตฟอร์มได้ เช่น Bash นั้นไม่สามารถใช้งานบนวินโดวส์ได้
คำสั่งภายใน Bun Shell เองยังมีจำกัดมาก ได้แก่ cd, ls, rm, echo, pwd, และ bun ส่วนคำสั่ง mv นั้นยังอิมพลีเมนต์ไม่สมบูรณ์ และยังมีแผนอิมพลีเมนต์คำสั่ง mkdir, cp, และ cat ต่อไป ส่วนการเรียกโปรแกรมภายนอกนั้นสามารถเรียกตามโฟลเดอร์ PATH ได้เหมือน shell ปกติ
LangChain เปิดตัวเฟรมเวิร์กเวอร์ชัน 0.1.0 แล้ว หลังจากพัฒนามา 1 ปี
LangChain เป็นเฟรมเวิร์กโอเพนซอร์สยอดนิยมที่ออกแบบมาเพื่อช่วยสร้างแอปที่ใช้ LLM โดยเวอร์ชันนี้จะมีทั้ง Python และ JavaScript ซึ่งเป็นการปรับปรุงและเพิ่มความสามารถต่าง ๆ ดังนี้
DeepLearning.AI แพลตฟอร์มการเรียนรู้ AI และ Deep Learning ที่ก่อตั้งโดย Andrew Ng เปิดตัวหลักสูตรระยะสั้น Generative AI ในภาษา JavaScript ฟรีในช่วงเวลาจำกัด สอนการสร้างแอป LLM ด้วย LangChain โดย Jacob Lee วิศวกรซอฟต์แวร์ผู้ก่อตั้งและหัวหน้าผู้ดูแลโครงการ LangChain.js ใช้เวลาเรียน 1 ชม. เหมาะสำหรับนักพัฒนาเว็บที่มีพื้นฐานเกี่ยวกับ JavaScript ระดับกลาง
เมื่อเดือนธันวาคมที่ผ่านมา MySQL ประกาศเพิ่มฟีเจอร์การรันโค้ดภาษา JavaScript จากในฐานข้อมูลโดยตรง (stored programs) ลักษณะเดียวกับที่ Oracle Database ทำได้มาก่อนหน้านี้ (เวอร์ชัน 21c เป็นต้นมา)
โครงการ Biome ชุดเครื่องมือสำหรับพัฒนาเว็บประสิทธิภาพสูงประกาศความสำเร็จในการพัฒนาโครงการให้เกือบเทียบเท่าโครงการ Prettier โครงการ code formatter ยอดนิยมที่มียอดดาวน์โหลดถึงสัปดาห์ละ 29 ล้านครั้ง
ก่อนหน้านี้ Biome ทำงานต่างกับ Prettier พอสมควร โดยสามารถผ่านชุดทดสอบของ Prettier ได้เพียง 85% เท่านั้น แต่เมื่อต้นเดือนพฤศจิกายนที่ผ่านมาทาง Prettier ก็หาเงินจากสปอนเซอร์ต่างๆ มาตั้งรางวัล 22,550 ดอลลาร์ให้กับโครงการที่สามารถอิมพลีเมนต์ code formatter ที่ผ่านชุดทดสอบของ Prettier ได้เกิน 95% โดยเขียนโค้ดด้วยภาษา Rust และทางโครงการ Biome ก็เพิ่มฟีเจอร์อย่างรวดเร็วจนผ่านชุดทดสอบได้ 96% ได้รับรางวัลไปหลังการประกาศรางวัลเพียงสามสัปดาห์
โครงการ Wasmer ประกาศนำ SpiderMonkey มาทำโครงการ WinterJS รันไทม์สำหรับรัน Service Worker แบบเดียวกับ Cloudflare Workers, Deno Deploy, หรือ Vercel โดยอาศัยการอิมพลีเมนต์ API จากมาตรฐาน wintercg
เรื่องจาก Wasmer ต้องการให้โค้ดรันผ่าน WASM ได้ด้วย จึงต้องเลือกใช้เทคโนโลยีที่รองรับการคอมไพล์ไปยัง WASM ได้ด้วย ตัวโค้ดหลักของ WinterJS ใช้ SpiderMonkey ผ่านทาง Rust API ของโครงการ spiderfire
ตัวโครงการ WinterJS สามารถรันผ่านคำสั่ง wasmer
ตามปกติ หรือจะรันแบบเนทีฟผ่านทางคำสั่ง cargo
ของ Rust ก็ได้
ที่มา - Wasmer
Cloudflare ร่วมกับ Vercel ประกาศสนับสนุน Socket API มาตรฐานของ Web-interoperable Runtimes Community Group (wintercg) เพื่อเปิดทางให้แอปพลิเคชั่นนอกเบราว์เซอร์ที่ต้องการเชื่อมต่อบริการภายนอก
ตอนนี้รันไทม์ต่างๆ มักมี API แตกต่างกันไป เช่น net
และ tls
ของ NodeJS ขณะที่ Deno ก็มี API ของตัวเองต่างไปทำให้แอปพลิเคชั่นต้องแก้โค้ดไปมา
Cloudflare นำมาตรฐาน Socket API นี้มาใช้งานใน Cloudflare Workers ของตัวเอง โดยชูประเด็นว่าสามารถเลือกใช้งาน TLS ได้โดยง่าย และแนวทางใช้งานสำคัญของไลบรารีนี้คือการเชื่อมต่อฐานข้อมูล เช่น MySQL หรือ PostgreSQL จากในรันไทม์
Bun รันไทม์จาวาสคริปต์ ออกเวอร์ชัน 1.0 ตามที่ประกาศไว้ ของใหม่ที่เพิ่มเข้ามาจากเวอร์ชัน 0.8 คือรองรับการรันเฟรมเวิร์คยอดนิยม Next.js, Astro, Nest.js แล้ว
Bun เป็นรันไทม์ที่ออกแบบมาให้ใช้แทน Node.js ได้ทันที (drop-in replacement) สามารถนำแอพที่เขียนบน Node.js และแพ็กเกจ npm มาใช้ทำงานได้เลย จุดเด่นของมันคือความเร็วที่เหนือกว่า 4 เท่า ยิ่งถ้าเขียนโค้ดมาเป็น TypeScript ที่ต้องแปลง (transpile) มาเป็น JavaScript ก่อนรัน ยิ่งเห็นความแตกต่างมากขึ้นอีก เพราะ Bun มีตัว transpiler ฝังมาในรันไทม์เลย สามารถรัน TypeScript ได้ในตัวเช่นเดียวกับ JavaScript
David Heinemeier Hansson (@dhh) ผู้ร่วมก่อตั้ง Basecamp และผู้สร้าง Ruby on Rails ประกาศถอดภาษา TypeScript ออกจากโครงการ Turbo ที่เร่งความเร็วหน้าเว็บด้วยการลดการโหลดจากการกดลิงก์หรือส่งข้อมูลฟอร์ม
Hansson ระบุในประกาศว่าเขาไม่เคยชอบ TypeScript ตั้งแต่แรก และไม่ชอบตลอดที่ใช้งานมา 5 ปี แต่กลับชอบ JavaScript มากกว่าและนับว่าเป็นภาษาที่ชอบเป็นรองเพียง Ruby เท่านั้น และข้อเสียต่างๆ ของ JavaScript ก็ถูกแก้ไปเยอะแล้ว โดยเฉพาะระบบ class ขณะที่ภาษา TypeScript นั้นเพิ่มขั้นตอนการคอมไพล์เข้ามาและบังคับใช้ type จนวุ่นวายและสุดท้ายในเคสยากๆ ก็ต้องใช้ any
Bun รันไทม์จาวาสคริปต์คู่แข่ง NodeJS ออกเวอร์ชั่น 0.8 หลังจากออกเวอร์ชั่นแรกมาปีกว่าๆ พร้อมกับประกาศว่าจะออกเวอร์ชั่น 1.0 วันที่ 7 กันยายนนี้
ในเวอร์ชั่น 0.8 นี้มีฟีเจอร์สำคัญคือตัว debugger เมื่อรัน bun ด้วยออปชั่น --inspect
จะรัน HTTP server ในพอร์ตที่ไม่มีการใช้งานเพิ่มขึ้นมาเพื่อให้เชื่อมต่อ debugger เข้าไปได้ มีฟีเจอร์ครบถ้วนทั้งการตั้ง breakpoint, ดูค่าในตัวแปรต่างๆ, และการรันแบบ step-by-step
นอกจากฟีเจอร์ของ Bun เองแล้วก็ยังปรับปรุงการซัพพอร์ตไลบรารีและเฟรมเวิร์คต่างๆ เช่น SvelteKit, Nuxt, OpenAI เป้นต้น
ที่มา - Bun
Mozilla โชว์ประสิทธิภาพของ Firefox Nightly ในช่วงประมาณ 2 เดือนที่ผ่านมา ว่าสามารถเอาชนะ Chrome ได้แล้วในเบนช์มาร์ค SunSpider ที่ใช้วัดประสิทธิภาพของการรัน JavaScript บนเบราว์เซอร์
ข้อมูลจากหน้าเว็บ Are We Fast Yet ของทีม Firefox เอง ชี้ว่า Firefox ปรับปรุงประสิทธิภาพของ SunSpider ในช่วงปลายเดือนมิถุนายน 2023 ลดระยะเวลาการรันเบนช์มาร์คลงจากราว 160ms มาเหลือ 135ms และในช่วงล่าสุดขยับได้เกือบ 125ms แล้ว ในขณะที่ Chrome ค่อนข้างอยู่ตัวที่ราว 150-155ms
Bun รันไทม์จาวาสคริปต์ออกเวอร์ชั่น 0.7 โดยตัว Bun นั้นมีทั้ง runtime, bundler, transpiler, และ package manager โดยชูจุดแข็งที่ประสิทธิภาพดีกว่า NodeJS มาก ในเวอร์ชั่นล่าสุดก็หันมาปรับปรุงการทำงานร่วมกับโค้ด NodeJS เดิมพร้อมกับเพิ่มโหมดประหยัดแรม
เนื่องจาก API ของ Bun ยังไม่เท่ากับ NodeJS ทำให้ไม่สามารถรันเฟรมเวิร์คยอดนิยมหลายตัวบน Bun ในเวอร์ชั่นนี้ก็รองรับ Vite เพิ่มเข้ามาในระดับทดลอง สำหรับ API ที่เพิ่มเข้ามา เช่น Worker
สำหรับการรันโค้ดแยกออกจาก main thread เพื่อเตรียมรองรับ API worker_threads
ของ NodeJS, หรือ AsyncLocalStorage
ที่เป็น API จำเป็นสำหรับ NextJS
Deno รันไทม์คู่แข่ง NodeJS ออกเวอร์ชั่น 1.34 โดยเพิ่มฟีเจอร์สำคัญคือการคอมไพล์โปรแกรมเป็นไบนารีไฟล์เดียวให้ครอบคลุมยิ่งขึ้น
เดิม Deno รองรับคำสั่งคอมไพล์ตั้งแต่เวอร์ชั่น 1.6 แต่ก่อนหน้านี้ไม่รองรับการคอมไพล์โปรแกรมที่ดึงไลบรารีจาก npm ในเวอร์ชั่นนี้ก็รองรับแล้วทำให้สามารถใช้งานได้หลากหลายขึ้น ข้อดีของการคอมไพล์ทำให้สามารถนำโปรแกรมไปรันเครื่องอื่นได้สะดวกขึ้น แบบเดียวกับโปรแกรมภาษา Go ที่มักส่งไบนารีไฟล์เดียวไปรันได้เลย นอกจากนี้ยังมีข้อดีคือเวลาเริ่มรันโปรแกรมสั้นลงด้วย
Bun รันไทม์คู่แข่งก็เพิ่งรองรับการคอมไพล์ในเวอร์ชั่นล่าสุด
Bun รันไทม์ JavaScript ที่เพิ่งเปิดตัวเมื่อปีที่แล้ว ออกเวอร์ชั่น 0.6.0 โดยมีความสามารถสำคัญคือสร้างไฟล์ executable แยกไปรันได้โดยไม่ต้องการไลบรารีภายนอกเพิ่มเติม
โครงสร้างภายในที่เปลี่ยนไป คือทาง Bun สร้าง bundler ขึ้นใหม่เอง โดยยังคงชูความเร็วว่า build เร็วกว่า Webpack 5 ถึง 224 เท่าตัว เพราะตัว bundler แปลงโค้ด (transpile) ในตัวพร้อมใช้งาน ไม่ต้องไปแปลงใหม่อีกรอบ นักพัฒนาสามารถเขียนปลั๊กอินให้ bundler และ runtime ได้ด้วย API เดียวกัน
ความเปลี่ยนแปลงอื่นๆ มีอีกจำนวนมาก เช่น รองรับ TypeScript 5.0, เพิ่ม API ของ NodeJS มากขึ้นหลายตัว และรองรับ Web API เพิ่มเติม นอกจากนี้ยังแก้บั๊กจำนวนมาก