suji - ทางเลือกแทน Electron
(github.com/ohah)นี่คือสิ่งที่คล้าย Electron ที่สร้างด้วย Zig
จริง ๆ ชื่ออาจตั้งให้ดูเท่ไปหน่อย แต่ก็คือเดสก์ท็อปเฟรมเวิร์กที่สร้างด้วย zig ธรรมดา ๆ
ผมคิดว่า Electron เป็นแอปที่หลีกเลี่ยงไม่ได้ถ้าจะพัฒนาเดสก์ท็อปแอป
โดยเฉพาะเมื่อจำเป็นต้องคำนึงถึงทั้งสภาพแวดล้อม Mac และ Windows พร้อมกับต้องการประสิทธิภาพในการพัฒนาที่รวดเร็ว ผมมองว่ายังไม่มีเฟรมเวิร์กไหนที่มีเสน่ห์เท่า Electron
สามารถใช้ ecosystem ของ JS ได้ตรง ๆ และผ่านการพิสูจน์จากตลาดแล้ว (vscode, slack, discord เป็นต้น)
ด้วยความอเนกประสงค์และข้อดีเหล่านั้น ทำให้มีการใช้งานหลากหลาย แต่ข้อเสียก็เป็นที่รู้จักกันมากและเป็นเฟรมเวิร์กที่โดนบ่นเยอะเช่นกัน
ผมเองก็เป็นหนึ่งในกลุ่มผู้ใช้ที่มีความไม่พอใจแบบนั้น
เพราะไม่ชอบจุดนั้นเลยลองใช้ Tauri แต่ Tauri เองก็มี
ข้อจำกัดเรื้อรัง(?) ของ system webview และเมื่อใช้ Tauri ภาษาฝั่งแบ็กเอนด์ก็จะถูกจำกัดเป็น Rust
ถ้าใช้ Electron ก็จะถูกจำกัดเป็น Node
ถ้าใช้ Wails ก็จะถูกจำกัดเป็น Go ซึ่งผมไม่ชอบตรงนี้
แน่นอนว่าใช้ FFI ก็สามารถใส่ภาษาอื่นเข้าไปได้ แต่...
โดยเฉพาะในยุคนี้ที่กำแพงด้านภาษาถูกทำลายลงไปมากแล้ว ผมไม่ชอบที่ยังต้องมีข้อจำกัดด้านภาษาจากตัวเฟรมเวิร์ก
zig, rust, go, lua, node
สามารถเลือกเป็นภาษาฝั่งแบ็กเอนด์ได้ทีละภาษา และยังสามารถเลือกหลายภาษาพร้อมกันเพื่อตั้งค่าแบ็กเอนด์หลายตัวได้ด้วย
ผมตั้งใจจะเพิ่มภาษาแบ็กเอนด์ต่อไปเรื่อย ๆ
ทั้ง Python และ Ruby ด้วย
เมื่อสามารถใส่ได้หลายภาษา ภาษาฝั่งแบ็กเอนด์แต่ละตัวก็สื่อสารกันผ่าน IPC ได้
ตัวอย่างเช่น เวลาจะเรียก sqlite ใน Node
ปกติต้องติดตั้ง better-sqlite3 ก่อน แต่ในกรณีของ sqlite นั้นมีรวมเป็นปลั๊กอินในตัวอยู่แล้ว และมีลักษณะเฉพาะคือ Node จะเรียกใช้ผ่าน Zig โดยตรง
ตอนนี้สามารถ build ไปลงมือถือได้แล้ว แต่ยกเว้น Mac แล้ว ส่วนที่เหลือยังไม่เสถียร
เฉพาะ iOS เท่านั้นที่ตามนโยบายแล้วไม่สามารถใช้ Node เป็นภาษาแบ็กเอนด์ได้
ตอนนี้บน Mac อยู่ในสถานะที่สามารถ build จริงและนำไปผลิตเป็นโปรดักต์ได้ ส่วน Windows และ Linux ยังต้องเสริมบางส่วน
และมีแผนจะรองรับมือถือด้วย
เพราะข้อเสียของ system webview ที่เจอใน Tauri
บน Mac ผมจึงไม่ได้คิดจะใช้ system webview
ทั้ง API และวิธีใช้งาน ผมพยายามทำให้เหมือน API ของ Electron ให้มากที่สุด
และมีเอกสารกับสเปกที่ทำให้ AI พัฒนาได้ง่าย อันที่จริงแค่แปะลิงก์เอกสารไว้ AI ก็ตรวจสอบได้ถึงระดับ E2E เองเลย ดังนั้นจึงอาจมองได้ว่าเป็นเฟรมเวิร์กที่มี productivity ด้าน AI สูงกว่าคู่แข่งอื่นอย่างท่วมท้น(?)
จริง ๆ ก็แค่รำคาญ Electron กับ Tauri เลยทำขึ้นมา
ทุกวันนี้เวลาทำเครื่องมือ DX หรือเดสก์ท็อปแอป ส่วนตัวผมก็ใช้ suji พัฒนาอยู่
ผมอาจวัดผิดก็ได้ แต่ดูเหมือนว่าโครงสร้างนี้จะทำให้การสื่อสารข้ามภาษาผ่าน FFI ได้เร็วกว่าการเรียกผ่าน FFI แบบทั่วไป เลยยิ่งพอใจ
สำหรับการทำแอปง่าย ๆ และการทำอะไรบางอย่างออกมาได้เร็วโดยไม่ติดข้อจำกัดเรื่องภาษา ผมรู้สึกว่ามันเร็วกว่า Electron หรือ Tauri เลยค่อนข้างพอใจเป็นการส่วนตัว
แต่ก็อยากรู้เหมือนกันว่านี่เป็นเพราะผมสร้างมันเองเลยพอใจไปคนเดียวหรือเปล่า และก็อยากฟังว่าคนอื่นคิดอย่างไรกับไอเดียและแนวทางแบบนี้ เลยเอามาโพสต์ครับ!
ยังไม่มีความคิดเห็น