สิ่งที่ผู้คนเข้าใจผิดเกี่ยวกับ Electron
(felixrieseberg.com)- ผู้เขียน Felix Rieseberg เป็น co-maintainer ที่มีส่วนร่วมกับการพัฒนา Electron มานานกว่า 10 ปี
- Electron ช่วยให้สร้าง UI ด้วยเทคโนโลยีเว็บ และหากจำเป็นก็สามารถผสมโค้ดเนทีฟเข้าไปใช้งานได้อย่างอิสระ
- แอปจำนวนมาก เช่น Visual Studio Code, Slack, Discord, Figma, ChatGPT, Claude, Notion, 1Password, Docker Desktop เป็นต้น เลือกใช้ Electron
- เอกสารนี้จะชี้ให้เห็นความเข้าใจผิดหลัก ๆ เกี่ยวกับ Electron และอธิบายว่าทำไมจึงตัดสินใจเลือกแนวทางนี้
Electron ทำให้ JavaScript กับโค้ดเนทีฟเป็นฝ่ายตรงข้ามกัน
- มักมีคนพูดว่า "Electron ใช้แต่ JavaScript จึงด้อยกว่าเนทีฟ"
- แต่ในความเป็นจริง Electron สามารถใช้โค้ดเนทีฟอย่าง C++, Objective-C, Rust ร่วมกับ JavaScript ได้
- ตัวอย่างเช่น 1Password เขียนโค้ดส่วนใหญ่ด้วย Rust และใช้ Electron สำหรับ UI
- จุดแข็งของ Electron คือความยืดหยุ่นในการผสมโค้ดเนทีฟเท่าที่จำเป็น พร้อมใช้เทคโนโลยีเว็บในส่วนของ UI
- ยังมีตัวอย่างเดโมที่ใช้ SwiftUI, GTK, Win32 เพื่อให้ UI แบบเนทีฟบางส่วนได้ด้วย
Web app ไม่ได้แย่
- แม้จะมีความเห็นว่า "แอปเนทีฟทุกตัวดีกว่าเสมอ" แต่สภาพตลาดจริงไม่ได้เรียบง่ายขนาดนั้น
- ทั้ง NASA Mission Control, Bloomberg Terminal, คีออสก์ของ McDonald’s และ Dragon 2 ของ SpaceX ก็ใช้เทคโนโลยีเว็บบนพื้นฐาน Chromium เช่นกัน
- เทคโนโลยีเว็บเป็นสิ่งที่ถูกใช้อย่างแพร่หลายที่สุดทั่วโลก และ Web app ที่ทำออกมาดีสามารถมอบประสบการณ์ผู้ใช้ที่ยอดเยี่ยมได้
- คำกล่าวที่ว่า "Web app เป็นของคนที่ฝีมือไม่พอ" เป็นการเหมารวมที่ไม่คำนึงถึงข้อกำหนดของสภาพแวดล้อมการใช้งานและบริบทในการตัดสินใจของนักพัฒนา
WebView ของระบบปฏิบัติการมีประสิทธิภาพดีกว่า
- มีคนจำนวนไม่น้อยที่มองว่า WebView ที่มากับ macOS, Windows หรือ Linux ดีกว่า
- ในความเป็นจริง Slack เคยใช้ MacGap รุ่นแรกที่อิงกับ WebView แต่สุดท้ายก็หันมาใช้ Electron (Chromium) เพราะปัญหาด้านประสิทธิภาพ
- เอนจิน Chromium รุ่นใหม่แม้จะใช้ทรัพยากรมากกว่า แต่ก็เป็นส่วนที่ได้รับการปรับแต่งอย่างต่อเนื่องมากที่สุด
- WebView ที่ฝังมากับระบบปฏิบัติการอาจดูใช้หน่วยความจำน้อยกว่าเพราะแชร์ทรัพยากรร่วมกัน แต่ในทางปฏิบัติมักถูกแยกออกจากกันจริงด้วยเหตุผลด้านความปลอดภัยและเสถียรภาพ
- การใช้ Electron ทำให้สามารถจัดการเวอร์ชันของเอนจินล่าสุดได้โดยตรง และคงไว้ซึ่งเสถียรภาพกับความปลอดภัยได้อย่างอิสระ
ขนาด bundle สำคัญ
- โดยทั่วไปแอป Electron มีขนาดราว 100~300MB และจุดนี้มักถูกวิจารณ์
- แต่ผู้ใช้มักให้ความสำคัญกับปัจจัยอื่น เช่น ฟีเจอร์ ความสะดวก และความเสถียร มากกว่าขนาดของแอป
- ตัวอย่างเช่น การสตรีม Netflix ระดับ 4K ใช้ข้อมูลหลาย GB ต่อชั่วโมง และอัปเดตของ Call of Duty ก็อาจมีขนาดหลายร้อย GB
- ท้ายที่สุด เมื่อเทียบกับความพึงพอใจจริงของผู้ใช้ ขนาดของแอปจึงมักเป็นปัจจัยที่สำคัญน้อยกว่าเมื่อเปรียบเทียบกัน
เอาชนะ Electron
- Electron เริ่มต้นจากความพยายามแบบโอเพนซอร์สของผู้คนที่มีเป้าหมายว่า "มาสร้างเดสก์ท็อปแอปที่ดีให้ได้"
- Electron เริ่มต้นในช่วงที่แทบไม่มีคู่แข่ง และจนถึงตอนนี้ก็ยังมอบฟังก์ชันกับเสถียรภาพได้เพียงพอ
- หากจะ "เอาชนะ" Electron ก็ต้องสร้างแพลตฟอร์มที่ทำสิ่งที่ Electron ทำอยู่ได้ดีกว่า
- ผู้ดูแล Electron ยินดีต้อนรับเสมอหากมีทางเลือกที่ดีกว่าเกิดขึ้น
15 ความคิดเห็น
การนำไปเปรียบเทียบกับ Call of Duty ดูเหมือนจะออกนอกประเด็นไปหน่อย
น่าจะต้องลองดู Teams ที่เลิกใช้ Electron แล้วเปลี่ยนไปใช้ WebView แทน,
https://techcommunity.microsoft.com/discussions/microsoftteams/…
หวังว่า Tauri จะเติบโตเต็มที่เร็ว ๆ นะครับ แม้ว่าตอนนี้ผมก็ใช้งานมันได้ดีอยู่แล้วก็ตาม
ตอนที่ยังชื่อ Atom Shell เหมือนเพิ่งเกิดขึ้นเมื่อวานเอง.. พัฒนาไปไกลมากเลยนะ
แม้จะมีหลายประเด็นที่ถูกวิจารณ์ แต่เมื่อดูจากความสมบูรณ์ของแอป VS Code ที่ใช้งานกันทุกวัน ก็ทำให้รู้สึกได้อย่างชัดเจนว่า Electron มีส่วนสำคัญไม่น้อย
แอป Electron ที่ติดตั้งอยู่ในพีซีมีเกือบ 10 ตัวแล้ว แบบนี้ก็น่าคิดว่าน่าจะกลายเป็นเฟรมเวิร์กที่ต้องติดตั้งแยกต่างหากได้แล้วนะ
ทั้งขนาดบันเดิลด้วย แล้วพอเห็นโปรเซส
~~ Helperกำลังกินหน่วยความจำอยู่ก็ได้แต่ถอนหายใจครับผมก็คิดว่า
tauriเป็นทางเลือกหนึ่งเหมือนกัน แต่ก็กังวลว่าเวลาปล่อยใช้งานจริงอาจมีกรณีพิเศษที่ทำงานไม่ปกติหรือเปล่า (เพราะเมื่อก่อนเคยลำบากมากกับการปล่อยโปรแกรมบนสภาพแวดล้อม win32 ที่อ้างอิง DLL ซึ่งมีการลงทะเบียนไว้เป็นค่าพื้นฐานอย่างmsxml.dllสุดท้ายเลยต้องรวมไปกับตัวโปรแกรมเพื่อปล่อยด้วย... เลยกลัวว่าจะเกิดปัญหาคล้ายกันอีกไหม)เห็นด้วยกับฝั่ง
electronว่าจริง ๆ แล้วควรลืมเรื่องขนาดไปได้เลย แต่ขนาด bundle มันใหญ่เกินไปครับดูเหมือนว่า tauri จะมีปัญหาตรงนั้นครับ..
เนื่องจาก WebView และโปรแกรมที่ฝังมาในแต่ละแพลตฟอร์มแตกต่างกัน นั่นจึงเป็นปัญหาใหญ่ที่สุดครับ เพราะหลังจากปล่อยใช้งานไปแล้วก็ไม่รู้ว่าจะเกิดอะไรขึ้นบ้าง
แต่ถ้าจะให้ tauri ฝังตัว WebView มาเอง ขนาดบันเดิลก็จะใหญ่กว่า Electron อีกครับ..
ดังนั้นในการพัฒนาแอปโปรดักชันแบบข้ามแพลตฟอร์ม ผมจึงคิดว่า tauri ยังไม่สุกงอมพอครับ.
คีออสก์ของ McDonald’s นั้น...อืม....อาจจะเป็นตัวอย่างที่ดีก็ได้
ผมก็แวบคิดแบบเดียวกันขึ้นมาเหมือนกันครับ คีออสก์ของแมคโดนัลด์ในต่างประเทศก็ต่างออกไปบ้างไหมนะ? อยู่ ๆ ก็สงสัยขึ้นมาชั่วขณะเลยครับ ฮ่าๆ
555555 ผมก็คิดเหมือนกันเลย
น่าเสียดายที่แม้การลดการใช้หน่วยความจำจะดูเหมือนเป็นความท้าทายที่ใหญ่ที่สุด แต่ก็ไม่เห็นว่าผู้มีส่วนได้ส่วนเสียฝ่ายไหนมีแรงจูงใจมากพอจะลงมือทำเรื่องนั้น
ในบทความมีลิงก์ไปที่ โค้ดเดโมจริง เลยลองเข้าไปดูแล้ว รู้สึกว่าไม่ได้ง่ายถึงระดับที่เรียกมาใช้ร่วมกันได้แบบตรงไปตรงมาเท่าไรนัก ตอนนี้คงต้องมองว่าจุดสำคัญคืออย่างน้อยมันก็ทำได้ประมาณนั้น...
ดูเหมือนว่าโดยรวมแล้ว เป็นความจริงที่แอปมีขนาดใหญ่..
ใช่ครับ เรื่องขนาดบันเดิลนี่ก็ยอมรับกันตรงๆ เลย