开发高能效软件

Last reviewed 2026-01-28 UTC

Well-Architected Framework 的可持续性核心中的这一原则提供了相关建议,可帮助您编写能够最大限度地减少能源消耗和 服务器负载的软件。Google Cloud

政策概览

当您遵循最佳实践来构建云应用时,可以优化云基础架构资源(AI、计算、存储和网络)所使用的能源。您还可以帮助减少数据中心的水资源需求,以及最终用户设备在访问您的应用时消耗的能源。

如需构建节能软件,您需要在整个软件生命周期(从设计和开发到部署、维护和归档)中融入可持续性考虑因素。如需详细了解如何使用 AI 构建能够最大限度地减少云工作负载对环境的影响的软件,请参阅电子书《可持续地构建软件》。 Google Cloud

建议

本部分中的建议按以下重点领域分组:

  • 最大限度地减少计算工作: 倾向于使用精简、专注的代码,以消除冗余逻辑并避免 不必要的计算或功能膨胀。
  • 使用高效的算法和数据结构: 选择能够减少 CPU 负载的时效性算法和内存高效型算法 并最大限度地减少内存用量。
  • 优化计算和数据操作: 以高效使用所有可用资源( 包括 CPU、内存、磁盘 I/O 和网络)为目标进行开发。例如,当您将繁忙循环替换为事件驱动型逻辑时,可以避免不必要的轮询。
  • 实现前端优化: 如需减少最终用户设备消耗的电量,请使用 最小化、压缩和 延迟加载等策略 对图片和素材资源进行处理。

最大限度地减少计算工作

如需编写节能软件,您需要最大限度地减少应用执行的计算工作总量。每条不必要的指令、冗余循环和额外功能都会消耗能源、时间和资源。请按照以下建议构建执行最少计算的软件。

编写精简、专注的代码

如需编写实现所需结果所必需的最少代码,请使用以下方法:

  • 消除冗余逻辑和功能膨胀:编写仅执行必要功能的代码。避免使用会增加计算开销和复杂性但不会为用户提供可衡量价值的功能。
  • 重构:如需随着时间的推移提高能效,请定期审核您的 应用以识别未使用的功能。采取适当措施来移除或重构此类功能。
  • 避免不必要的操作:在需要结果之前,请勿计算值或运行操作 。使用 延迟求值等技术, 将计算延迟到应用中的依赖组件 需要输出时再进行。
  • 优先考虑代码可读性和可重用性:编写 可读且可重用的代码。这种方法可以最大限度地减少重复,并遵循 “ 不要重复自己”(DRY) 原则, 这有助于减少软件开发和 维护过程中的碳排放量。

使用后端缓存

后端缓存可确保应用不会重复执行相同的工作。缓存命中率越高,每次请求的能源消耗量减少的幅度就越接近线性。如需实现后端缓存,请使用以下技术:

  • 缓存常用数据:将经常访问的数据存储在临时的高性能存储位置。例如,使用内存缓存 服务(如 Memorystore)。 当应用从缓存中检索数据时,数据库查询和磁盘 I/O 操作的量会减少。因此,后端数据库和服务器的负载会降低。
  • 缓存 API 响应:如需避免冗余且代价高昂的网络调用, 请缓存频繁 API 请求的结果。
  • 优先考虑内存缓存:如需消除缓慢的磁盘 I/O 操作 和复杂的数据库查询,请将数据存储在高速内存 (RAM) 中。
  • 选择适当的缓存写入策略
    • 透写策略可确保数据同步写入缓存和永久性存储。 此策略会提高缓存命中的可能性,因此永久性存储会收到较少的能源密集型读取请求。
    • 回写(后写)策略可提升写入密集型应用的性能。数据首先写入缓存,然后数据库稍后异步更新。此策略可减少较慢数据库上的即时写入负载。
  • 使用智能逐出策略:保持缓存精简高效。如需移除过时或低效的数据,并最大限度地增加可用于频繁请求的数据的空间,请使用存留时间 (TTL)、最近最少使用 (LRU) 和最不常用 (LFU) 等策略。

使用高效的算法和数据结构

您选择的算法和数据结构决定了软件的原始计算复杂性。当您选择适当的算法和数据结构时,可以最大限度地减少完成任务所需的 CPU 周期数和内存操作数。CPU 周期数和内存操作数越少,能源消耗就越低。

选择具有最佳时间复杂度的算法

优先考虑在最短时间内实现所需结果的算法。这种方法有助于缩短资源使用时长。如需选择能够优化资源使用情况的算法,请使用以下方法:

  • 专注于降低复杂性:如需评估复杂性,请考虑 运行时指标之外的因素,并考虑算法的理论复杂性。 例如,与 冒泡排序相比, 归并排序 可以显著减少 大型数据集的计算负载和能源消耗。
  • 避免冗余工作:在您 选择的编程语言或框架中使用内置的优化函数。这些函数通常以较低级别且更节能的语言(如 C 或 C++)实现,因此与自定义编码的函数相比,它们针对底层硬件进行了更好的优化。

选择高效的数据结构

