- นักพัฒนาได้เขียน Desktop Docs ซึ่งเดิมเป็นแอป Electron สำหรับ Mac ใหม่ด้วย Rust และสรุปว่านี่คือ การตัดสินใจที่ถูกต้อง
- แอปเวอร์ชันแรกที่สร้างด้วย Electron มีขนาดใหญ่ถึง 1GB และมีปัญหา ล่มบ่อย จากเรื่องประสิทธิภาพ
- โดยเฉพาะปัญหา ประสิทธิภาพตกเมื่อประมวลผลภาพ/วิดีโอขนาดใหญ่
- หลังรีบิลด์ด้วย Rust + Tauri ขนาดแอปลดลง 83% ความเร็วในการทำดัชนีดีขึ้น มากกว่า 3 เท่า และเสถียรภาพก็ดีขึ้น
- ขนาดแอป: 1GB → 172MB (ลดลง 83%)
- ไฟล์ติดตั้ง: 232MB → 69.5MB (ลดลง 70%)
- การทำดัชนีวิดีโอ: วิดีโอความยาว 38 นาที 10~14 นาที → 3 นาที
- ทำงานเสถียรกว่าแอป Electron ที่เคยไม่เสถียรอย่างมาก
- กระบวนการรีบิลด์และการเลือกเทคโนโลยี
- แอป Electron ใช้หน่วยความจำมากกว่า 200MB ไปกับ Chromium เอง แม้ทำงานอยู่เบื้องหลัง และถึงขั้น วิดีโอคอลก็ทำให้แครชได้
- ในแอปใหม่ยังคงใช้ CLIP embedding และ Redis vector store เหมือนเดิม
- แต่ได้เขียน pipeline ทั้งหมดสำหรับการประมวลผลภาพ/วิดีโอและ file I/O ใหม่ด้วย Rust
- ส่วน UI ก็ไม่ได้พอร์ตโค้ดเดิมมา แต่ เขียนใหม่ตั้งแต่ต้น จนได้อินเทอร์เฟซที่ สะอาดตาและเรียบง่าย มากขึ้น
- ความยากทางเทคนิค
- Rust มีเส้นโค้งการเรียนรู้สูง และชุมชนของ Tauri ยัง ไม่成熟เท่า Electron
- ระหว่างการ bundle Redis เข้าไปกับแอป มีปัญหาเรื่อง การจัดการสิทธิ์และการแจกจ่าย
- ถึงอย่างนั้น เมื่อเทียบกับ Electron ก็ได้ การควบคุมและประสิทธิภาพโดยรวมที่ดีขึ้น
- บทสรุป
- แม้ยังไม่เทียบเท่าฟีเจอร์ทั้งหมดแบบสมบูรณ์ แต่ ฟีเจอร์หลักทำงานได้เร็วและเสถียรกว่ามาก
- “โค้ดที่ใช้งานได้ แต่ถูกสร้างมาผิดทาง ควรถูกทิ้งอย่างเด็ดขาด”
7 ความคิดเห็น
Electron ฝัง Chromium มาในตัว ส่วน Tauri ใช้เอนจินที่ติดตั้งอยู่บนระบบปฏิบัติการ จึงมีความแตกต่างกัน
Tauri (OS WebView) ได้เปรียบเมื่อจำเป็นต้องมีแพ็กเกจที่เบาและประสิทธิภาพที่รวดเร็ว แต่
สำหรับบริการที่ความปลอดภัย ความน่าเชื่อถือ และการควบคุมฟีเจอร์เป็นเรื่องสำคัญ แนวทางของ Electron (ฝัง Chromium) เหมาะสมกว่า
ผมอาจจะไม่แน่ใจเรื่องปัญหาในโค้ดนัก แต่คิดว่าลักษณะเฉพาะของแพลตฟอร์มมีผลสะท้อนอยู่มาก
ถ้าเป็น Flutter,
rinfก็ดีมากเหมือนกันครับเคยใช้ Electron แล้ว แต่ยังไม่เคยลองใช้ Tauri เลย ไว้ต้องลองใช้ดูสักครั้งนะครับ
ความคิดเห็นจาก Hacker News
ผมกำลังทำเดสก์ท็อปแอปด้วย Rust และ egui แต่เพราะทั้ง Rust และงานพัฒนาเดสก์ท็อปก็เป็นเรื่องใหม่สำหรับผม เลยรู้สึกว่ายากที่ต้องเรียนรู้หลายแนวคิดพร้อมกันในคราวเดียว งานของผมคือเครื่องมือวิเคราะห์ด้านวิศวกรรมเครื่องกล ดังนั้นฝั่งแบ็กเอนด์ต้องการประสิทธิภาพสูง และฝั่งฟรอนต์เอนด์ต้องการการแสดงผลข้อมูล อยากรู้ว่าตอนใช้ Tauri การต้องดูแลหลายสแตกพร้อมกันอย่าง rust, js, html นั้นลำบากไหม
ผมเพิ่งมีประสบการณ์ย้ายโปรเจ็กต์จาก Tauri ไป Electron มา ไอ้ความต่างของการเรนเดอร์ใน webview ที่แต่ละแพลตฟอร์มใช้ทำให้ปวดหัวมาก อยากรู้ว่าเคยเจอบั๊ก UI แบบข้ามแพลตฟอร์มไหม ความต้องการด้าน UI ของผมเรียบง่ายแต่การคำนวณซับซ้อน ดังนั้นถึงจะมีต้นทุน QA ผมก็คิดว่ามันยังคุ้มค่า แค่อยากรู้ว่าประสบการณ์ของผมเป็นกรณีพิเศษหรือว่าความต่างของการเรนเดอร์เป็นปัญหาที่เจอกันบ่อยจริง ๆ แล้วก็อยากรู้ว่าใช้ Tauri 1.0 หรือ 2.0 เพราะ 2.0 ออกตัวจริงตอนที่ผมกำลังย้ายจาก v1 พอดี การย้ายเวอร์ชันนั้นฝันร้ายมาก และเอกสารก็น้อยมาก อยากรู้ว่าตอนนี้การทำเอกสารดีขึ้นหรือยัง
ผมก็เคยเดินเส้นทางคล้าย ๆ กัน เคยทำ webcam viewer แบบง่ายที่ปรับให้เหมาะกับ USB microscope เพราะหาแอปที่ดีพอไม่ได้เลยต้องทำเอง ผมยัดฟังก์ชันแทบทั้งหมดไว้ใน renderer พอเตรียมส่งขึ้น App Store ก็เริ่มคิดว่า webcam viewer ขนาด 500mb มันใช่เหรอ เลยพอร์ตไป Tauri V2 และลดขนาดลงมาเหลือเกือบ 15mb
ผมชอบแนวคิดของแอปนี้มาก แอปอื่นในหมวดนี้มักอืดและใช้งานไม่สะดวก เลยสนใจการรีไรต์นี้มาก แต่ผมเป็นช่างภาพและสื่อจำนวนมากของผมเป็นฟอร์แมต RAW ซึ่งผมยังไม่แน่ใจว่ารองรับหรือไม่ (หรือถ้าเห็นคำว่า “ทุกฟอร์แมตรูปภาพและวิดีโอหลัก” ที่ไม่ได้พูดถึง RAW ก็คงอาจจะไม่รองรับ) อยากรู้ว่ามีเอกสารทางการ ฟอรัมผู้ใช้ หรือช่องทางอื่นที่เช็กเรื่องรายละเอียดแบบนี้ได้ไหม
ผมไม่ได้ใช้ Mac และทีมของเราก็ไม่ได้คิดจะรีไรต์เป็น Rust แต่ผมดีใจมากที่ได้อ่านโพสต์นี้ นี่แหละคือระดับความยาวของบทความใน “Show HN” ที่ผมอยากเห็น: สรุป trade-off ทางเทคนิคที่จำเป็นต่อการแก้ปัญหาในโลกจริงได้พอดี ขอบคุณมาก
คงดีมากถ้ามีข้อมูล benchmark ล่าสุดที่เปรียบเทียบ Tauri, Flutter, Electron, React Native และเฟรมเวิร์กข้ามแพลตฟอร์มสมัยใหม่อื่น ๆ โดยดูจากตัวชี้วัดหลักอย่างขนาด bundle, การใช้หน่วยความจำ (RAM), เวลาเริ่มต้น, การใช้ CPU ภายใต้โหลด และพื้นที่ดิสก์ โดยเฉพาะเฟรมเวิร์กอย่าง Tauri ที่การเรนเดอร์และประสิทธิภาพเปลี่ยนไปตามเวอร์ชันของ webview ก็น่าจะมี compatibility matrix แยกตามแพลตฟอร์ม (เช่น WebView2, WKWebView ฯลฯ) แนบมาด้วย ถ้าสรุปความต่างเหล่านี้เป็นตารางให้เห็นภาพได้ก็น่าจะช่วยให้นักพัฒนาเลือกได้ดีขึ้นมาก
ที่บริษัทเก่าของผม เราเคยดูแลเดสก์ท็อปแอป Electron สำหรับ Windows และ Mac แอปหนักมาก และการอัปเดตด้วย Squirrel ก็ทรมานสุด ๆ
สุดท้ายเราเก็บ GUI ไว้เป็นเว็บ SPA (ใช้ Inferno) แล้วแทนส่วนอย่างการโหลด webview ด้วย native app ตัวเล็ก ๆ ของแต่ละแพลตฟอร์ม (C# และ Swift) ผลคือขนาดดาวน์โหลดและการใช้หน่วยความจำลดลงราว 90% และเปลี่ยนไปใช้การแจกจ่าย/อัปเดตผ่าน app store ของแต่ละแพลตฟอร์ม ผมคิดว่านั่นเป็นการตัดสินใจที่ดีที่สุด
ผมกังวลเรื่องเวลารออนุมัติอัปเดตและความไม่แน่นอน อยากรู้ว่าย้ายจาก Squirrel ไป native แล้วดีขึ้นตรงไหนบ้าง
ถ้าแอปสุดท้ายเป็น Mac แล้ว ทำไมถึงเลือก Rust/Tauri แทน Swift/SwiftUI น่าสนใจมากจริง ๆ
อยากรู้ว่าอะไรทำให้เลือก Tauri แทน egui เป็นเพราะประสบการณ์กับ Electron หรือเปล่า ผมเองก็กำลังจะพอร์ตแอป Python Qt ไป Rust แต่ยังกังวลว่าไลบรารี GUI ของ Rust ยังไม่ครบเท่า Qt แล้วสุดท้ายจะไปต่อไม่ได้
ดูจากปุ่ม "Try" บนหน้าแลนดิ้งเพจ ผู้ใช้คงรู้สึกเหมือนจะมีรุ่นทดลอง แต่ความจริงกลับพาไปสู่การซื้อทันที ถ้ามีทดลองสั้น ๆ สัก 1 สัปดาห์ก็น่าจะดี
ผมชอบนโยบาย perpetual fallback license นะ ราคา $99 เป็นกำแพงเริ่มต้นที่ค่อนข้างสูง แต่ถ้าเจาะกลุ่มครีเอเตอร์/สตูดิโอก็สมเหตุสมผล ส่วนถ้าเป็นผู้บริโภคทั่วไป ผมคิดว่าราว $20-$25 น่าจะเหมาะ
ในบทความคุณเน้นเรื่องประสิทธิภาพ แต่บนหน้าแลนดิ้งเพจกลับไม่ได้พูดถึงเลย ข้อมูลอย่าง benchmark ต่าง ๆ งานแบบขนาน หรือข้อกำหนด vram แบบในวิดีโอ 38 นาที ก็สำคัญเหมือนกัน ผมอยากรู้ว่าเวลาใช้กับสื่อระดับหลายร้อยถึงหลายพันชั่วโมงแล้วมันเป็นยังไงจริง ๆ
ที่งานหนึ่งใช้เวลา 10~14 นาทีบน Electron แล้วเหลือ 3 นาทีบน Tauri นี่น่าทึ่งมาก ทั้งที่ Electron ก็แค่ orchestrate CLIP กับ ffmpeg เอง ผมเลยสงสัยว่า overhead ขนาดนั้นมาจากไหน
เมื่อก่อนผมก็เคยทำเครื่องมือค้นหาสื่อด้วยการถอดเสียงวิดีโอบน Electron และไม่ได้มีปัญหาด้านประสิทธิภาพมากนัก
ปกติแล้วคนเลือก Electron หรือ Tauri เพราะต้องการ cross-platform แต่ทำไมถึงเป็น Mac only ตั้งแต่แรกก็สงสัยอยู่เหมือนกัน (โดยเฉพาะถ้าเป็นงานประมวลผลสื่อขนาดใหญ่ที่อาจใช้ nvidia ได้ด้วย)
ผมเองก็เพิ่งกลับมาใช้ Swift อีกครั้งในรอบ 10 ปี และลังเลระหว่าง Tauri กับ Swift ก่อนจะเลือก Swift สำหรับโปรเจ็กต์ใหม่ แล้วพบว่ามันพัฒนาไปมากเมื่อเทียบกับช่วงปี 2014 จนใช้งานได้สบายมาก
ถ้าส่วนเรื่อง active user เป็นจริง ก็ดูเหมือนคุณประสบความสำเร็จมาพอสมควรแล้ว อยากรู้ว่าก่อนหน้านี้คุณมีเครือข่ายหรือผู้ชมอยู่แล้วในวงการสตูดิโอ/ครีเอเตอร์หรือไม่ เรื่องการตลาดก็อยากฟังเหมือนกัน
คุณบอกว่าเคยทำเครื่องมือคล้ายกันเอง เลยอยากรู้ว่าทำไมถึงไม่ได้ปล่อยมันออกมา
ส่วนเวอร์ชัน Windows และ Linux ถ้ามีความต้องการ เรามีแผนจะออกภายในไม่กี่เดือนข้างหน้า
ผู้ใช้ได้มาจาก HN, การเปิดตัวบน reddit และการโปรโมตเล็กน้อยบน linkedin เป็นหลัก ที่เหลือส่วนมากคือการบอกต่อ
เรื่อง Electron กับประสิทธิภาพงานประมวลผลวิดีโอ ถ้าจะลงลึกจริง ๆ ยังมีอีกเยอะ ผมเองก็ไม่ใช่ผู้เชี่ยวชาญ Electron เลยคิดว่าอาจเป็นเพราะเราใช้ worker ได้ไม่ดีพอจนเกิดคอขวด
ตอนย้ายมา Rust เราเพิ่ม scene detection เพื่อลดจำนวนเฟรมที่ต้องนำไปทำดัชนีด้วย จึงลดภาระการประมวลผลลงได้มาก และยังเพิ่มตัวเลือก GPU acceleration ของ ffmpeg ด้วย ทำให้ประสิทธิภาพดีขึ้นพอสมควร การสร้าง image embedding ก็ปรับให้เหมาะด้วยการประมวลผลแบบ batch แต่ถ้าฝืนมากเกินไป model instance ก็อาจแครชได้
ในตารางเปรียบเทียบประสิทธิภาพที่ลิงก์ไว้ใน HN ดูเหมือนว่า Electron จะดีกว่า Tauri ในกรณีส่วนใหญ่นะ....
ผมรู้สึกไม่น้อยว่าข้อความเปรียบเทียบประสิทธิภาพในคอมเมนต์นั้นเป็นการหยิบเฉพาะค่าจากรีโพซิทอรีที่ดูเป็นประโยชน์ต่อ Electron มาใช้ ค่าตัวเลขอาจต่างกันเล็กน้อย แต่ส่วนที่ใกล้เคียงที่สุดน่าจะเป็นการเปรียบเทียบ 'ความต่างของหน่วยความจำว่างก่อนรันกับหลังรัน' อย่างไรก็ตาม ในหัวข้อถัดขึ้นไปทันทีที่วัดผลรวมการใช้หน่วยความจำของเมนโปรเซสและโปรเซสลูกระหว่างที่แอปกำลังทำงาน Electron ถูกบันทึกไว้ที่ 258M ดังนั้นจึงค่อนข้างยากที่จะยอมรับตัวเลขที่บอกว่าการเปลี่ยนแปลงการใช้หน่วยความจำก่อนและหลังรันมีเพียง 91MB นอกจากนี้ ในคอมเมนต์ตอบใน HN ก็มีการพูดถึงด้วยว่าแอปที่สร้างด้วย Tauri ใช้เวลาเริ่มทำงานเกิน 7 วินาที ซึ่งก็ทำให้ยากที่จะเชื่อถือค่าการวัดในรีโพซิทอรีนั้นเช่นกันครับ
อืม ดูเหมือนว่าปัญหาส่วนใหญ่จะเกิดจากประเด็นของเอนจิน WebView + OS/ไดรเวอร์ มากกว่าความแตกต่างระหว่าง Electron หรือ Tauri นะครับ