【问题标题】:How to dynamically update a page served by a Web App? [duplicate]如何动态更新 Web App 提供的页面? [复制]
【发布时间】:2013-11-06 14:39:24
【问题描述】:

我正在开发一个使用谷歌应用脚​​本和电子表格作为存储的网络应用程序。

基本上,一个 HTML 显示不同选项卡的一些表格。

在我的应用中,用户可以添加新任务、编辑任务以及将任务标记为已完成。 由于有很多用户使用该应用程序,每个客户端上显示的数据很快就会过时。

我想尽快用新记录和对现有记录的更改来更新应用程序。

我想在单元格中记录最后一个编辑选项卡+行并每分钟从服务器中提取该数据,但是,如果在那一分钟内添加/编辑了许多条目怎么办?

我认为 WebSocket 是不可能的。还有什么想法吗?

我正在使用 JQuery 客户端。

【问题讨论】:

  • 你能把你应用的代码贴出来吗?代码胜于雄辩
  • 项目很大,可以在这里发布。我将尝试建立一个小例子。无论如何,我不是在寻求帮助来修复我的代码,我需要一个建议来做或者我应该如何做。
  • 我在电子表格上实现了一个任务跟踪器,不需要网络应用程序。
  • 你好,弗雷德。你能再具体一点吗?截图之类的。非常感谢。

标签: google-apps-script polling


【解决方案1】:

除了轮询之外别无他法。您不能有来自 HTML 服务的套接字或回调。您可以经常轮询,但这可能会耗尽您的配额。 如果您真的想轮询并避免配额,您可以在已发布的公共电子表格上记录最后一次编辑,并使用 ajax 从客户端读取它,但已发布的电子表格仅每分钟更新一次。

【讨论】:

  • 这听起来不错。我将在公司 google 域中运行它。如何将公共电子表格管理为仅在我的公司域内可用?配额是否适用于这种情况?谢谢你的回答。
  • 我查看了配额,但没有发现任何与最大服务器调用相关的内容。哪个配额适用?
  • 如果您使用已发布(不仅仅是公开)的电子表格,您将不会遇到配额问题。但是一旦发布,您就无法阻止它向所有人公开。
  • 好的,谢谢您的解释。无论如何,脚本将作为访问的用户执行。也许这样我可以避免配额问题?我还没有找到与服务器调用次数相关的任何信息。你有什么参考吗?
  • 通过以用户身份执行,您将避免或减少配额问题。
【解决方案2】:

为帮助避免冲突,请为每个任务指定一个唯一 ID。诸如创建时间+随机字符串之类的东西。这样您就可以在电子表格中查找它。另外,我认为锁定服务可以暂时阻止并发编辑以避免冲突: https://developers.google.com/apps-script/reference/lock/

要检查更新,请尝试轮询电子表格的上次编辑时间。如果它大于之前的轮询,则获取更新。 https://developers.google.com/apps-script/reference/drive/file#getLastUpdated()

【讨论】:

  • 感谢您的回答。我想在 Lock Service 中,但谷歌的参考对我来说不够清楚。你有什么参考吗? getLastUpdate 听起来不错。将它与任务 ID 结合使用,我可以向服务器发送客户端拥有的任务列表,它可以回复那些他们没有的任务。我认为每分钟检查一下页面是否有焦点就足够了。
  • 不,我从来不需要使用锁服务,所以我不知道它的效果如何。
【解决方案3】:

你可以试试这样的:

var lock = LockService.getPublicLock();
var success = lock.tryLock(10000);
if (success) {
// check your spreadsheet for lastUpdated or PropertiesService.getScriptProperties();
}
} else {
// do something else (try it again or error msg)
}
lock.releaseLock(); 

我发现它在我的应用上运行良好,我有大约 1000 个用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2014-11-12
    • 2023-03-24
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多