Globe Icon
VN | ENG | 中文
M&M Communications
新闻 单页应用程序 (SPA): 架构与优势
单页应用程序 (SPA): 架构与优势

单页应用程序 (SPA): 架构与优势

最后更新: October 20, 2025 00:00 | Website Development

分享

单页应用程序 (SPA) 能够为用户提供类似应用程序的速度,因为导航操作在客户端进行。但是,要构建出高质量的 SPA,需要平衡架构、搜索引擎优化 (SEO)、性能、安全、可访问性和可维护性等因素。 这份从头到尾的指南将 SPA 的概念转化为一套可供您的团队遵循的、无需猜测的、可用于生产环境的蓝图。

1. 如何选择 SPA (Single Page Application)

选择 SPA (单页面应用程序) 适用于您需要丰富交互、实时更新、离线功能以及频繁的页面内导航(仪表板、生产力工具、内部应用程序)的情况。 对于内容驱动型网站,可以考虑 MPA (多页面应用程序) 或混合的 SSR/ISR (服务器端渲染/客户端渲染) 以获得更好的索引和更快的首次渲染。 始终从用户旅程和 SEO 需求开始,架构应根据结果来确定。

2. 核心架构

路由:客户端路由管理历史 API、路由守卫、懒加载路由、404 处理、滚动恢复和焦点管理。 保持 URL 的意义和稳定性;在 SSR/预渲染时,包含面包屑和规范链接以优化 SEO。 Here's a breakdown of the translation and why I chose those words: * client-side router managing history API: 客户端路由管理历史 API * "client-side router" - 客户端路由 * "managing history API" - 管理历史 API * route guards: 路由守卫 * lazy-loaded routes: 懒加载路由 * 404 handling: 404 处理 * scroll restoration: 滚动恢复 * focus management: 焦点管理 * Keep URLs meaningful and stable: 保持 URL 的意义和稳定性 * include breadcrumbs and canonical links for SEO when SSR/prerender is used: 在 SSR/预渲染时,包含面包屑和规范链接以优化 SEO。 * "breadcrumbs" - 面包屑 * "canonical links" - 规范链接 * "SEO" - 搜索引擎优化 (Search Engine Optimization) * "SSR/prerender" - 服务器端渲染 (Server-Side Rendering) / 预渲染 (Prerendering) This translation aims for clarity and accuracy, using common technical terms in Chinese. It also maintains the original meaning and intent of the English text.

状态管理:将状态划分为 UI 状态(视图切换)、服务器缓存(API 数据)和会话/身份验证状态。 使用规范化数据以避免重复,并优先使用查询库(如 React Query/Apollo/SWR)来进行缓存、验证和后台刷新。 保持全局状态尽可能小,过度使用会导致紧密耦合。

API 层:使用类型化的客户端(OpenAPI/GraphQL 代码生成)、集中式请求(带重试/指数退避)、取消(AbortController)和一致的错误处理。 支持乐观更新并提供回滚功能,并明确地将加载/错误状态暴露给 UI。

文件系统布局:采用以功能为中心的模块,其中包含相关的组件、测试和样式。 将路由配置与页面紧密结合,并将共享的基本元素放在设计系统中。

3. 性能和核心网页指标

初始加载:根据路由和组件进行代码分割;使用动态导入;进行依赖树剪枝;清除未使用的 CSS;压缩(Brotli)、HTTP/2 或 HTTP/3,预加载关键资源。如果使用服务器端渲染(SSR)或预渲染,则将关键 CSS 嵌入到页面顶部内容中。避免使用大型第三方包——评估每个依赖项。

运行时:避免不必要的重新渲染(使用 memoization 和 stable keys),对于长列表使用虚拟化,限制昂贵效果的执行,批量更新状态,并保持组件深度合理。 使用 IntersectionObserver 实现图片的懒加载和数据加载。

数据获取:优先使用缓存,并支持后台刷新、在刷新期间保持数据有效性、分页/无限滚动,以及带有可访问“加载更多”按钮的功能。 优先使用服务器端流式传输或部分加载,如果服务器支持。

图片和媒体:响应式图片 (srcset/sizes), WebP/AVIF 作为备用方案, 懒加载, 以及正确的宽高比,以防止 CLS (Cumulative Layout Shift)。优化字体 (WOFF2, 子集化, font-display: swap, 预加载关键字体)。

