บทความ

Laracon US 2024 Taylor Otwell ประกาศอะไรบ้าง Inertia 2.0, VS Code extension และ Laravel Cloud

Taylor Otwell เปิดตัว VS Code extension ทางการ ฟีเจอร์ใหม่อย่าง defer() กับ Concurrency, Inertia 2.0 และ Laravel Cloud บนเวที Laracon US 2024 โพสต์นี้สรุปทุกเรื่อง พร้อมบอกว่าตอนนี้แต่ละอย่างออกมาเป็นยังไงแล้ว

เผยแพร่
อัปเดต
— เพิ่มสถานะล่าสุดของสิ่งที่ประกาศในงาน
เวลาอ่าน
4 นาที
สรุปจาก
Taylor Otwell · www.youtube.com
แท็ก
#Laravel

Laracon US 2024 จัดเมื่อปลายเดือน ส.ค. 2024 keynote ของ Taylor Otwell ตรงกับเช้าวันที่ 28 ส.ค. ตามเวลาไทย ผมดู livestream แล้วจดเรื่องสำคัญไว้ในโพสต์นี้ ส่วนคลิปเต็มดูย้อนหลังได้ที่ช่อง Laravel

ดูบน YouTube

Laravel มีพนักงาน 30 กว่าคน และติดตั้งกันวันละ 250,000 ครั้ง

Taylor Otwell ผู้สร้าง Laravel ขึ้นเวที Laracon US 2024

ต้นปี 2024 บริษัท Laravel มีพนักงานแค่ 10 คน พอถึงวันงานมีมากกว่า 30 คนแล้ว

ยอดติดตั้ง Laravel ผ่าน composer เพิ่มจากวันละ 6,000 ครั้งในปี 2014 เป็นวันละ 250,000 ครั้งในเดือน ส.ค. 2024

สไลด์ปี 2014 ติดตั้งผ่าน composer วันละ 6,000 ครั้ง

สไลด์ปี 2024 ติดตั้งผ่าน composer วันละ 250,000 ครั้ง

VS Code มี Laravel extension ทางการแล้ว

ที่ผ่านมาเวลาเขียน PHP ใน VS Code เราต้องลง extension หลายตัวกว่าจะช่วยได้ดีพอ บนเวที Taylor ประกาศว่าทีม Laravel จะทำ extension ทางการสำหรับ VS Code ออกมาเอง

ใน demo มีทั้ง quick fix, ลิงก์ไปยังไฟล์ที่เกี่ยวข้อง, ข้อความ translation และ autocomplete ในหลายส่วน เช่น Eloquent, relation และ test

Extension ขีดเส้นใต้ env('POSTMARK_TOKEN') ใน config/services.php เพราะไม่มีค่านี้ใน .env และมีปุ่ม Quick Fix ให้กด

รัน test ได้จากใน editor เลย test ที่ fail จะขึ้นข้อความตรงบรรทัดนั้น

รัน Pest test ใน VS Code test ที่ fail ขึ้นข้อความ Failed asserting that false is true ตรงบรรทัด และแผง Testing แสดงผลแต่ละ test

