无障碍创业:技术架构驱动的主流跃迁
|
告警响的那一刻,我正把泡面叉子插进最后一块蛋里。屏幕右下角时间是凌晨三点半,SSH窗口还挂着上个月没关的K8s event监听,另一台显示器开着钉钉未读消息——开发老张昨天发的「无障碍适配进度98%」截图,被我最小化在角落里三年都没点开过。 其实那天根本没起火。连CPU尖刺都没有。就是首页导航栏的「语音导览」按钮点下去,页面白了半秒,再回来时所有ARIA标签全乱了:role=“navigation”套在button里,labelledby指向的ID早被前端热更覆盖了三遍,而那个ID本身……算了,不查了,查完也得重写,反正没人维护。
文章配图,仅供参考 我原以为只是JS执行栈卡死,结果切到监控面板一看,流量图是平的,错误率曲线上拱着一道微凸的驼峰——就那么0.7%的用户触发失败,但全是残障用户测试工具爬虫,UA带axe-core,UserAgent里明晃晃写着“screenreader-2023”。我们后台从来只看DAU和PV,从不筛UA。机房的人今早来换SSD,顺手把机柜顶那台备用交换机的散热网拆了擦灰,说“反正闲着也是闲着”,我就坐在他旁边啃冷馒头,看他拿压缩空气罐喷主板缝里积的毛絮,喷得整个机柜嗡嗡响。跟开发吵那一架在五月十七号下午。老张甩过来个PR链接,说「语义化重构完成,已测WAVE无障碍扫描零错误」。我扫了眼代码,div全换成nav/aside/section了,挺好。但部署前我手欠改了行nginx配置,加了header set X-Accessibility-Compliance "1.0",想着以后埋个指标——结果上线后五小时,第三方审计团队直接邮件抄送CTO,说我们在HTTP响应头里公然宣称合规,却在DOM里用display:none藏掉skip-link锚点,属于「伪无障碍」。老张拍桌子:“你加这头干什么?!那是给搜索引擎看的!” 我没回,只把那个header删了,手抖多按了个r,把整个header模块全注释掉,然后提交了。现在想起来,那行注释还躺在主干里:# accessibility-compliance-header - removed per dev request, 2023-05-17。 迁移复盘会上,运维小王提了一嘴:“去年五月那波证书续期,咱把ACME客户端升级了,新版本默认跳过aria-hidden=true的节点校验。” 全场静了三秒。没人接话。窗外天快亮了,云层底下泛青,像没煮透的荞麦面。我低头翻自己笔记本,上面记着“证书续期要核对CSP nonce策略”,底下一行潦草补了句:“也核下accessibility meta?” 后面画了个叉,又画了个问号,最后被咖啡渍盖住了半边。 优胜劣汰不是靠谁发通告,是靠日志里悄悄长出来的模式。你发现某类报错总集中在键盘Tab到第四个焦点元素时崩;某次回滚后用户投诉暴增,一查全是NVDA用户;某个A/B测试组流失率奇高,但埋点只统计了click,漏了keyDown.enter。这些东西不会进日报,但会咬你第三个月的OKR——比如Q3要降5%的残障用户跳出率,结果你连跳出路径都捞不出来,因为Sentry的event payload过滤器里,根本没放aria-字段进采样。 上个月整理值班表,我把周三夜班划给了新人。她说怕半夜接到告警不敢动,我教她第一件事不是看Prometheus,是ssh进去,cat /proc/sys/net/ipv4/ip_forward。她懵了:“这……跟网络转发有啥关系?” 我笑了一下。其实也没啥关系。我就想让她先摸到真实机器的心跳,而不是盯着告警阈值数字发慌。后来她真接了告警,是SSL握手超时,她第一反应去renew cert,第二反应才想起来查haproxy日志里有没有「SSLv3 disabled」字样。我没拦她。有些坑得自己栽进去,才能闻出哪里开始发酸。 其实去年五月之前,我们连WCAG是啥都不知道。有次产品提需求要加字幕自动识别,开发说“FFmpeg+WebAssembly就能跑”,我随口问了句“字幕轨道是否同步音频描述轨道”,对方愣住,说“音频描述?那不是配音员的事吗?” 那天晚饭我在楼下沙县吃拌面,老板娘递筷子时多塞了根牙签,说“给你剔牙,刚有客人掉饭粒缝里了”。我嚼着面忽然想起——我们架构图里所有数据流箭头,都标着「低延迟」「高吞吐」「可伸缩」,唯独没有一根箭头标着「可到达」。 上周我拆了一台退役机器的SSD,里面还有旧镜像残留。dd if=/dev/zero of=/dev/sdb bs=1M count=100。清完扇区,突然看见分区表里嵌着一段base64:dGVzdDovL2NvcmUvYWNjZXNzaWJpbGl0eS9hZGRfbWFyay5qcw== 解码出来是test://core/accessibility/add_mark.js——是我们2021年立项又砍掉的无障碍标注系统原型。谁写的、存了多久、为什么没删,全无记录。我盯着看了两分钟,按了两次Ctrl+C终止dd进程,让那串base64继续躺在磁盘深处。 这事本来能避免。去年五月如果谁在CI流水线里加一行jest-axe --strict,或者部署检查脚本里塞一句curl -s http://localhost:3000 | xmllint --xpath 'count(//[@aria-])' -,甚至只要在灰度发布checklist上写一行「验证NVDA+Chrome组合浏览主流程」……都不会等到审计报告来打脸。但我没写。我不信那个「能」字。现在信了,信它真会咬人,一口咬在你自认最硬的关节上。 下一步补个事情:把所有CI任务里npm test改成npm test -- --coverage && npx axe-core-report。不跑全量,只扫三个路由:首页、注册页、支付成功页。跑挂了就阻断发布。老张要是反对,让他来修。我反正把axe-cli的GitHub star加星了,星标名就叫「五月十七日」。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


无障碍创业三难破局:科技赋能流量、合规、运营
跨界融合与资源整合:工程师创业的技术架构实战指南
跨界融合:工程师创业的技术架构实战指南