指标:监控慢速设备上的 LCP、FID/INP、CLS、TTFB 和 CPU 时间。 制定每条路线的预算 bundle 大小,并在 CI 中强制执行。

4. 搜索引擎优化和可发现性

以下是翻译: 原生 SPA 存在爬虫问题。 使用 SSR/ISR/预渲染技术,向爬虫提供 HTML。 对于每个路由,生成元标签(标题、描述、Open Graph、Twitter)、结构化数据(JSON-LD)、规范链接和 hreflang(多语言)。 对于包含站点地图,将预渲染的路由映射到站点地图。 对于搜索页面或过滤器,保持可被爬虫索引的 URL(查询参数),并在服务器端渲染出有意义的 HTML。

在边缘/服务器层面正确处理 404/410/301 错误。避免使用基于哈希的路由。确保在需要时,导航更新文档标题、焦点和 ARIA 实时区域。

5. 可访问性

键盘操作必须与鼠标操作保持一致。在导航时,将焦点移动到主标题;提供跳过链接和地标;保持标签顺序的逻辑性。使用语义 HTML,仅在必要时使用 ARIA,并确保交互控件是真实的按钮/链接。通过 aria-live 管理路线更改的通知。验证对比度、目标尺寸(44x44)和运动偏好;避免滚动劫持。组件库必须编码可访问的模式(菜单、模态框、标签、折叠面板、对话框、轮播图、数据表格)。

6. 重要的用户体验模式

加载中:以下是翻译: * 使用骨架和动画效果可以减少用户对等待时间的感知,但必须保持简洁;尽可能提供明确的进度指示。 * 在数据获取期间,保持UI的响应性;避免使用全局加载指示器,以免遮挡上下文信息。 解释: * "skeletons and shimmer" 翻译为 "骨架和动画效果",更符合中文表达习惯。 * "reduce perceived wait" 翻译为 "减少用户对等待时间的感知",更准确地表达了原意。 * "minimal" 翻译为 "保持简洁",更符合技术语境。 * "provide determinate progress when possible" 翻译为 "尽可能提供明确的进度指示",更强调了提供明确信息的必要性。 * "Keep the UI responsive during data fetching" 翻译为 "在数据获取期间,保持UI的响应性",更简洁明了。 * "avoid global spinners that hide context" 翻译为 "避免使用全局加载指示器,以免遮挡上下文信息",更清晰地表达了避免遮挡上下文信息的目的。 总而言之,这个翻译力求准确、简洁、并符合中文表达习惯。

错误:显示包含恢复步骤的内联消息;保留用户输入;提供对临时错误的重试功能。对于关键消息,使用礼貌/强硬的 aria-live 属性。

导航:在返回时,保存滚动和筛选状态;支持深层链接;使用面包屑和路由标题。对于模态路由,确保可共享的 URL 以及正确的历史行为。

离线/网络信号差:缓存关键资源(Service Worker),显示连接状态,排队进行重试,并在存在过时数据时发出警告。

7. 安全与认证

Use HTTPS everywhere, secure cookies with HttpOnly/SameSite, short-lived access tokens with refresh rotation, and CSRF protection for unsafe methods. Validate all server responses; never trust client state. Escape/ sanitize untrusted HTML to prevent XSS; implement CSP where feasible. For auth flows, guard routes, protect API calls, and clear sensitive state on logout/tab close. Instrument anomaly detection (sudden 401 spikes).

8. 国际化和本地化

选择一个支持 ICU 消息的 i18n 库。 将语言环境信息存储在 URL 或 HTTP 头部中;在使用 SSR/ISR 时,针对每个语言环境进行预渲染。 翻译元数据(标题/描述)、表单错误、验证、ARIA 标签和 alt 文本。 使用语言环境感知格式化日期、数字、货币和复数形式。 确保字体支持目标脚本;处理从右向左的文本,并使用逻辑属性。

9. 数据层和缓存的详细信息

Partition caching by user/session where needed (auth, role). For GraphQL, tune cache policies (cache-first, network-only) per query. For REST, use ETags/Last-Modified, conditional requests, and pagination (cursor/offset). Handle race conditions and stale UI by tracking request IDs or using state libraries that handle dedupe/cancel (React Query).

为了实现实时(WebSocket/SSE)的UI更新、延迟处理UI更新、合并频繁的消息,以及考虑协作编辑时的最终一致性策略。

