2

这是我的 Shiny 应用程序的源代码,当 UI 输入发生任何更改时,它会绘制台湾 350 多个城镇的多边形。城镇的价值每次都会根据投入而变化,因此几乎没有机会做leafletProxy。然而,我现在遇到了性能问题,尤其是在 Shiny Server 上。

您可以尝试在本地运行该应用程序。在 UI 中更改选项后,地图将在 10 秒后显示。但是,在 Google Compute Engineshinyapps.io上部署的应用程序需要更长的时间(大约 30 秒)来描绘地图,不仅在初始化应用程序时,而且每次更改输入时也是如此。此外,Shiny Server 在计算过程中经常断开连接,如下所示:

应用断开连接

当断开连接发生时,/var/log/shiny-server.log告诉我:

[INFO] shiny-server - 获取工作者时出错:错误:应用程序在初始化期间退出。

,这在本地从未发生过。

这对我来说没有任何意义。我的笔记本电脑怎么可能击败服务器?我的笔记本电脑是 MacBook Air(2015 年初),只有 1.6 GHz 英特尔酷睿 i5 和 8 GB 1600 MHz DDR3,而 Google Compute Engine 上的虚拟机即使有 4 个 vCPU 和 15 GB RAM,性能也很差。

我怎样才能找出 Shiny Server 性能变差的原因,或者重构我的代码?


可以相关:Leaflet R performance issues with large map

4

1 回答 1

0

首先,预处理在闪亮的应用程序中没有位置。为什么每次有人使用该应用程序时都重复一些事情,因为它可以完成一次,然后可以加载保存的产品。

我会看看以下步骤:

  1. 删除任何可以在外部完成的事情(例如 Ln 12 - 37)
  2. 简化多边形以使文件更小(加载更快,执行一次并加载到产品中)
  3. 您生成的任何重复完成的内容(标签等),执行一次并保存在列表中(例如metadata.rds)并读取一次并参考。

有时看起来你的应用程序在本地运行得更快,因为你在开发时实际上并没有重新启动会话——Shiny 基本上是为每个用户启动一个会话(有点)。

于 2018-05-13T04:54:31.150 回答