首页 > 解决方案 > 尝试优化 R Shiny App 加载时间的速度——缓慢的 googlesheets4 pull

问题描述

我目前正在开发一个 R Shiny 应用程序,该应用程序利用 googlesheets4 在应用程序启动时从 GoogleSheets 中提取一个大型数据集。将此数据集加载到我的应用程序需要大约 2 分钟,这会拖延我整个应用程序的加载时间。

我的应用程序中唯一的视觉对象是基于这个 GoogleSheets 数据,所以它非常依赖这个特定的数据集。一旦数据集被拉入我的应用程序,它就会被过滤,因此变得更小(85,000 行 ---> 1,000 行)。这个 GoogleSheet 数据每天都会更新,所以我没有机会预先下载一次并将其永久存储为 .csv。

我已经尝试过两种不同的修复方法,但都没有成功……好奇是否有人有任何想法。

  1. 运行一个单独的应用程序。我的第一个想法是完全创建一个单独的 Shiny 应用程序,其唯一目的是每天拉一次 GoogleSheets df。一旦它拉出它,它将进行必要的数据清理以将其降至约 1,000 行,然后将较小的 df 推送到不同的 GoogleSheet 链接。然后,我的带有视觉效果的原始应用程序将始终引用新的 GoogleSheet(加载时间会少得多)。

我在这里遇到的问题是我不知道如何使用 googlesheets4 编写新的 GoogleSheets 文档。如果有人知道如何做到这一点,将不胜感激。

  1. 暂时延迟 GoogleSheets 数据的加载,并让视觉首先填充。我的第二个想法是在启动时延迟拉入 GoogleSheets df 的代码,让我的视觉首先填充(使用旧数据),然后让 GoogleSheets 拉动发生。拉取完成后,让视觉对象重新填充更新的数据。

我想不出最好/正确的方法来实现这一点。我试着弄乱 sleep.sys() 和 futures/promises 但无法让事情正常工作。

好奇是否有人对我的两种不同方法有任何想法,或者是否有更好的方法我只是没有考虑......

谢谢!

标签: rdataframegoogle-sheets-apishinydashboardgooglesheets4

解决方案


有一个函数write_sheet可以让你将数据写入谷歌表格。那对你有用吗?

googlesheets4::write_sheet(data = your_data,
                           ss = spread_sheet_identifier,
                           sheet = "name_of_sheet_to_write_in")

如果您只想添加一些内容而不删除工作表中的所有内容,则该功能是sheet_append

googlesheets4::sheet_append(data = your_data,
                           ss = spread_sheet_identifier,
                           sheet = "name_of_sheet_to_write_in")

不确定您是否可以以保存方式存储凭据,但您不能使用 github 操作吗?或者在您的本地计算机上执行一项 cron 作业?


推荐阅读