近视、外斜视与代码:为近视专业人士开发视觉训练工具
Source: Dev.to
Target audience: 工作主要以近距离视力为主(如开发者等)的人员,患有近视或其他眼部聚焦相关问题,或希望在长时间近距离工作压力下仍保持视力锐利的人群。
Disclaimer: 以下文字 不 作任何医学声明;它仅假设通过眼部肌肉锻炼有可能改善视力。
Introduction
我是近视(‑4.5 屈光度)。2023 年,我开始在入睡前进行 5–10 分钟的简单眼部练习。自此我的视力在一定程度上有所改善,我认为这值得分享,于是用俄语创建了一个 YouTube 频道来记录我的经历。
到那时,常规练习已经让我拥有相当好的眼肌感知能力:我能够感受到哪只眼肌在收缩和放松,因为我已经详细学习了extra‑ocular muscle anatomy。这使我能够形成自己对近视成因的精准看法。这是对Bates method的逻辑延伸。
尽管主流共识认为 Bates 方法是错误的,但其核心思想——粗略聚焦由眼外肌完成,细致聚焦由眼晶状体完成——帮助了许多与我分享经验的人摆脱了近视及其他眼部聚焦问题。我甚至读到过 2018 年一篇眼科期刊文章,声称 Bates 理论并非完全没有价值,应该进一步开展研究(可惜我现在找不到该文)。
我的经验表明,近视是由于眼直肌(尤其是内侧直肌,即靠近鼻子的那条)缩短导致的,这些肌肉负责眼睛的内收以实现近距离聚焦。
2025 年 7 月,我开始进行立体阅读——在并排视图中阅读两列文字——此时眼睛会向外偏转至外斜视的程度,即眼睛的偏离超过平行对齐。我还发现,我的近视观众在外斜视和实现显著外斜的能力上非常差,而非近视者则拥有很强的外斜能力。自此,外斜视和立体阅读成为我训练眼睛的主要工具。仅阅读本身已被许多视力改善系统(包括 Bates 方法)所采用。
进展
- 2025年6月 – 我能够在(非立体模式,普通文本)33 cm距离下阅读2 mm的小写字母。
- 2025年12月31日 – 我能够在3 m距离下阅读7 mm的小写字母。
这相当于**2.6×**的角度字母尺寸提升,同时也带来了日常视力的显著改善。自此我确信眼肌锻炼可以作为一种有效手段来缓解如近视等眼睛聚焦问题。
Stereo Reader 网页应用
在 2025 年 6 月,我启动了 Stereo Reader 网页应用,作为我的立体阅读工具。实现时选择了 Vue / TypeScript / PWA。看似简单的项目很快就变成了一个挑战。
截图
在向我的视力训练受众分享该应用后,显而易见需要支持多种电子书格式,包括文本量大的格式。此外,在调整 字体大小、文本列间距 和 阅读区域跨度 等阅读设置时,屏幕上当前可见的文本不应丢失。
布局引擎
我开发了一个简单的语义系统,将任何文本文档格式拆分为 段落(为简洁起见称为 块),每个块都有自己的字体样式。行的计算是基于文本列宽 逐字符 动态完成的。
由于我花了大量时间 基准测试 JavaScript 并 避免任何额外的字符串/数组分配(参见我的 基准测试帖子 和 避免分配的系列文章),布局计算相当快速。然而,处理像阿西莫夫的《前进的基金会》这样的大型小说(≈ 14 万词)仍需在中端移动设备(在 Snapdragon 720G 上测试)上耗时 300–400 ms。问题在于,只要设置导致列宽变化,就会重新计算布局。无论如何,用户体验仍在可接受范围内。
虚拟滚动
在布局可用的前提下,我实现了 虚拟滚动,同时保持全文容器的真实高度。这使得文本看起来像是加载到单个 DOM 元素中并使用原生滚动。进一步的改进可以包括:
- 重新思考用户如何与部分滚动交互。
- 使用 Web Workers 并行处理文本。
其他功能
- 立体图像查看。
- 小游戏(例如,移动小球以训练外斜视的运动能力)。
加入旅程
This project has become my ongoing lifelong journey, and I welcome anyone to join.
- Website: (包括文档)。
- Try the app: .
- YouTube channel: .
- Telegram channel: .
Feel free to ask any questions, share your experiences, or contribute to the project!