10. 测试策略

单位:纯粹的业务逻辑、钩子/可组合组件、实用函数。

组件:使用逼真的道具进行渲染,确保可访问性(使用 ARIA 角色和键盘行为),并且仅对稳定的 UI 元素进行截图。

集成/端到端:涵盖以下关键功能(身份验证、搜索、筛选、结账、仪表盘编辑)在浅色/深色主题下的表现;测试离线/慢速网络模式;验证 SSR 输出中的 SEO 标签;确认重定向和 404 错误。

性能/可访问性自动化:使用 Lighthouse/Axe 在 CI 中,并设置预算和失败门。 使用 Playwright/Cypress 结合 Axe 进行路由级别的无障碍性检查。

11. 可观测性和运维

Ship frontend logs with context (route, user agent, performance timings). Monitor JS errors, unhandled rejections, API failures, and slow endpoints. Add Real User Monitoring (RUM) for Core Web Vitals and interaction latency. Trace API calls end-to-end with correlation IDs. Implement feature flags and remote config for safe rollouts. Provide kill switches for experiments that degrade UX.

12. 部署模型

SSR/ISR: SSR (学生自我评估): 学生对自己的学习情况、能力、进步等方面进行评估。 ISR (信息检索系统): 用于查找、组织和管理信息的系统。 或者,如果需要更简洁的翻译,可以这样: SSR/ISR: * SSR: 学生自我评估 * ISR: 信息检索系统使用像 Next/Nuxt/SolidStart/SvelteKit 这样的框架,在服务器端或构建时渲染 HTML。 配置边缘/CDN 缓存,并在内容发生变化时进行清除。

预渲染:主要用于静态网站;使用无头渲染生成 HTML 快照供爬虫使用;通过重构钩子保持内容更新。

MPA混合型:使用岛屿/部分加湿技术,将 SPA 的交互性与服务器渲染的壳结合起来。

13. 从旧版保护区迁移

从一个路由或功能开始。首先引入设计系统和 API 层。使用“逐步替换”模式:将某些路径指向新的 SPA,同时保留其他路径在旧应用中。保持 SEO 和永久链接兼容性;保留查询参数和规范 URL。谨慎地重定向,以避免排名损失。同时运行双重分析,以便进行比较。

14. 团队工作流程

“已完成”的定义: 验收标准包括路由行为、SEO 标签、无障碍设计模式和性能预算。 “已完成”的定义: 包括路由级别的测试(单元/组件/端到端测试)、无障碍检查、包大小检查以及添加日志。

设计交付:包括响应式规范、键盘流程、焦点顺序、加载/空/错误状态。 工程启动:确认数据合同、缓存以及错误状态。 质量保证:测试包括使用和不使用JS(用于服务器端渲染)、仅键盘、慢速3G以及减少动画的情况。

15. 状态同步与 URL 设计

尽可能从 URL 中提取状态信息:筛选、排序、分页、标签。 这可以提高可分享性、前进/后退行为,以及预渲染时的 SEO 效果。 保持 URL 清晰(避免使用不透明的哈希块)。 使用 debounce 对搜索参数进行处理,以避免 URL 垃圾信息。

16. 离线和 PWA 功能

使用 Service Worker,缓存关键资源,并提供后台同步功能。对于排队的 Mutation 操作,使用后台同步。如果需要 PWA 功能,提供安装提示和应用图标。显示离线状态提示,禁用需要网络连接的操作,并在重新连接时重新验证数据。保持缓存版本控制和清除策略,以防止资源膨胀。

17. 实际应用中常见的 SPA 陷阱

- 全局加载指示器,会阻止用户交互。
- 订阅/超时后,未及时清理内存泄漏。
- 路由更改后,标题/焦点没有更新。
- 过度使用上下文/全局状态,导致频繁的重新渲染。
- 无限滚动,但没有可访问的分页功能。
- 忽略错误状态(在失败时显示空白UI)。
- 供应商提供的组件,导致主题、可访问性或性能出现问题。
- 使用 CSS-in-JS,但没有使用关键 CSS,导致出现 FOUC (Flash of Unstyled Content)。

18. 数据分析、隐私保护和合规性

