文章摘要
文章核心内容:作者作为资深macOS/iOS开发者,发现纯Swift/SwiftUI开发在处理复杂文本(如Markdown聊天界面)时仍不成熟,存在性能问题和功能限制,最终不得不转向NSTextView等传统方案,反思了过度追求"原生开发"的局限性。
文章总结
《原生开发的困境:当需要处理文本时》| Artem Loenko
作为一名拥有近20年经验的macOS/iOS原生开发者,作者对常见的"又是Node/Electron...真遗憾..."这类反应提出了反思。
在尝试用纯Swift/SwiftUI实现支持Markdown的简单聊天功能时,作者发现: 1. SwiftUI在复杂文本场景表现欠佳:无法全选Markdown文档、滚动卡顿等问题 2. 转向NSTextView/TextKit 2带来新问题:与SwiftUI兼容性差、CPU使用率飙升 3. 使用成熟的AppKit组件仍存在单元格闪烁等设计缺陷 4. 要实现完整的原生文本功能(上下文菜单、词典查询等)需要数月开发
当尝试用WebKit渲染Markdown时,效果意外出色: - 性能良好 - 排版近乎完美 - 控制粒度适中
最终测试Electron方案时发现: - 文本操作和Markdown渲染开箱即用 - 性能优于纯TextKit 2实现 - 轻松支持Git差异显示等高级功能
核心结论: 1. 对于富文本聊天类应用,苹果原生开发框架已成为限制而非优势 2. Electron/React Native等方案能提供更好的文本渲染模型 3. 这已不是"快速方案vs正确方案"的争论,而是功能实现的可能性问题
现状解释:为何多数新型聊天应用都采用Web技术栈——因为在处理当代核心交互范式(聊天、长文本、灵活排版)时,确实没有真正的替代方案。
标签:macOS、SwiftUI、AppKit、TextKit、Electron
(注:原文中的导航菜单、分享按钮、版权声明等非核心内容已酌情删减,保留了完整的技术论证脉络和关键细节)
评论总结
以下是评论内容的总结,保持观点平衡并突出关键论据:
对Electron/Web技术的支持观点
- 认为Web技术成熟且跨平台:"Browser rendering engines are pretty mature...with significant GPU acceleration"(pornel)
- 混合方案建议:"Why not use native for UI frame...and WebKit for the actual chat"(d12bb)
- 引用:"Web rendering doesn't need to be only through Electron...other libraries much more performant"(diego_moita)
对原生开发的批评
- SwiftUI功能不足:"Try to build a ui where you need non-trivial...SwiftUI will fail"(inatreecrown2)
- 开发体验差:"Native stuff has terrible developer experience"(vasco)
- 引用:"I've tried at least 5...text editor components...all were broken"(splittydev)
为原生开发辩护的观点
- 已有成熟解决方案:"Used these myself and had no issues"(lenkite)
- 性能质疑:"I've never found Cocoa/Objective C to have any of the problems"(ryandrake)
- 引用:"There are so many native Mac...apps...perfectly capable of rendering Markdown"(rTX5CMRXIfFG)
技术方案讨论
- 推荐替代框架:"This is where QT/JUCE can help"(chromadon)
- WebKit折中方案:"Using WebKit to render Markdown seems completely appropriate"(Wowfunhappy)
- 引用:"Kotlin MP is also pretty decent on Mac"(usernametaken29)
问题根源分析
- 开发者投入不足:"People are locked into web tech...that's where the effort has been going"(skeledrew)
- API不完善:"TextKit2 is unfortunately kinda broken"(krzyzanowskim)
- 引用:"how immature all these 'native' things still are"(skeledrew)
总结呈现了关于原生/Web技术争论的主要分歧,包括性能、开发体验、成熟度等方面的不同见解,同时保留了支持与反对双方的关键论据。