-
เปิดตัว Dioxus 0.6
- Dioxus เป็นเฟรมเวิร์กที่ใช้ Rust เป็นพื้นฐาน ซึ่งสามารถสร้างแอปเว็บ เดสก์ท็อป และมือถือจากโค้ดเบสเดียว
- ตั้งเป้าเป็นเฟรมเวิร์กที่ดีกว่า Flutter
- มุ่งเน้นการรองรับเว็บแบบฟูลสแตกและการสื่อสารระหว่างเซิร์ฟเวอร์/ไคลเอนต์ที่มี type safety พร้อมให้ความสำคัญกับประสิทธิภาพที่รวดเร็วและประสบการณ์นักพัฒนาที่ดีขึ้น
- รีลีส 0.6 ครั้งนี้มุ่งเน้นให้ใช้งาน Dioxus ได้ง่ายขึ้น ปรับปรุงประสบการณ์นักพัฒนา และแก้ไขบั๊ก
-
การปรับปรุงฟีเจอร์หลัก
- รองรับ mobile simulator: เพิ่มความสามารถในการรันแอปบน Android และ iOS simulator รวมถึงอุปกรณ์จริง
- Magic hot reloading: รองรับ hot reloading สำหรับ formatted string, properties และ
rsx!{} ที่ซ้อนกัน
- Interactive CLI: เขียน Dioxus CLI ใหม่ด้วย UX แบบใหม่เพื่อให้ใช้งานสะดวกขึ้น
- Inline stack trace: จับ WASM panic และ log มาแสดงในเทอร์มินัลได้โดยตรง
- Native server function: รองรับ inline server RPC สำหรับแอปเดสก์ท็อปและมือถือ
-
การปรับปรุงประสบการณ์นักพัฒนา
- Toast และ loading screen: เพิ่ม toast และ loading screen ใหม่ระหว่างการพัฒนาเว็บแอป
- ปรับปรุง auto-complete: ปรับปรุงความสามารถ auto-complete ของ RSX อย่างมาก
- ทำให้ระบบ asset เสถียรขึ้น: ทำให้ระบบ asset แบบอิงลิงก์ที่รวมอยู่ใน native app มีเสถียรภาพมากขึ้น
- Streaming HTML: รองรับการสตรีม suspense และ error boundary จากเซิร์ฟเวอร์ไปยังไคลเอนต์
- SSG และ ISG: รองรับ static site generation และ incremental static regeneration
- การจัดการข้อผิดพลาด: ใช้
? ใน event handler, task และ component เพื่อจัดการข้อผิดพลาด
- Meta elements: เพิ่มองค์ประกอบ Head, Title, Meta และ Link ใหม่สำหรับตั้งค่าคุณสมบัติของเอกสาร
prevent_default แบบ synchronous: จัดการอีเวนต์แบบ synchronous บนทุกแพลตฟอร์ม
- ตัวจัดการอีเวนต์
onresize: ติดตามขนาดขององค์ประกอบได้โดยไม่ต้องใช้ IntersectionObserver
- ตัวจัดการอีเวนต์
onvisible: ติดตามการมองเห็นขององค์ประกอบได้โดยไม่ต้องใช้ IntersectionObserver
- การรวมกับ WGPU: เรนเดอร์ Dioxus เป็น overlay บนพื้นผิว WGPU และ child window
dx bundle: รองรับ dx bundle แบบสมบูรณ์สำหรับเว็บ, iOS และ Android
- โหมด
json: ให้ CLI ส่งข้อความออกมาเป็น JSON เพื่อใช้กับเครื่องมือภายนอกและ pipeline CI/CD
- เทมเพลตใหม่: เพิ่มเทมเพลตเริ่มต้นใหม่ 3 แบบสำหรับแอปข้ามแพลตฟอร์ม
- บทเรียนและคู่มือเวอร์ชัน nightly: เพิ่มบทเรียนและคู่มือใหม่สำหรับ Dioxus 0.6 และเวอร์ชันถัดไป
- ต้นแบบ binary patching: ต้นแบบของเอนจิน hot reloading ใหม่ที่เป็น Rust ล้วน
-
ข้อมูลรีลีส
- Dioxus 0.6 เป็นรีลีสที่ใหญ่ที่สุด โดยมีการ merge pull request มากกว่า 350 รายการและแก้ปัญหา issue ไปหลายร้อยรายการ
- มีเป้าหมายปรับปรุงคุณภาพของ hot reloading, auto-complete และ asset bundling อย่างมาก
- ต้องการให้ Dioxus CLI มีความแข็งแรงและใช้งานง่ายยิ่งขึ้น
- ต้องการรองรับมือถือแบบ first-class โดยผนวกรวมเครื่องมือมือถือเข้าไว้ใน dioxus CLI โดยตรง
-
เครื่องมือบรรทัดคำสั่งแบบโต้ตอบได้
- Dioxus 0.6 มอบประสบการณ์ CLI ที่ยกเครื่องใหม่ทั้งหมด
- CLI ใหม่นี้รองรับ live progress bar, animation, ระบบ filter แบบโต้ตอบได้ และความสามารถในการเปลี่ยน log level แบบเรียลไทม์ เป็นต้น
-
รองรับ Android และ iOS
- ใน Dioxus 0.6 นั้น dioxus CLI รองรับ
dx serve --platform ios/android ได้โดยตรง
- มอบการรองรับแพลตฟอร์มมือถือแบบ first-class และ target สำหรับ Android กับ iOS simulator รองรับความสามารถเช่นเดียวกับเดสก์ท็อป
-
ปรับโฉมเอนจิน hot reloading
- มีการปรับปรุงครั้งใหญ่ให้กับเอนจิน hot reloading ของ Dioxus
- รองรับ hot reloading สำหรับ formatted string, rsx block ที่ซ้อนกัน, component property และ Rust expression แบบง่าย
-
ปรับโฉมความสามารถ auto-complete
- ปรับปรุงความสามารถ auto-complete ของ
rsx! {} อย่างมาก
- ปรับปรุงการรวมเข้ากับ Rust-analyzer เพื่อมอบประสบการณ์ auto-complete ที่ดียิ่งขึ้น
-
Inline WASM stack trace และการรวมระบบ tracing
- มีการรวมระบบ tracing สำหรับแอป WASM เพื่อจับ panic และ log แล้วส่งไปยังเทอร์มินัล
-
Toast และ loading screen
- ระหว่างพัฒนาเว็บแอป จะมี loading screen ที่แสดงความคืบหน้าการ build และ toast ที่บอกสถานะการ build
-
ฟูลสแตกบนเดสก์ท็อปและมือถือ
- ผนวกรวม native app กับ server function เพื่อให้ server function ทำงานได้โดยตรงบน target เดสก์ท็อปและมือถือ
-
ทำให้ระบบ asset Manganis เสถียรขึ้น
- ทำให้ระบบ asset ใหม่ Manganis มีเสถียรภาพมากขึ้น และแก้ปัญหาบั๊กกับประเด็นด้านประสิทธิภาพหลายรายการ
-
Suspense และ HTML streaming
- เพิ่ม suspense boundary ซึ่งเป็น core primitive ใหม่สำหรับ async UI
- Dioxus ฟูลสแตกสามารถสตรีมแต่ละ suspense boundary จากเซิร์ฟเวอร์ได้ ทำให้สตรีมแต่ละ chunk ได้โดยไม่ต้องรอให้หน้าโหลดเสร็จทั้งหมด
-
Static site generation และ ISG
- รองรับ static site generation และ incremental static generation เพื่อปรับปรุง SEO และลดเวลาโหลดของผู้ใช้
-
องค์ประกอบเอกสาร: Title {}, Link {}, Stylesheet, Meta {}
- มีองค์ประกอบพิเศษสำหรับโต้ตอบกับอ็อบเจ็กต์เอกสาร HTML ทำให้ตั้งค่าคุณสมบัติของเอกสารได้โดยไม่ต้องเพิ่ม JavaScript
-
การจัดการข้อผิดพลาดด้วยเครื่องหมายคำถาม
- ตอนนี้ Element เปลี่ยนจาก Option เป็น Result แล้ว ทำให้สามารถใช้รูปแบบการจัดการข้อผิดพลาดทั่วไปของ Rust ใน component ได้
-
prevent_default แบบ synchronous
- ปรับปรุงให้จัดการอีเวนต์ทั้งหมดแบบ synchronous ได้ จึงไม่จำเป็นต้องใช้ property
dioxus_prevent_default อีกต่อไป
-
ตัวจัดการอีเวนต์ onresize และ onvisible
- มี handler พิเศษที่สามารถติดตามขนาดและการมองเห็นขององค์ประกอบได้ ทำให้สร้างปฏิสัมพันธ์ที่หลากหลายได้โดยไม่ต้องใช้ JavaScript
-
Hybrid WGPU overlay
- ผ่านความสามารถ "child window" ของ Dioxus desktop ทำให้สามารถรวม native Dioxus app เป็น overlay บนหน้าต่างเดิมได้
-
รองรับการ bundle สำหรับเว็บ, iOS และ Android
- เพิ่มการรองรับเว็บและมือถือให้กับ
dx bundle เพื่อให้ bundle ไปยัง target ที่หลากหลายได้
-
JSON output สำหรับ CI / CLI
- มีโหมด JSON output สำหรับ CLI ทำให้รับ log ในรูปแบบ JSON ได้
-
เทมเพลตเริ่มต้นใหม่
- เพิ่มเทมเพลตเริ่มต้นใหม่ 3 แบบสำหรับแอปข้ามแพลตฟอร์ม
-
เอกสารเวอร์ชัน nightly, บทเรียน และคู่มือใหม่
- มีการยกเครื่องเอกสารและบทเรียนครั้งใหญ่ โดยครอบคลุมพื้นฐานและมุ่งเน้นเรื่องการ deploy
-
พรีวิว in-place binary patching
- กำลังทดลองเพิ่ม hot reloading สำหรับโค้ด Rust
-
การเปลี่ยนแปลงเล็กน้อย
- รวมการเปลี่ยนแปลงย่อยหลายอย่าง เช่น รองรับ system tray, custom event loop, แยก
dioxus-document และ dioxus-history, รวมถึงทำให้ eval API เรียบง่ายขึ้น
-
อัปเกรดจาก 0.5 ไป 0.6
- แม้จะมีการเปลี่ยนแปลง API บางส่วน แต่ในกรณีส่วนใหญ่สามารถแก้ไขได้ไม่ยาก
-
บทสรุป
- รีลีสนี้แก้ปัญหามากมายและปรับปรุงฟีเจอร์หลายด้าน ทำให้ Dioxus 0.6 เป็นรีลีสที่สมบูรณ์ที่สุด
- จากนี้ไปมีแผนจะเน้นการทำวิดีโอบทเรียน เขียนเอกสาร แก้บั๊ก ปรับปรุงประสิทธิภาพ และร่วมมือกับชุมชน มากกว่าการเพิ่มฟีเจอร์ใหม่
3 ความคิดเห็น
ช่วงนี้กำลังใช้ tauri อยู่เหมือนกัน แต่ก็น่าลองอันนี้ดูสักครั้งนะ
Dioxus - ไลบรารี UI ข้ามแพลตฟอร์มสำหรับ Rust ที่ได้รับอิทธิพลจาก React
Dioxus 0.5 - แอปเว็บ เดสก์ท็อป และมือถือที่พัฒนาด้วย Rust
ความเห็นจาก Hacker News
ผู้ใช้รายหนึ่งแชร์ประสบการณ์ที่ลองใช้รีลีสใหม่ โดยระบุว่าได้สร้างโปรเจ็กต์ด้วย
cargo installและรันdx serveแต่เกิดข้อผิดพลาดจากคอมไพเลอร์ และคิดว่าถ้าใช้เวิร์กโฟลว์ Rust มาตรฐานก็น่าจะดีบักได้ง่ายกว่า สามารถกดvเพื่อเปิดบันทึกแบบละเอียดได้ แต่ก็ไม่ได้ให้ข้อมูลที่ชัดเจนเพิ่มเติมผู้ใช้อีกรายบอกว่าตนลองใช้เฟรมเวิร์ก GUI ของ Rust ทุก ๆ 6 เดือน แต่ก็มักเจอข้อผิดพลาดตอนดาวน์โหลดเดโมหรือ playground และมองว่าควรตัดสินใจลงทุนระยะยาวอย่างรอบคอบ
มีการระบุว่า Dioxus เป็นเครื่องมือเทคโนโลยีเว็บแพลตฟอร์มเพียงตัวเดียวที่สามารถมอบความสามารถข้ามแพลตฟอร์มได้โดยใช้ JavaScript ให้น้อยที่สุด และมองพัฒนาการของสแตกการเรนเดอร์ WGPU ในแง่บวก
มีความเห็นว่า Dioxus ยังขาด ecosystem และไม่มีไลบรารีคอมโพเนนต์ อีกทั้งยังไม่ค่อยมั่นใจกับ virtual DOM จึงกำลังติดตามและใช้งาน Leptos ซึ่งเป็นคู่แข่งอยู่
มีผู้ใช้ Dioxus ฝั่งเซิร์ฟเวอร์อยู่ และประเมินว่าวิธีการเขียนคอมโพเนนต์กับประสบการณ์นักพัฒนานั้นดีมาก
หลังจากค้นพบและนำ Lustre มาใช้ ก็ระบุว่าไม่นึกอยากใช้อะไรนอกจาก The Elm Architecture อีกเลย ขณะเดียวกันก็กำลังสร้างต้นแบบตัวแก้ไขสถานการณ์ด้วย Iced ของ Rust และเชื่อถือได้เพราะ System76 ใช้มันสร้าง Cosmic
มีความเห็นว่านี่คือเฟรมเวิร์กเทคโนโลยีใหม่ที่มีอนาคตมากที่สุด และถ้าสำเร็จก็อาจมาแทนเฟรมเวิร์กอื่นทั้งหมดได้ โดยเน้นที่ประสิทธิภาพ และ Rust ก็เป็นรากฐานด้านความปลอดภัยกับประสิทธิภาพ
มีการระบุว่า Dioxus ได้รับเงินทุนจาก venture capital แล้ว จึงควรระวังก่อนจะฝากอนาคตไว้กับมัน อีกทั้งยังมีข้อมูลไม่เพียงพอว่าจำเป็นต้องโอนลิขสิทธิ์หรือมี CLA หรือไม่ และในบรรดาผู้มีส่วนร่วมมีสักกี่คนที่ได้รับเงินเดือน
มีข้อเสนอว่าน่าจะปรับปรุงคอนทราสต์ของชื่อโพสต์ให้เข้ากับพื้นหลังของหน้าได้ดียิ่งขึ้น พร้อมตั้งคำถามเปรียบเทียบกับสถานะปัจจุบันของ Qt เรื่องการเข้าถึงและการรองรับหน้าจอ HiDPI อีกทั้งรู้สึกว่ายังขาด binding คุณภาพดีสำหรับภาษานอกเหนือจาก C++ และ Python และมองว่าถ้ามี binding กับเครื่องมือที่ดีกว่านี้ก็น่าจะได้รับความนิยมมากขึ้น
มีความเห็นว่าฟีเจอร์ hot reloading ใหม่ยอดเยี่ยมมาก และบอกว่าการต้องรอให้ UI อัปเดตในเฟรมเวิร์กเว็บ Rust อื่น ๆ เป็นปัญหาใหญ่