尊重用户同意和隐私:在获得用户同意后才进行分析,避免指纹识别,并遵守当地法律法规。确保 SPA 路由更改触发与页面浏览等效的分析。在日志中隐藏个人身份信息 (PII)。提供清晰的 Cookie 和跟踪控制选项。

19. 内容、营销和增长

针对 SPA 内部的营销页面,请: * 预渲染关键路由: 确保页面在首次加载时能够快速呈现。 * 保持内容可编辑: 通过 CMS 确保页面内容可以轻松编辑。 * 确保 OG 标签与页面内容一致: 确保 OG 标签与页面内容相匹配,以便搜索引擎更好地索引。 对于增长循环(例如推荐、邀请),请: * 确保链接正确打开: 确保链接能够正确地引导用户,并保持良好的索引效果。 * 使用功能标志进行 A/B 测试: 使用功能标志进行页面布局的 A/B 测试。 * 确保实验不会破坏无障碍性和性能预算: 确保 A/B 测试不会影响网站的无障碍性和性能。

20. 检查清单

发射检查清单:以下是翻译: * SSR/预渲染已配置;每个路由对应不同的元标签;站点地图已更新;404/301 状态正确;标题和焦点已更新;在关键路由上,Axe/Lighthouse 检查结果为绿色;包大小预算已满足;日志和指标已上线;功能标志已准备好回滚。

开发人员检查清单:语义组件;分词主题;基于 URL 的状态;错误/空状态处理;测试编写完成;可访问的键盘操作流程;API 错误处理;分析事件映射。

评论员检查清单:使用键盘导航;焦点可见;表单有标签;对比度足够;测试慢速网络;检查预渲染页面的 SEO 输出(使用 "view-source");确认没有控制台错误。

21. 维护与发展

定期审计;移除死代码;谨慎升级依赖项;保持路由器、状态和数据库的更新。定期进行无障碍性和性能审计。为已解决的事件添加回归测试。保持设计系统和API合同的文档。轮换所有权,以避免单点故障。

迷你 playbook:从 SSR/预渲染开始,构建设计系统,强制使用 tokens,实施 RUM(运行时性能监控),设置预算,使用 feature flags 进行发布,并使用键盘 + 屏幕阅读器测试所有路由。

优秀的SPA(单页应用程序)应该感觉直观、易于发现、安全且包容。 通过有条理的架构、测试和治理,您可以提供类似应用程序的体验,而不会牺牲SEO、可访问性或开发速度。

22. 开发人员的体验和工具

采用 linting (ESLint, TypeScript 规则, a11y 检查器), 格式化 (Prettier), 以及提交钩子,以防止回归错误。 使用 Storybook 进行组件隔离,并进行无障碍性和交互测试。 添加生成器,用于生成路由/组件,以强制执行约定(测试、本地化占位符、SEO 默认值)。 保持路径别名的合理性;避免深层相对导入。

针对 CI (持续集成),并行执行单元、组件、端到端 (E2E) 和性能/可用性测试。为每个 PR 提供预览环境,以便 QA 和 PM 在真实条件下验证路由。跟踪每个 PR 的包大小差异。

23. 高级路由场景

模式路由: * 使用背景路由来提供上下文。 * 确保深层链接能够恢复模态状态。 * 支持返回按钮关闭模态。 保护路由: * 在应用启动时从服务器加载身份验证信息。 * 显示占位符而不是空白屏幕。 * 在登录后,以礼貌的方式进行重定向。 嵌套布局: * 利用路由的 `outlet` 或 `slot`。 * 保持面包屑和元数据的一致性。

搜索和筛选:将筛选条件编码到URL中,使用节流更新,在返回时保留选择,并预加载可能出现的下一页。对于无限滚动,提供可选的分页锚点,以提高可访问性和搜索引擎优化。

24. 数据完整性和并发性

使用乐观或悲观策略来处理并发编辑。使用ETags/版本控制来检测冲突;提供友好的冲突解决方式。对于协作编辑,实现状态指示器和活动流,并使用速率限制以避免UI卡顿。

对于支付或关键变异操作,应避免“一键提交,然后忘记”的方式;而是要显示可预测的状态(例如:处理中/成功/失败),并支持幂等重试。

25. 设计系统集成

创建用于颜色、间距、排版、半径、阴影、z-index 和动画的标记。 组件必须提供可访问标签、加载状态和错误消息的属性。 包含支持键盘和屏幕阅读器的数据可视化模式(图表、地图)。 记录“已知限制”,并引导团队从临时组件迁移。

