我的主页有几个部分显示我的健康和活动数据。它由每天上午 9 点在我的 iPhone 上运行的快捷方式提供支持。我从 Apple Health 查询数据,然后通过 GitHub 操作触发部署。
这种方法效果很好,直到我在夏季开始进行更多锻炼。捷径的运行时间越来越长,不久之后就开始遇到许多问题。随着时间的推移,它变得越来越慢,有时从上午 9 点跑到下午。这会损坏我手机的电池并使设备长时间发热。最终,大多数时候它都会抛出错误。
最初,当我构建快捷方式时,它会在大约 10 分钟内运行。这看起来可以接受,所以我没有花任何精力去优化它。我的假设是查询的样本太多,只是需要很长时间才能返回任何数据。但只要偶尔能完成一次,我就很高兴,所以我就不再去想这个问题了。
我的快捷方式被分解为几个单独的快捷方式来收集每条数据,然后主快捷方式将这些数据传输到我的网站。每个快捷方式的一般格式是收集过去 30 天内的样本,然后对结果求和。 (例如获取过去 30 天内的步数、获取过去 30 天内骑行的距离等)
本月早些时候,罗布认识几个提供优化快捷方式服务的人,在办公室里开始了一场对话。我提到了我的问题,我们简要地了解了我的快捷方式在运行时正在做什么。我对健康样本查询需要很长时间的假设是错误的,这在几秒钟内就完成了。奇怪的是,耗时的部分是对样本进行求和。
这是因为样本是短时间内活动的快照。一天之内就会添加数百个样本。因此,循环这些样本来求和是需要时间的,这是可以理解的。
解决这个问题的方法很简单,减少来自 Apple Health 查询的结果数量。为此,您可以对结果进行分组,我选择按天分组,将结果减少到 30。这极大地提高了性能,现在不到 5 秒
现在,收集我的健康数据并部署我的网站只需不到 1 分钟。我的手机电池电量更充足,我可以随时部署我的网站。