ไปให้สุดแบบเนทีฟ จนกว่าจะถึงวันที่ต้องใช้ข้อความ
(justsitandgrin.im)- หากสร้าง UI แชต Markdown บน macOS ด้วย SwiftUI เพียงอย่างเดียว แม้ประสิทธิภาพพื้นฐานจะพอใช้ได้ แต่รองรับการเลือกทั้งเอกสารได้ยาก
- เมื่อย้ายไปใช้
NSTextViewและ TextKit 2 จะต้องสูญเสียงานทดสอบและงานปรับประสิทธิภาพที่ทำไว้ใน SwiftUI และเกิด CPU spike ระหว่างการรับข้อมูลแบบสตรีม - การเขียนใหม่ด้วย
NSCollectionViewทำให้เซลล์กะพริบ และแม้ใช้ TextKit 2 แบบล้วน ๆ ประสิทธิภาพจะใช้ได้ แต่การเชื่อมกับ สตรีมมิง ยังไม่ดี - WebKit เข้ากันได้ค่อนข้างดีกับการเรนเดอร์ Markdown, ประสิทธิภาพ, ไทโปกราฟี และระดับการควบคุม ขณะที่ Electron ก็ทำงานด้านข้อความได้ดีเป็นพื้นฐาน
- สำหรับแชตยาวและ rich text นั้น SwiftUI และ Apple native SDK กลายเป็นข้อจำกัด และแนวทางแบบเว็บได้เปรียบกว่าในด้าน โมเดลข้อความ·การเรนเดอร์
ข้อจำกัดของ UI แชต Markdown แบบเนทีฟบน macOS
- หากสร้างแชตเรียบง่ายที่รองรับ Markdown ด้วย SwiftUI เพียงอย่างเดียว แม้ประสิทธิภาพพื้นฐานจะพอเป็นไปได้ แต่ไม่สามารถเลือกทั้งเอกสาร Markdown ที่ประกอบจาก SwiftUI primitives ได้
- หากย้ายไปใช้
NSTextViewจะได้การรองรับ TextKit 2 แต่จะสูญเสียงานทดสอบและงานปรับประสิทธิภาพส่วนใหญ่ที่ทำไว้ใน SwiftUI และยังทำงานร่วมกับ SwiftUI ได้ไม่ค่อยดี - เมื่อส่งคำตอบของโมเดลเข้า
NSTextViewแบบสตรีม จะเกิด CPU spike - แม้จะเขียนใหม่ด้วย
NSCollectionViewเซลล์ก็ยังคงกะพริบอย่างต่อเนื่อง และยังเป็นพฤติกรรมที่หลีกเลี่ยงได้ยากจากข้อจำกัดด้านการออกแบบ - ต้นแบบที่ใช้ TextKit 2 แบบล้วน ๆ มีประสิทธิภาพพอใช้ได้ แต่การสตรีมยังคงแย่ และยังไม่เข้ากับองค์ประกอบสมัยใหม่ได้ดี
- ต่อให้ถอด SwiftUI ออกทั้งหมดแล้วใช้ AppKit อย่างเดียว ก็ยังต้องจัดการชิ้นส่วนข้อความที่ขยายตัวเองแบบแมนนวล และกว่าจะเลือกข้อความได้ หลายส่วนก็อยู่ในสภาพที่พังไปแล้ว
- หากต้องการให้ใกล้เคียงพฤติกรรมพื้นฐานของ macOS ก็ต้องกลับมาปรับฟีเจอร์ที่ผู้ใช้คาดหวังว่า "ควรมีอยู่แล้ว" ใหม่อีกครั้ง เช่น เมนูบริบท, การเปิดพจนานุกรม, การเลือก, การช่วยการเข้าถึง, และการโต้ตอบกับข้อความ
จุดที่ WebKit และ Electron เหมาะกว่า
- หากใช้ WebKit เรนเดอร์ Markdown แม้มีจุดที่ต้องระวังอยู่บ้าง แต่โดยรวมทำงานได้ดี มีทั้งประสิทธิภาพและไทโปกราฟีที่ดี รวมถึงให้ระดับการควบคุมที่เพียงพอ
- หากสร้างโปรเจ็กต์ Electron แบบง่าย ๆ งานด้านข้อความ, การเรนเดอร์ Markdown, และไทโปกราฟีที่ดีจะใช้งานได้ทันที และยังได้ประสิทธิภาพที่หาได้ยากกว่าจากการทำด้วย TextKit 2 แบบล้วน ๆ
- ใน Electron ก็ยังมีการผสานกับ macOS และสามารถเรนเดอร์ Git diff ที่สวยงามได้ด้วยโค้ดเพียงไม่กี่บรรทัด โดยมีตัวอย่างอย่าง diffs.com
- แม้จะพิจารณาทั้ง SwiftUI, AppKit, TextKit และ WebKit ก็ยังยากที่จะตอบโจทย์ง่าย ๆ อย่าง “แชตที่รองรับ Markdown และเลือกข้อความทั้งข้อความของแต่ละข้อความได้” ให้สมบูรณ์
- จึงยิ่งเห็นชัดขึ้นว่าเหตุใดแอปใหม่ ๆ ที่ให้ความสำคัญกับแชต, rich text แบบยาว, และไทโปกราฟีที่ยืดหยุ่น จึงหันไปใช้แนวทางแบบเว็บ
- SwiftUI เหมาะกับหน้าจอเรียบง่ายที่ไม่ต้องมีการเลื่อนมากนัก และ Swift ก็ยังมีประโยชน์ในส่วนที่ต้องการประสิทธิภาพสูง
- Electron หรือ React Native สามารถได้ประสิทธิภาพในระดับสูงผ่านการทำงานร่วมกับเนทีฟ พร้อมคง โมเดลข้อความ·การเรนเดอร์ ที่ดีกว่าไว้ได้
- สำหรับการเรนเดอร์ rich text เพื่อแชตรูปแบบยาวนั้น SwiftUI และ Apple native SDK ไม่ได้เป็นข้อดีอีกต่อไป แต่กลับกลายเป็นข้อจำกัด
- การสนทนาที่เกี่ยวข้อง: Hacker News, Lobsters
2 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เพิ่งปล่อยตัวแก้ไขข้อความสำหรับ iOS ที่ใช้ TextKit 2 และประสิทธิภาพยังดีแม้กับไฟล์ 5,000 บรรทัด
ทดสอบด้วย Moby Dick ของ Project Gutenberg สร้างขึ้นระหว่างเดือนสิงหาคม 2025 ถึงเมษายน 2026 และยังพัฒนาต่ออยู่
ทุกครั้งที่พิมพ์จะจัดสไตล์ใหม่ได้ภายใน 8ms และแม้พิมพ์เร็ว 20 ครั้งติดกันโดยไม่มี debouncing หรือ delayed rendering ก็ยังประมวลผลได้ใน 150ms พร้อมรวมการจัดสไตล์ใหม่ทั้งชุดหลังแต่ละครั้ง
การค้นหาแบบ tag และ boolean เสร็จภายใน 20ms และถ้าเรนเดอร์เฉพาะช่วงที่มองเห็นจะเร็วกว่าการจัดสไตล์ทั้งเอกสาร 25 เท่า พร้อมรองรับการรีเฟรชหน้าจอ 120Hz
ขนาดไฟล์แอปในเวอร์ชัน 1.0 คือ 722KB และใน 1.1 ที่มีฟีเจอร์เพิ่มขึ้นก็น่าจะอยู่ราว 950KB
ถ้าทำได้ระดับนี้บน iOS บน macOS ก็น่าจะง่ายกว่าราว 10 เท่า
https://www.gingerbeardman.com/apps/papertrail/
ไม่ได้บอกว่า “เป็นไปไม่ได้” แต่หมายถึงเข้าใจว่าทำไมคนถึงเลือก เว็บเทคโนโลยี แทน native สำหรับเรื่องแบบนี้ คนอยากสร้างสินค้า ไม่ได้อยากสู้กับข้อจำกัดของระบบ
ถ้าเป็น text viewer อย่างน้อยก็ควรจัดการไฟล์ที่ใหญ่กว่านั้นอีกเป็นหลักสิบเท่า ไฟล์ JSON หลายแสนบรรทัดเป็นเรื่องปกติ และไฟล์ CSV กับ log ก็ยาวกว่านั้นอีก
ปกติแล้วเหตุผลที่ใช้ native API แทน webview คือเรื่องประสิทธิภาพ แต่ตอนนี้ดูเหมือนจะไม่แน่เสมอไปแล้ว
browser rendering engine สุกงอมมากแล้ว มี GPU acceleration เยอะ และโดน stress test จากเว็บแอปอ้วน ๆ มานานกว่าสิบปี
ในทางกลับกัน SwiftUI ไม่ได้รู้สึกว่าเร็วอะไรเป็นพิเศษ แม้แต่ System Settings เวอร์ชันล่าสุดที่ Apple ทำใหม่ก็ลดความซับซ้อนของ UI ให้เหลือแนวแถว checkbox เป็นหลัก แต่ตอนสลับ section ยังหน่วงกว่าการโหลดเว็บเพจจาก us-east-1 เสียอีก
เคยทำ native apps ด้วย Qt C++ และ QML และพิสูจน์ได้ว่ามันเร็วกว่าเว็บแอปที่ใกล้เคียงกันมาก แถมใช้ RAM น้อยกว่ามาก
ดังนั้นโดยทั่วไปเว็บแอปจะช้ากว่าและกินทรัพยากรมากกว่า native app ที่ออกแบบมาดี
[1] https://notes.alinpanaitiu.com/SwiftUI%20is%20convenient,%20...
[2] https://x.com/daniel_nguyenx/status/1734495508746702936
[3] https://rubymamistvalove.com/block-editor#8-performance
เดิมทีเป็นนักพัฒนาเว็บ แต่ช่วง 6–12 เดือนที่ผ่านมาเริ่มทำ native cross-platform apps แล้วพบว่าแม้แต่งานง่าย ๆ ก็มี ช่องว่างด้านประสิทธิภาพ ค่อนข้างชัด
การทิ้ง optimization ที่สะสมมาหลายพันคน-ปี และการพิสูจน์ใช้งานจริงอีกหลายล้านคน-ปี แล้วไปคิดว่าจะสร้าง text rendering engine ใหม่ที่แย่กว่านั้นเอง มันฟังดูแปลก
บน macOS นั้น WebKit เป็น native OS framework การใช้ WebKit สำหรับเรนเดอร์ Markdown ดูเหมาะสมอย่างยิ่ง
แน่นอนว่าการเรนเดอร์ทุกอย่างด้วย WebKit ก็ไร้เหตุผลพอ ๆ กับการเรนเดอร์ทุกอย่างด้วย PDFKit แต่ถ้าเป็น Markdown view แล้ว WebKit เป็นตัวเลือกที่สมเหตุสมผล และก็ไม่ได้หมายความว่าต้องพลิกโต๊ะไปทำเป็น Chromium web app ทั้งหมด
อีกอย่าง OS X ก็เคยเรนเดอร์ UI ด้วย DisplayPDF/Quartz มานาน
หรือเพราะ WebKit มีบนแพลตฟอร์มอื่นด้วย เลยถือว่าโกง? ถ้าอย่างนั้นใช้ Java ก็คงได้เหมือนกัน
ถ้าการเรนเดอร์ข้อความด้วย HTML/CSS/JS renderer “เหมาะสมอย่างยิ่ง” แล้วมีขอบเขตไหนบ้างที่ไม่เหมาะสม? ทำไมไม่เรนเดอร์ทุกอย่างด้วยมันไปเลย?
ตรรกะจาก “เหมาะกับการเรนเดอร์ข้อความ” ไปสู่ “แต่ไม่ใช่กับการเรนเดอร์ทุกอย่าง” ฟังไม่ต่อกัน
เห็นด้วยว่าใน macOS นั้น WebKit เป็น native OS framework และในความหมายนั้นมันก็ “native”
แต่มันก็ยิ่งตอกย้ำประเด็นใหญ่กว่าว่า ถ้าต้องจัดการ rich text, Markdown, selection, typography และ formatted content แบบยาว ๆ ให้ดี เว็บเทคโนโลยีก็กำลังกลายเป็นตัวเลือกเชิงปฏิบัติเพียงตัวเดียวอย่างรวดเร็ว
ไม่ได้บอกว่าการใช้ WebKit สำหรับ Markdown view เป็นเรื่องผิด ตรงกันข้าม มันอาจเป็นตัวเลือกที่สมเหตุสมผลที่สุดด้วยซ้ำ ปัญหาคือทางออกแบบ “native” ตรงนี้กลับเป็นทางออกแบบเว็บเรนเดอร์ริงในทางปฏิบัติ
WKWebViewแต่ละตัวแบก WebKit engine ของตัวเองมาพร้อม overhead ด้านประสิทธิภาพและหน่วยความจำ จึงไม่ใช่ของที่เอาไปโปรยทั่ว ๆ แล้วมองว่าเป็น native macOS component ฟรี ๆ ได้สิ่งที่น่าหงุดหงิดคือใน UI ประเภทนี้ SwiftUI / AppKit / TextKit ไม่ได้ให้เส้นทางที่สะอาด ทันสมัย และ composable ซึ่งดีกว่าแค่ “ใช้ WebKit ไปเถอะ”
การที่แค่ “ทำให้เลือกข้อความทั้งข้อความได้ในแชตที่มี Markdown” ยังทำไม่ได้ ฟังดูไม่น่าเป็นไปได้
ใน SwiftUI มี Markdown renderer ที่สุกงอมให้ใช้ได้อยู่แล้ว ดู https://github.com/gonzalezreal/swift-markdown-ui และตัวแทนรุ่นถัดไป https://github.com/gonzalezreal/textual
เคยใช้เองและไม่มีปัญหาอะไร แม้แต่ฉันที่ไม่ชอบ Swift หรือ SwiftUI และเป็นคนประหลาดที่ชอบ Objective-C มากกว่า ก็ยังทำได้โดยไม่ต้องพึ่ง LLM
การเลื่อนดู Markdown แบบ static ที่เสร็จสมบูรณ์ไม่ผ่าน focus probe ใหม่ โดยได้ p95 18.86ms เกินงบ 16.7ms และสูงสุด 232.49ms
เส้นทางอัปเดต Markdown/โค้ดยาวแบบ realtime ก็ไม่ผ่านเช่นกัน: p95 59.33ms เทียบกับ 16.7ms สูงสุด 75.94ms เป็น stress case อีกแบบที่แยกกันแต่เกี่ยวข้องกัน เพราะต้องจัดการ rich text surface ขนาดใหญ่ระหว่างการอัปเดต
การขยาย history ยาว ๆ ผ่านในเชิงเทคนิค แต่เรียกว่าลื่นไม่ค่อยได้: 120 turns p95 21.35ms, 500 turns 23.11ms, 1000 turns 36.77ms
ไม่ได้แย่ แต่ช้ากว่าแนวทางของฉันเล็กน้อย และช่องว่างด้านประสิทธิภาพก็ดูเกี่ยวกับ SwiftUI มากกว่าตัว implementation ของ Textual เป็นหลัก
เคยใช้ swift-markdown-ui ในแอปมาก่อน แต่ประสิทธิภาพเทียบ wkwebview ไม่ติดเลย ถ้าสตรีมเอกสารใหญ่ที่มีองค์ประกอบหนัก ๆ อย่างตารางใหญ่ code block และ nested quote ถึงขั้นเจอ beachball ได้ แต่ถ้าใช้ wkwebview ไม่เคยเจอแบบนั้น
แล้วก็ทำให้ตระหนักว่า browser และเทคโนโลยีฐานของมันได้นำพารูปแบบใหม่ให้ UI ไปไกลมาก ขณะที่ native UI framework กลับตามไม่ทัน
แม้จะเป็นคนที่ชอบ native apps มากกว่าเว็บแอป ก็ยังรู้สึกแบบนั้น
โชว์โค้ดมา ไม่งั้นก็ออกไปเลย ตอนนี้ก็มี native Mac/iOS apps จำนวนมากที่จัดการ Markdown rendering และข้อความแบบสตรีมมิงได้ดีอยู่แล้ว
เลยสงสัยแค่ว่าจะอ้างอะไรได้อีก
ส่วนใหญ่ลงเอยที่รองรับการเลือกเฉพาะภายในแต่ละบล็อกต่อเนื่อง และใส่ปุ่มคัดลอกสำหรับทั้งข้อความแทน
เรื่องน่าสนใจคือ Apple เองก็เคยทำแบบนี้มาก่อน
macOS / AppKit รุ่นเก่าเคยใช้ WebKit เพื่อเรนเดอร์ rich text ภายใน NSTextField แบบ native ข้อความเป็นปัญหาที่ยาก
แถม native WebView ก็เร็วและเบามาก จึงไม่แปลกที่จะใช้เป็น text layout engine แม้จะใช้ WebView แยกต่อหนึ่งแถวในตารางก็ยังให้ประสิทธิภาพดีมากได้
iMessage บน Mac ก็เคยใช้ WebView และ Adium ก็เช่นกัน ถ้ากำลังเรนเดอร์ ข้อความแบบ rich/markup แล้ว HTML ก็คือเครื่องมือที่เหมาะสมอย่างยิ่ง
Mac ไม่เคยใช้ WebKit สำหรับการเรนเดอร์ NSTextField ตอนที่ iOS ถูกสร้างขึ้นใหม่ ๆ มันใช้ WebKit เป็น text renderer ค่อนข้างกว้าง รวมถึงใน UIKit controls ด้วย และเรียกแนวทางนี้ว่า “sweet solution”
แต่สุดท้ายก็พบว่ามันทั้งหนักและยุ่งยากเกินไป จึงเปลี่ยนไปใช้แนวทางเรนเดอร์ข้อความแบบ Core Text/AppKit แทน
ผู้เขียนค้นพบว่าการเรนเดอร์ข้อความแบบ native ที่ซับซ้อนนั้นยาก จึงไปเรนเดอร์ข้อความแบบ low-level แล้วก็บ่นว่าต้องกลับมาเขียน native interactions เองใหม่
พอลอง WebKit ก็ได้ผลดีมาก แต่กลับทิ้งมันแล้ววนกลับไปอยู่ในสถานการณ์ที่ต้องเขียน native interactions ใหม่อีก
ส่วนตัวถ้าเป็นฉันคงหยุดตั้งแต่จุดที่ WebKit ใช้งานได้ดี แล้ว
จำได้ว่าตอนเป็นวิศวกรจูเนียร์ในปี 2015 เคยได้รับงานให้เรนเดอร์ลิงก์ที่กดได้ภายในย่อหน้าในแอป iOS
ตอนนั้น Swift เพิ่งออกมาใหม่ ๆ จึงเป็นสแตก ObjC/UIKit ล้วน ๆ และมันเป็นฝันร้ายจริง ๆ สุดท้ายก็ทำให้พอใช้ได้แบบกระท่อนกระแท่น
หลังราวปี 2016 แทบไม่ได้แตะ iOS อีกเลย เลยคิดว่า SwiftUI รุ่นใหม่ต้องมีของแบบนี้มาให้เป็นพื้นฐานแล้วแน่ ๆ แต่ถ้ายังไม่มีก็ค่อนข้างบ้าเหมือนกัน
https://developer.apple.com/documentation/swiftui/link
ณ จุดนี้ก็ไม่รู้จะทำให้ง่ายกว่านี้ได้อีกแค่ไหน
การที่ “พอพ้นหน้าจอง่าย ๆ ไปแล้ว native ยังไม่สุกงอมแบบนี้” ถือเป็นเรื่องปกติ
ถ้าคนไม่ทุ่มแรงมากพอ ก็ไม่ควรคาดหวังว่ามันจะสุกงอมขึ้นเอง
เพราะความพยายามส่วนใหญ่ไหลไปกองอยู่กับเว็บเทคโนโลยี ผู้คนจึงติดอยู่ตรงนั้น มอง native แล้วบอกว่า “ยังพัฒนาไม่พอ” จากนั้นก็กลับไปพัฒนาเว็บต่อ วนเป็นวงจรแบบนี้
บน browser มัน “ใช้ได้เลย” อยู่แล้ว จึงแทบไม่มีใครอยากลงทุนแรงเพื่อทำให้ native ดีขึ้น
เหตุผลหนึ่งที่ฝั่งเว็บดูสุกงอมกว่ามาก ก็เพราะผู้ผลิต commercial OS รายใหญ่ไม่ยอมตามโลกให้ทันมาเนิ่นนาน ชุดเครื่องมือ UI ของ Windows นี่เละจริง ๆ
ใน แอปแชต AI ของฉันก็เจอแทบจะเหมือนกัน ไม่มีอะไรที่ทำงานได้ดีเลย
การเรนเดอร์ Markdown ช้าและกระตุก การสตรีมก็ช้าและกระตุก และทุกอย่างทำให้ UI ค้าง
ลอง text editing component ยอดนิยมบน GitHub สำหรับทั้ง UIKit และ SwiftUI อย่างน้อย 5 ตัวแล้ว ทุกตัวพังในทางใดทางหนึ่ง หรือมีบั๊ก หรือช้า มันไร้สาระมาก
นี่เป็นปัญหาที่ยาก ฉันเคยเขียนยาวไว้แล้วว่าตอนสร้าง block editor จากศูนย์ด้วย Qt C++ และ QML แก้ปัญหานี้อย่างไร
เจอปัญหาคล้ายกันทั้งการเลือกข้ามบล็อกที่ไม่ต่อเนื่อง การแสดง Markdown ต้นฉบับใต้เคอร์เซอร์ และขนาด delegate ที่ต่างกัน
จากบทเรียนตอนนั้น ตอนนี้กำลังสร้าง native LLM client ที่มี streaming Markdown parser
[1] https://rubymamistvalove.com/block-editor
[2] https://www.get-vox.com
ความเห็นจาก Lobste.rs
จริง ๆ แล้ว Electron ก็คือแรปเปอร์ที่หุ้ม WebView เอาไว้ แต่เพราะมันพา Chromium ทั้งเอนจินมาด้วย ขนาดแอปจึงใหญ่เกินไปเมื่อเทียบกับความสะดวกที่ได้
ช่วงปี 2001~2002 เคยทำเลย์เอาต์ข้อความแบบบอลลูนแชตอันเป็นเอกลักษณ์ของ iChat ด้วย
NSTextViewและสารพัดลูกเล่น แม้จะได้ Hideki Itamura ซึ่งเป็นผู้ออกแบบระบบข้อความของ AppKit มาช่วยก็ยังลำบากพอสมควร เดี๋ยวนี้ทำด้วย HTML+CSS ได้ค่อนข้างง่ายแล้วเคยมีส่วนร่วมกับแอปที่ใช้ Tauri แล้วพอเปลี่ยนไปใช้ Chromium ผ่าน Electron มันทำงานได้ดีกว่ามาก โดยเฉพาะเมื่อเป้าหมายคือช่วงที่กว้างมากตั้งแต่ win7 ถึง win11
ฝั่ง Tauri ดูดีตรงที่ใช้ system webview แต่บน Windows ก็เท่ากับพึ่ง Chrome หรือ Edge, บน macOS ก็พึ่ง Safari, ส่วนสภาพแวดล้อมอื่น ๆ ก็แทบต้องลุ้นเอา สุดท้ายความคาดเดาได้และความสุกงอมของแพลตฟอร์มเป็นฝ่ายชนะ และด้วยเหตุผลที่อธิบายไม่ได้ชัดเจน ประสิทธิภาพก็ดีกว่าด้วย
สุดท้ายก็ต้องการซอฟต์แวร์ที่ดีกว่า มากกว่าจะทำให้กราฟ
htopดูน่าพอใจประเด็นหลักของบล็อกโพสต์ไม่ใช่ว่า “ทุกคนควรเลือก Electron” แต่คือ ตอนนี้เข้าใจแล้วว่าทำไมแม้แต่บริษัทที่มีทั้งทรัพยากรและเงินก็ยังเลือก Electron หรือเทคโนโลยีเว็บ อย่างน้อยในมุมมองของฉัน มันยอมประนีประนอมในจุดที่เหมาะสมเพื่อมอบประสบการณ์ใช้งานที่ดี
มีคนมากมายที่ปกป้อง Apple TextKit 2 หรือ native text framework อื่น ๆ แต่แทบไม่มีโปรแกรมแก้ไขข้อความยอดนิยมและประสิทธิภาพสูงที่สร้างด้วย Apple SDK ล้วน ๆ Xcode ทำได้ค่อนข้างดี และอาจเป็นกรณีใช้งานจริงเพียงรายเดียวที่ใกล้เคียงที่สุด ส่วน Zed, Sublime Text, Visual Studio Code และ JetBrains IDE ต่างก็ใช้โซลูชันเรนเดอร์ข้อความของตัวเองด้วยเหตุผลบางอย่าง
เพราะแบบนั้น ต่อให้สร้างด้วยวิธีที่แย่ที่สุด มันก็อาจยังดูโอเคในสภาพแวดล้อมของตัวเอง
แต่คนที่เหลือซึ่งใช้อุปกรณ์สเปกต่ำกว่ามากกลับต้องแบกรับ ซอฟต์แวร์ที่เทอะทะและช้า ต่อไป
เพียงแต่ดูเหมือนผู้เขียนจะไม่ได้สำรวจไปถึงทางนั้นในที่นี้
จากมุมคนนอก Flutter ดูเหมือนคำตอบของคำถามว่า “ถ้าตัด Chromium เหลือแค่ Skia ซึ่งเป็นตัวเรนเดอร์ แล้วเอามาใช้กับแอป GUI จะเป็นอย่างไร?” มันน่าจะเป็นเครื่องมือข้ามแพลตฟอร์มที่เบากว่า Electron แต่มีความสามารถใกล้เคียงกัน
contentEditableDIV เดียว และใช้คลาสย่อยของWKWebViewความย้อนแย้งคือเอนจินข้อความแบบ native ของ Apple มี data model ที่ดีกว่า HTML DOM tree มาก นั่นคือสตริงกับคุณสมบัติการจัดสไตล์ที่เข้ารหัสแบบ run-length
การแก้ไขข้อความบน DOM นั้นแทบเป็นฝันร้าย เพราะพื้นที่เลือกมักพาดผ่านหลายองค์ประกอบในหลายลำดับชั้น ทำให้ต้องแยกและรวมอย่างซับซ้อนมาก ตอนที่เคยลอง Safari build รุ่นแรก ๆ ที่รองรับ
contenteditableเคยส่งรายงานบั๊กไปมหาศาล และจนถึงตอนนี้ตัวแก้ไข rich text บนเว็บจำนวนมากก็ยังพังเวลาตัดหรือวางรายการลิสต์สุดท้ายมันก็ดูคล้ายกับเรื่อง CISC ปะทะ RISC ในยุค 90~00 คือสถาปัตยกรรมที่ “ด้อยกว่า” กลับได้รับทรัพยากรมากกว่า จนเกิดเป็น implementation ที่เหนือกว่า