您选择的数据结构决定了检索、插入或处理数据的速度。此速度会影响 CPU 和内存用量。如需选择高效的数据结构,请使用以下方法:

  • 针对搜索和检索进行优化:对于常见操作(例如 检查项是否存在或检索特定值),请优先使用针对速度进行了优化的数据 结构。例如,哈希映射或哈希集支持近乎恒定的时间查找,这比线性搜索数组更节能。
  • 最大限度地减少内存占用空间:高效的数据结构有助于减少 应用的总体内存占用空间。减少内存访问和管理有助于降低功耗。此外,更精简的内存配置文件可让进程更高效地运行,从而让您能够推迟资源升级。
  • 使用专用结构:使用 专门针对特定问题构建的数据结构。例如,使用 Trie 数据结构进行快速字符串前缀搜索,并在您需要高效访问最高值或最低值时使用优先级队列 。

优化计算和数据操作

在开发软件时,请专注于在整个技术堆栈中高效且按比例使用资源。将 CPU、内存、磁盘和网络视为有限的共享资源。认识到高效使用资源可以显著降低成本和能源消耗。

优化 CPU 利用率和空闲时间

如需最大限度地缩短 CPU 在执行有意义的工作时处于活跃、耗能状态的时间,请使用以下方法:

  • 优先考虑事件驱动型逻辑而非轮询:将资源密集型 繁忙循环或持续检查(轮询)替换为事件驱动型逻辑。事件驱动型架构可确保应用的组件仅在相关事件触发时才运行。这种方法支持按需处理,从而无需进行资源密集型轮询。
  • 防止持续高频率运行:编写不会强制 CPU 以最高频率持续运行的代码。如需最大限度地减少能源消耗,空闲系统应能够进入低功耗状态或休眠模式。
  • 使用异步处理:如需防止线程在 空闲等待期间被锁定,请使用异步处理。这种方法可以释放资源,并提高总体资源利用率。

高效管理内存和磁盘 I/O

低效的内存和磁盘使用会导致不必要的处理和功耗增加。如需高效管理内存和 I/O,请使用以下技术:

  • 严格的内存管理:采取行动主动释放未使用的 内存资源。避免在内存中保留大型对象的时间超过必要时间。这种方法可以防止性能瓶颈,并减少内存访问所消耗的电量。
  • 优化磁盘 I/O:减少应用与永久性存储资源的读取和写入交互的频率。例如,使用中间内存缓冲区来存储数据。以固定时间间隔或在缓冲区达到一定大小时将数据写入永久性存储。
  • 批量操作:将频繁的小型磁盘操作整合为 较少的大型批量操作。与许多单独的小型事务相比,批量操作消耗的能源更少。
  • 使用压缩:通过应用适当的数据压缩技术,减少写入磁盘或从磁盘读取 的数据量。例如, 如需压缩存储在 Cloud Storage 中的数据,您可以使用 解压缩转码

最大限度地减少网络流量

网络资源在数据传输操作期间会消耗大量能源。 如需优化网络通信,请使用以下技术:

  • 最大限度地减少载荷大小:将 API 和应用设计为 仅传输请求所需的数据。避免在只需要几个字段的情况下提取或返回大型 JSON 或 XML 结构。确保返回的数据结构简洁明了。
  • 减少往返次数:如需减少完成用户操作所需的网络往返次数,请使用更智能的协议。例如,优先使用 HTTP/3 而不是 HTTP/1.1,选择 GraphQL 而不是 REST,使用二进制协议,并整合 API 调用。当您减少网络调用量时,可以减少服务器和最终用户设备的能源消耗。

实现前端优化

前端优化可以最大限度地减少最终用户必须下载和处理的数据,这有助于减少最终用户设备资源的负载。

最大限度地减少代码和素材资源

当最终用户需要下载和处理更小、结构更高效的资源时,其设备消耗的电量会更少。如需最大限度地减少最终用户设备的下载量和处理负载,请使用以下技术:

  • 最小化和压缩:对于 JavaScript、CSS 和 HTML 文件, 请使用 适当的最小化工具移除不必要的字符(例如空格和注释)。确保图片等文件经过压缩和优化。您可以使用 CI/CD 流水线自动执行 Web 素材资源的最小化和压缩。
  • 延迟加载:仅在实际需要时加载图片、视频和非关键素材资源,例如当这些元素滚动到 网页视口中时。这种方法可以减少初始数据传输量和最终用户设备的处理负载。
  • 更小的 JavaScript 软件包:使用现代模块打包器和摇树(优化)等技术,从 JavaScript 软件包中消除未使用的代码。 这种方法可以生成更小的文件,这些文件加载速度更快,使用的服务器资源更少。
  • 浏览器缓存:使用 HTTP 缓存标头指示用户的 浏览器在本地存储静态素材资源。浏览器缓存有助于防止在后续访问时重复下载和产生不必要的网络流量。

优先考虑轻量级用户体验 (UX)

用户界面的设计可能会对呈现前端内容的计算复杂性产生重大影响。如需构建提供轻量级 UX 的前端界面,请使用以下技术:

  • 高效呈现:避免资源密集型、频繁的 文档对象模型 (DOM) 操作。编写能够最大限度地减少呈现复杂性并消除不必要的重新呈现的代码。
  • 轻量级设计模式:在适当的情况下,优先使用静态网站 或 渐进式 Web 应用 (PWA)。 此类网站和应用加载速度更快,所需的服务器资源更少。
  • 无障碍功能和性能:响应迅速、加载速度快的网站 通常更具可持续性,也更易于访问。经过优化、简洁的设计可以减少呈现内容时消耗的资源。针对性能和速度进行了优化的网站有助于提高收入。根据德勤和 Google 的研究报告 《Milliseconds Make Millions》 ,网站速度提升 0.1 秒(100 毫秒)可使零售网站的转化率提高 8.4% ,平均订单价值提高 9.2% 。