ฟีเจอร์ใหม่ใน Laravel ที่โชว์บนเวที

  • Temporary URL บน local disk เดิม Storage::temporaryUrl() ใช้ได้กับ S3 เท่านั้น ตอนนี้ใช้กับ disk แบบ local ได้ด้วย (เอกสาร)
  • Container attributes inject ค่าอื่นที่ไม่ใช่ class เข้ามาใน constructor ได้เลย เช่น user ที่ล็อกอินอยู่ (#[CurrentUser]), database connection (#[DB]) หรือค่าใน config (#[Config]) (เอกสาร)

Constructor ของ DeployApplication รับ #[CurrentUser] User, #[DB('mysql')] Connection และ #[Config('services.github.token')] string แล้ว dd ข้อมูล user ออกมาในเบราว์เซอร์

  • chaperone() ใส่ไว้ที่ relation แบบ hasMany แล้ว Laravel จะผูก parent กลับเข้าไปใน child ให้เอง เวลาวนลูป $user->posts แล้วเรียก $post->user ในแต่ละรอบ จะไม่ query users ซ้ำจนเป็น N+1 (เอกสาร)

Demo ที่ปิดด้วย withoutChaperone() ทุกรอบที่เรียก $post->user ยิง select * from users ซ้ำ

  • defer() ปกติถ้า request ต้องทำงานเบื้องหลังบางอย่าง เรามักสร้าง job ส่งเข้า queue เพื่อไม่ให้ response ช้า defer() ให้ Laravel รันโค้ดหลังส่ง response กลับไปที่เบราว์เซอร์แล้ว งานเล็ก ๆ บางอย่างจึงไม่ต้องมี job หรือ queue worker (เอกสาร)

Route /defer เรียก defer(fn () => Metrics::report()) แล้วหน้าเว็บตอบกลับใน 16ms

  • Concurrency บางทีเราอยากดึงข้อมูลหลายอย่างพร้อมกันโดยไม่ต้องรอทีละตัว เช่น เรียก API หลายที่แล้วค่อยรวมผล Concurrency::run() รัน closure เหล่านั้นพร้อมกัน แต่ละตัวทำงานใน PHP process แยกเบื้องหลัง (เอกสาร)

Concurrency::run() เรียก Metrics::get() 5 ครั้งพร้อมกัน ได้ตัวเลข 5 ค่าในเวลา 1,181ms

  • Cache::flexible() ส่งค่าเดิมใน cache ให้ผู้ใช้ไปก่อน แล้วคำนวณค่าใหม่เบื้องหลังเมื่อค่าเก่าเกินเวลาที่ตั้งไว้ (stale-while-revalidate) อยู่ในสไลด์สรุปท้ายงานในชื่อ caching improvements (เอกสาร)

Inertia 2.0 มีฟีเจอร์ใหม่ 6 อย่าง

Taylor โชว์ฟีเจอร์ใหม่ของ Inertia 2.0 ผ่านแอป demo ทีละหน้า

1. Async request

request แบบใหม่ไม่บล็อกหน้าเว็บ ไม่ขึ้น progress bar และ reload ทุกตัวเป็น async โดยค่าเริ่มต้น

หน้า Async Requests ใน demo บอกว่าเป็น request แบบ non-blocking ไม่แสดง progress indicator และ reload ทุกครั้งเป็น async

2. Polling

ดึงข้อมูลใหม่จาก server เป็นระยะ ๆ และลดความถี่ลงเองเมื่อแท็บอยู่เบื้องหลัง

หน้า Polling ใน demo บอกว่า poll server ได้ง่าย และชะลอการ poll เมื่อแท็บไม่ได้เปิดอยู่

3. WhenVisible

โหลด prop เมื่อ element นั้นเลื่อนเข้ามาในหน้าจอ ใช้ Intersection Observer API อยู่เบื้องหลัง

หน้า WhenVisible ใน demo อธิบายว่าเป็นตัวครอบ Intersection Observer API ที่โหลด prop เมื่อ element ปรากฏบนหน้าจอ

4. Infinite scrolling

ตัวช่วยสำหรับทำหน้าเลื่อนลงแล้วโหลดเพิ่มเรื่อย ๆ ฟีเจอร์นี้ไม่ทันรุ่น 2.0 ตอนออกจริง ทีมบอกว่าจะตามมาในรุ่น 2.1 ตอนนี้มี infinite scroll ในเอกสารแล้ว

หน้า Infinite Scrolling ใน demo บอกว่ามีตัวช่วยใหม่สำหรับทำ infinite scroll ด้วย Inertia

5. Prefetching

โหลดหน้าถัดไปไว้ก่อนตั้งแต่ผู้ใช้เอาเมาส์ไปชี้ลิงก์ หรือตั้งแต่หน้าปัจจุบันโหลดเสร็จ พอคลิกจริงหน้าก็ขึ้นทันที

หน้า Prefetching ใน demo แบบไม่ prefetch แสดงเวลาที่โหลดหน้าคำคมของนักบินอวกาศ

ตัวอย่างโค้ด Link prefetch ทั้งแบบ hover, ตั้ง cacheFor, prefetch ตอน mount และแบบ stale-while-revalidate

6. Deferred props

ส่งหน้าเว็บไปก่อน แล้วค่อยโหลด prop ที่ช้าหรือไม่สำคัญตามมาทีหลัง หน้าแรกจึงขึ้นเร็วขึ้น (เอกสาร)

ตอนนั้น Taylor บอกว่า Inertia 2.0 จะออกในเดือน ต.ค. 2024

สไลด์สรุปของใหม่ทั้งหมด

สไลด์สรุป First-party VS Code extension, container attributes, deferred functions, caching improvements, Concurrency facade และ Inertia 2.0

One more thing คือ Laravel Cloud

นอกจากของใหม่ข้างบน Taylor ยังมี one more thing มาเปิดตัวในวันนั้น คือ Laravel Cloud

โลโก้ Laravel Cloud บนสไลด์เปิดตัว

Laravel Cloud เป็นแพลตฟอร์ม deploy แอป Laravel โดยที่เราไม่ต้องดูแล server เอง คล้าย ๆ Vercel ฝั่ง JavaScript ต่างจาก Forge ที่ยังต้องมี server ของเราเอง

หน้า dashboard ของ Laravel Cloud แสดงแอปล่าสุดและประวัติการ deploy

Taylor บอกว่าจาก sign up จนแอปขึ้นออนไลน์ใช้เวลาไม่ถึง 1 นาที ดึงโค้ดจาก GitHub repository มา deploy ได้ทันที

แอปที่ deploy เสร็จเปิดได้ที่ subdomain ของ laravel.cloud

แอปที่ deploy จะได้โดเมนย่อยของ laravel.cloud มาใช้ทันที ตอนนั้นประกาศว่าจะเปิดให้ใช้ใน Q4 ปี 2024 ดูรายละเอียดได้ที่ laravel.com/cloud และงานปีถัด ๆ ไปที่ laracon.us

อ่านต่อ

ล่าสุด

ดูทั้งหมด →