26. 内容运营

整合 CMS 或无头内容,避免因内容修改而需要重新部署。确保编辑人员能够管理每个路由的 SEO 元数据。验证富文本内容,确保标题层级、链接、替代文本的正确性,并避免破坏布局的内容。本地化工作流程,并保持翻译键的含义。

27. 绩效预算和安全措施

为 JavaScript、CSS 和图片设置每条路由的预算。如果超出预算,则停止 CI(持续集成)流程。单独跟踪第三方资源的权重。使用性能标记来分析路由切换。避免阻塞主线程;如果需要,将复杂的逻辑拆分为 Web Workers。

28. 可靠性模式

优雅的降级:如果 JavaScript 失败,预渲染的 HTML 仍然会显示核心内容。对于 API 宕机,提供带有时间戳的缓存数据,并提供重试选项。超时和断路器防止 UI 卡死。实施全局错误边界,提供用户友好的消息和日志记录。

29. 案例研究模板

选择一个示例流程(例如:产品搜索/筛选/结算)。记录基准指标(LCP/INP/CLS、成功率、错误率)。应用 SSR、代码分割、无障碍修复和缓存。重新测量。在实施前后进行对比,以证明价值并获得投资。

30. 培训与文化

Run quarterly workshops on routing, state, a11y, performance, and SSR. Create internal guides with examples in your stack. Appoint SPA stewards per squad to review architecture and catch anti-patterns. Celebrate fixes that improve real user outcomes.

31. 治理与路线图

Maintain an SPA roadmap: migrations, dependency upgrades, design system releases, a11y/perf audit cadences. Review new third-party scripts through a perf/a11y lens. Require RFCs for major architectural shifts.

32. 确保未来适用性

关注趋势:React Server Components/Streaming SSR、可复用性(Qwik)、岛屿架构、部分预渲染、边缘渲染。在低风险的路线中进行测试,然后再逐步推广。保持代码模块化,以便在不进行重写的情况下,可以灵活地切换渲染策略。

如果经过精心设计并采取了适当的安全措施,SPA(单页应用程序)可以实现快速响应、易于爬取、安全可靠和易于访问。

33. 扩展的 SEO/SSR 检查清单

- 每一条路线在服务器端(或预渲染)生成具有独特标题/描述/OG/Twitter标签的有效HTML。
- 在相关内容(常见问题解答、产品、文章)中,请提供 JSON-LD 格式的数据。
- 规范链接集;用于不同语言版本的 hreflang 属性。
- 每次部署后,网站地图都会更新。
- 404/410 错误被正确处理;301 状态码已记录。
- 无哈希 URL;历史记录功能支持前进/后退。

验证 "查看源代码" 是否能显示内容,而不仅仅是根 div。 使用无头 Chrome 进行站内搜索,并检查索引性。

34. 易达性演练

在主要路线上进行键盘操作练习;确保导航时焦点集中在主要内容上;ARIA live 实时宣布关键路线变化;表单具有标签和错误摘要;模态窗口会捕获焦点;表格显示表头;轮播图暂停/停止;动画会尊重 prefers-reduced-motion 属性。

35. 带有功能标志的发布计划

根据路由组,启动 SPA 壳。逐步增加流量,监控错误率、核心 Web Vitals 和 SEO 指标。如果出现关键问题,提供服务器渲染页面的备用方案。与支持团队沟通变更。

36. 迁移日志和债务跟踪

追踪遗留的路线、依赖关系和阻碍迁移的因素。 维护一个债务清单(包括临时组件、缺失的 SSR、大型包以及无障碍性问题)。 每次迭代中,优先处理影响最大的债务。

37. 业务成果

报告在转化率、任务完成率、搜索结果页面表现、错误减少以及互动时间缩短方面的改进。将 SPA 工作与收入/客户保留指标对齐,以确保投资回报。

高效、可靠、易于查找且具有包容性的 SPA 才能发挥其价值。 或者,更强调“执行”和“回报”: 如果能够以有纪律的方式交付高质量的 SPA(即:快速、可靠、易于查找且具有包容性),它们就能真正发挥作用并带来回报。 选择哪个翻译取决于具体的语境和想要强调的重点。

