无障碍创业:技术破壁,从边缘到主流的跃迁
|
告警响的那一刻,我正把泡面叉子插进最后一块蛋里,叉尖一滑,蛋滚到键盘缝里去了。没捡。反正屏幕右下角弹出第三个 P0——「无障碍适配模块 CPU 打满」,接着是「TTS 引擎崩溃」,再然后是「读屏焦点丢失连锁告警」。三台机器,全在边缘节点池里,没做灰度,也没切流量开关,就那么干挺着。 我原以为是新接入的语音合成 SDK 撑不住并发,结果翻日志前先听见开发老张在 Slack 里吼:「你们运维把 /dev/audio 权限又改了?!」我他妈都没动过那台宿主机。查完才发现,是前端把 aria-live 区域写成递归监听——用户每点一次按钮,就 spawn 一个新 voiceover listener,三小时没清理,内存堆到两百兆,GC 拼命救,最后全卡在 read() 系统调用上死等。根本不是权限的事。老张挂了电话去改 DOM,我盯着 top 里那行飘红的 node 进程,突然想起去年十一月,我们删掉整个「无障碍测试环境」,理由是「产研节奏压不住,测了也上线不了」。 其实早该知道的。2025年3月,那个叫「启明」的残障开发者创业团队找上门来,说要给视障人群做个本地化语音导航工具。他们连 CI 都跑不全,提交 PR 全靠手写 patch,发版时还得求我们搭个临时私有 npm registry。我当时真烦,觉得纯属添乱——你搞个 APP,为啥非得让 screen reader 能喊出「你正站在朝阳门地铁 C 口第二根立柱左侧十五厘米」?可他们上线第三天,某地盲协发了个通告:三个区残联主动采购了试用包。我们这边倒好,自己主站的按钮 hover 状态还没加 focus outline,更别说 aria-expanded 同步了。 机房冷得很,穿羽绒服还打喷嚏。窗外天快亮了,蓝灰一片,路灯还亮着。我扒拉两口凉透的泡面,突然想起来:上周五值班表是我跟小王换的,他替我盯凌晨三点那波金融接口压测,我就蹭这空档帮「启明」搭了个离线 TTS 容器镜像。当时顺手加了 --privileged,后来忘删了——现在想想,那镜像里连 alsa-utils 都没装齐,纯靠硬怼 ioctl 去抢声卡。真悬。要不是他们自己拿树莓派实机跑通了全流程,这事八成就烂在 dev 环境里了。 可这事真能怪开发?上周三跟产品吵了一架,就为「要不要把『跳过动画』开关默认打开」。她说「数据说只有千分之三用户点这个」,我说「那另外九千九百九十七人里,有多少人根本不知道它存在,或者压根点不到?」她翻白眼,手机一扣:「你自己去改,但别动核心交互路径」。我改了。我把那个开关塞进系统设置三级菜单,附带三段引导视频。结果呢?第一周没人点。第二周,有个用户留言:「我失明十年,第一次不用喊儿子帮我关掉转圈加载动画。」她没留联系方式,只用了盲文键盘打字,句尾三个点……我截图发群里,老张回:「操,这比我们上季度 KPI 还重。」 失败案例多的是。去年中台强行推「统一无障碍组件库」,文档写了三百页,API 对齐 React、Vue、小程序三端,结果上线三个月,只有两个项目敢接——其中一个还是行政部做的内网报销系统。为啥?因为组件库里那个「可访问日期选择器」默认依赖 moment.js,而 moment 的汉化 locale 文件本身没加 lang 属性;读屏直接读成「Jan 1st, 2024」,视障用户听半天听不懂是农历还是公历。修复方案很简单:一行 setAttribute('lang', 'zh-CN')。可谁去查?没人认领。PR 提了五次,全被「语义不一致」打回来,最后还是「启明」团队顺手修的。我看到代码时愣了三秒——他们连我们内部 GitLab 的 merge request 通知都没权限看。 优胜劣汰不是神话。是有人凌晨四点还在调试 iOS VoiceOver 的 rotor 滚动顺序,是因为安卓 TalkBack 不支持某个 custom role,就得重写整套焦点管理逻辑。是用户投诉「语音导航报错说我在电梯里」,结果发现定位 SDK 返回的海拔值,被我们当楼层号直传给了 TTS。这些不是 bug,是视野盲区结的痂。技术破壁?扯淡。是人肉补丁一层叠一层,叠到够厚,厚到主流不敢绕着走了。就像当年我们骂 PHP 不安全、Node.js 不稳定、容器网络太虚——现在呢?K8s 集群里跑着七种方言写的脚本,照样扛住春晚红包雨。
文章配图,仅供参考 小王今早六点给我打电话,嗓音哑的,说他老婆昨晚胎心监护异常,现在在妇产科等着做 B 超。我嗯了一声,把终端里刚敲到一半的 kubectl rollout undo ——删了。反正回滚也救不回已经崩掉的读屏流状态。屏幕上还开着两扇浏览器窗口:左边是「启明」GitLab 的 issue 列表,第 27 个写着「需支持 NVDA+IE11(某地残联老年培训中心唯一可用组合)」;右边是钉钉,行政部刚发通知:今年五一假期调休,改成连续五天,方便「开展无障碍服务专项体验日」。我认了。这事儿本来能避免——比如,年初把读屏测试纳入 pre-commit hook;比如,给前端定条铁规:所有 click handler 必须有 keyboard event fallback;比如,别删掉那个「无障碍测试环境」,哪怕它三年没跑过一条真实用例。但我没做。我光顾着优化慢 SQL 和腾磁盘空间了。现在好了,告警还在响,蛋还在键盘缝里,而「启明」的 v1.3 已经上架应用商店,评分 4.9。他们不用等我们批准,也不用求资源排期。他们自己编译,自己签名,自己把 TTS 模型剪枝压到 12MB——就为了塞进老年机里。我们?我们还在等 SRE 组下周二开会,讨论「是否允许边缘节点加载外部语音引擎」。 得补个监控。不是 CPU,是 focus 管理链路的埋点。得加,马上加。但今晚先不加——得先把键盘缝里的蛋抠出来,不然热键老触发错误。反正,它卡得挺牢。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |




