Dioxus 0.5: เขียนระบบสัญญาณใหม่, ถอด lifetimes ออก, รองรับ CSS hot reloading และอื่น ๆ
- Dioxus Labs มีกฎไม่เป็นทางการว่าอนุญาตให้มีการเขียนใหม่ครั้งใหญ่ได้เพียงปีละครั้ง
- Dioxus เป็นไลบรารีสำหรับสร้าง GUI ด้วย Rust ซึ่งเดิมเริ่มต้นจากการเขียน Yew ขึ้นมาใหม่
- Dioxus 0.5 ปรับเปลี่ยนไปในทิศทางที่เรียบง่าย แข็งแรง และประณีตยิ่งขึ้นตามคำขอของชุมชน
ฟีเจอร์ใหม่
- เขียน
dioxus-core ใหม่ทั้งหมดและลบโค้ด unsafe ออกทั้งหมด
- เปลี่ยนไปใช้ API แบบ
Signal ที่ไม่ต้อง clone โดยไม่ใช้ use_state และ use_ref
- ลบ lifetimes ทั้งหมดและสถานะ
cx: Scope
- เพิ่มฟังก์ชัน
launch เพียงตัวเดียวสำหรับเริ่มแอปบนทุกแพลตฟอร์ม
- รองรับ asset hot reloading สำหรับ Tailwind และ Vanilla CSS
- เขียนระบบอีเวนต์ใหม่เพื่อให้เข้าถึงชนิดอีเวนต์
WebSys พื้นฐานของแต่ละแพลตฟอร์มได้
- ขยายคอมโพเนนต์ให้เพิ่มแอตทริบิวต์ของ element ได้ เช่น Link รับพร็อพทั้งหมดของ
<a/>
- รวม error boundary แบบเป็นหนึ่งเดียวและผสาน server futures เข้ากับ Suspense
- เพิ่มความเร็วในการปรับจูนเดสก์ท็อป 5 เท่า และมี custom asset handler สำหรับ byte streaming
- รองรับการสตรีมของ server function และ full-stack hot reloading
- มีการปรับปรุง QoL, แก้บั๊ก และอื่น ๆ อีกมาก
ปัญหาเรื่อง lifetimes
- เพื่อลดความซับซ้อนของ Dioxus จึงลบ lifetimes ทั้งหมดออก
- ปัญหาเรื่อง lifetimes มักทำให้ผู้เริ่มต้น Rust รู้สึกกลัวได้ง่าย และแม้แต่นักพัฒนา Rust ที่มีประสบการณ์ก็ยังสับสนได้
- Dioxus 0.5 ลบ lifetimes และ
Scope ออก แล้วนำระบบสัญญาณซึ่งเป็นโซลูชันจัดการสถานะแบบ Copy เข้ามาใช้
การลบ scope และ lifetimes
- ในเวอร์ชันใหม่ scope และ lifetime
'bump ถูกลบออก
- การประกาศคอมโพเนนต์และการใช้ฟังก์ชันรันไทม์ภายในคอมโพเนนต์ทำได้ง่ายขึ้นมาก
ลบโค้ด Unsafe ทั้งหมด
- การลบ lifetime
'bump และ scope ช่วยให้ลบโค้ด unsafe ออกได้จำนวนมาก
- dioxus-core 0.5 ไม่มีโค้ด unsafe
สัญญาณ (Signals)
- เพิ่ม signals เป็นหน่วยพื้นฐานของสถานะแกนหลักในคอมโพเนนต์
Signal<T> เป็น Copy แม้ว่าค่าภายใน T จะไม่ใช่ก็ตาม
- signals ให้การ subscribe ที่ฉลาดกว่า ทำให้มีการ re-render เฉพาะคอมโพเนนต์ที่อ่านสัญญาณนั้นเท่านั้น
CSS hot reloading
- รองรับ hot reloading ของไฟล์ CSS โดย
dx CLI จะเฝ้าดูไฟล์และสตรีมการอัปเดตเข้าแอปทันที
เขียนระบบอีเวนต์ใหม่
- dioxus 0.5 เปิดเผยชนิดอีเวนต์พื้นฐานของแต่ละแพลตฟอร์ม และเพิ่ม trait ที่ให้ API ข้ามแพลตฟอร์ม
เปิดตัวแบบข้ามแพลตฟอร์ม
- API ข้ามแพลตฟอร์มใหม่ช่วยให้กำหนดเป้าหมายหลายแพลตฟอร์มด้วยแอปเดียวกันได้ง่าย
ระบบ asset รุ่นเบตา
- ระบบ asset ใหม่ชื่อ manganis ผสานเข้ากับ CLI เพื่อช่วยตรวจสอบ bundle และปรับแต่ง asset ภายในแอปให้เหมาะสม
เร็วขึ้น 5 เท่าในการเรนเดอร์บนเดสก์ท็อป
- มีการทำ optimization หลายอย่างเพื่อเพิ่มความเร็วในการเรนเดอร์
การขยายแอตทริบิวต์
- มีประโยชน์เมื่อให้ความสามารถเพิ่มเติมกับ element บางประเภท
การย่อแอตทริบิวต์
- สามารถใช้ไวยากรณ์ย่อแอตทริบิวต์เมื่อส่งพร็อพไปยัง element และคอมโพเนนต์ได้
การรวมแอตทริบิวต์หลายบรรทัด
- เพิ่มฟังก์ชันรวมแอตทริบิวต์เพื่อให้สร้างแอตทริบิวต์แบบมีเงื่อนไขได้ง่าย
การสตรีม server function
- รองรับให้ server function สามารถสตรีมข้อมูลไปยังไคลเอนต์ได้
แพลตฟอร์ม CLI แบบ full-stack
- สามารถใช้คำสั่ง
dx เพื่อให้บริการแอป full-stack ได้
รองรับ LiveView router
- router ใช้งานได้ทันทีในแอป LiveView
custom asset handler
- รองรับ custom asset handler บนเดสก์ท็อปเพื่อสตรีมข้อมูลไปยังเบราว์เซอร์ได้อย่างมีประสิทธิภาพ
การจัดการไฟล์แบบเนทีฟ
- รองรับการลากไฟล์มาวางบนเดสก์ท็อปได้อย่างถูกต้อง
การจัดการข้อผิดพลาด
- ใช้ error boundary และ trait สำหรับ throw เพื่อจัดการข้อผิดพลาดในแอปได้ง่าย
hot reloading เป็นค่าเริ่มต้นและโหมด "development" สำหรับเดสก์ท็อป
- เปิดใช้ hot reloading เป็นค่าเริ่มต้น และปรับปรุงประสบการณ์พัฒนาแอปเดสก์ท็อปอย่างมาก
อัปเดตเทมเพลต dioxus
- Miles สมาชิกใหม่ของ core team ได้ยกเครื่องเอกสารและเทมเพลตครั้งใหญ่
Dioxus-Community และ Dioxus-std
- Dioxus Community ได้อัปเดต ecosystem crates ที่สำคัญให้สอดรับกับรีลีส 0.5
ฟีเจอร์ที่กำลังจะมา
- การทำให้ระบบ asset เสถียรและผสานรวมมากขึ้น, การทำ bundle splitting สำหรับ
.wasm, Islands และการโต้ตอบที่กลับมาทำงานต่อได้, server components, developer tools ที่ดีขึ้น, รวมถึงการยกเครื่องฝั่งมือถือและ full-stack
พรีวิวการกลับมาของ Dioxus-Blitz
- ใน "Blitz 2.0" มีการผสาน Servo ทำให้สามารถเรนเดอร์แบบเนทีฟด้วย WGPU โดยใช้เอนจิน CSS เดียวกับที่ขับเคลื่อน Firefox ได้
วิธีมีส่วนร่วม
- สามารถช่วยแปลเอกสาร, ลองทำ "good first issue", ปรับปรุงเอกสาร, มีส่วนร่วมกับ CLI, หรือตอบคำถามในชุมชน Discord ได้
ความเห็นของ GN⁺
- Dioxus 0.5 เป็นอัปเดตสำคัญสำหรับการพัฒนา GUI บนฐาน Rust ที่มอบสภาพแวดล้อมการพัฒนาที่ง่ายและปลอดภัยยิ่งขึ้นให้แก่นักพัฒนา
- การลบ lifetimes และ scope ช่วยลดความซับซ้อนของการพัฒนา Rust และ API แบบ Signal ก็ทำให้การจัดการสถานะง่ายขึ้นมาก
- การปรับปรุง CSS hot reloading และระบบอีเวนต์จะช่วยเพิ่มผลิตภาพของการพัฒนาฟรอนต์เอนด์
- ฟีเจอร์ hot reloading และการเปิดแอปแบบข้ามแพลตฟอร์มช่วยให้นักพัฒนามีประสบการณ์ที่สม่ำเสมอบนหลายแพลตฟอร์ม
- คาดว่าการเปลี่ยนแปลงเหล่านี้จะส่งผลเชิงบวกต่อชุมชน Rust และการพัฒนาเว็บ โดยเฉพาะผู้ที่พัฒนาแอปเว็บและเดสก์ท็อปด้วย Rust
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ประสบการณ์ของผู้ใช้คนแรกเกี่ยวกับการเปลี่ยนแปลงใน Dioxus 0.5
cloneอยู่ตลอด ทำให้คาดหวังประสบการณ์การพัฒนาที่ราบรื่นยิ่งขึ้นคำถามเกี่ยวกับการรองรับ SVG
ความอยากรู้อยากเห็นเกี่ยวกับการเขียนโปรแกรม Rust และคำถามเกี่ยวกับวิธีการทำงานของ crate
generational-boxgenerational-boxทำงานอย่างไรจึงเก็บค่าไว้ได้โดยไม่ต้องคัดลอก และสิ่งนี้ปลอดภัยหรือไม่ประสบการณ์พัฒนาโฮมเพจของ Freenet ด้วย Dioxus
ความประทับใจต่อองค์ประกอบความสำเร็จของ React และนวัตกรรมของ Dioxus
ความเห็นเกี่ยวกับ RSX เมื่อเทียบกับ SwiftUI
ความกังวลเกี่ยวกับการนำ lifetimes ออกจาก Dioxus
คำถามเกี่ยวกับการผสานรวมกับเว็บคอมโพเนนต์
คำถามเกี่ยวกับวิธีเรนเดอร์แอปแบบเนทีฟ