SPA(软件开发生命周期)的卓越性,依赖于以下要素:定期审计、强制执行预算、易于获取的组件以及可衡量的结果。将“游戏规则”纳入入职培训,并每季度更新,以适应框架、设备和标准的变化。

持续改进:更快加载速度、更清晰的状态、更强大的安全性以及更友好的用户体验——一次又一次地发布。

38. 移动设备体验和输入

以下是翻译: 测试 SPA 流程,重点关注移动设备: * 点击目标: 至少 44x44 像素 * 手势替代方案: 提供多种手势操作 * 键盘打开/关闭行为: 确保键盘操作的流畅性 * 针对有刘海屏的设备: 确保虚拟键盘不会遮挡输入框;谨慎管理滚动到视图的行为。 * 优化: 针对粗糙的指针和有限的带宽,在移动设备上减少预取操作。 * 表单: 支持自动填充和密码管理器;确保一次性代码的粘贴操作流畅。 * 移动设备: 尊重减少动画和深色模式;避免过度模糊,以提高性能。 解释: * 我将原文进行了拆分,以便更清晰地表达。 * 我使用了更常用的中文表达,例如“点击目标”代替“tap targets”。 * 我添加了一些解释性的词语,例如“一次性代码的粘贴操作”,以确保理解。 * 我使用了更专业的术语,例如“虚拟键盘”和“深色模式”。 希望这个翻译对您有所帮助!

将来自电子邮件/广告的深层链接转换为特定的状态(例如,应用筛选器、模态框打开)。确保登录重定向将用户返回到预期的状态。如果使用应用内浏览器,请设置正确的 viewport meta、主题颜色,并且除非必要,否则避免使用 target="_blank"。

39. API 向后兼容性

以下是翻译: 版本API和逐步部署计划。 实现容错读取和严格写入: 优雅地接受旧版本字段,仅写入当前服务器版本所理解的字段。 在响应中包含服务器能力标志,以便SPA进行适应。 记录模式漂移和弃用情况;为SDK消费者提供迁移指南。 更详细的解释: * Version APIs and plan for gradual rollout: 版本API和逐步部署计划。 * Implement tolerant reading and strict writing: 实现容错读取和严格写入。 * accept older fields gracefully: 优雅地接受旧版本字段。 * write only fields understood by the current server version: 仅写入当前服务器版本所理解的字段。 * Include server capability flags in responses to allow SPA to adapt: 在响应中包含服务器能力标志,以便SPA进行适应。 * Log schema drift and deprecations: 记录模式漂移和弃用情况。 * provide migration guides for SDK consumers: 为SDK消费者提供迁移指南。 这个翻译力求准确、清晰,并使用了更常用的技术术语。

40. 事故响应

Prepare runbooks for SPA-specific outages: broken auth, routing loops, blank screens from bundle errors, CDN cache poison, or third-party failure. Keep error boundaries that surface meaningful messages and support contact. Allow remote feature kill and emergency reversion to server-rendered fallbacks if necessary.

跟踪前端故障的平均修复时间 (MTTR),并为每次解决的故障添加回归测试。进行混沌演练:阻止 API、降低网络速度、模拟过期证书,并验证应用程序在故障情况下能够优雅地降级。

41. 治理文物

记录关键决策: * 记录重要的架构决策,例如:路由策略、SSR 方案、状态库、设计系统采用、数据获取模式等。 * 维护 SPA 平台更新的变更日志(包括路由器升级、令牌更改、lint 规则等)。 * 发布一份“如何提出变更”的文档,以便团队在不破坏一致性的前提下,逐步改进平台。 解释: * 记录关键决策: 强调了记录重要架构决策的重要性。 * routing strategy, SSR approach, state library, design system adoption, data-fetching patterns: 直接翻译了英文术语。 * Maintain a changelog for SPA platform updates (router upgrades, token changes, lint rules): 解释了变更日志的用途,并列举了常见的更新内容。 * Publish a “how to propose changes” doc so teams evolve the platform without breaking consistency: 强调了通过文档指导团队,避免在平台演进过程中破坏一致性。 这个翻译力求准确、清晰,并使用了更符合中文习惯的表达方式。

投资于文档:包括启动模板、示例路由、数据获取模式、无障碍开发食谱、性能预算、日志记录规范和事件处理流程。 优秀的文档可以缩短学习时间,并避免因缺乏标准而产生的错误。

相关新闻