"折返"可能不是正确的术语,但我认为它很接近。
如果我与另一个用户共享一个脚本,并且我们同时执行它,那么我们是否覆盖了其他每个变量?,或者这两个执行是否发生在完全不同的内存空间中?
我在哪里可以读到这个?
如果重入是错误的术语,那么正确的是什么?
更新14/10/03 o9:45美国东部时间: 我不认为这可以提出一个新问题。
我从Serge和Henrique那里了解到,单独的执行是"线程安全的"并且对共享资源的操作需要保护,大概是Lock Service。
我正在努力决定如何合理化我目前的特别策略"。我有一个Web应用程序,它使用电子表格来跟踪许多设置,包括查询另一个大型电子表格中的短名单数据。我与另一个用户共享副本,然后是另一个用户现在我有一堆电子表格和脚本副本来跟踪。 (它以这种方式发展 - 不要问)。我不想失去"本地缓存"电子表格,但我确实希望避免不必要地共享线程安全脚本的多个副本。
我正在考虑一个集中查找表,它将本地缓存电子表格与给定用户配对,但它真的开始看起来我应该用BigQuery或一些更严重的存储重写整个事物。这看起来比它的价值更多的努力。
任何建议都将不胜感激。
更新14/10/03 12:15美国东部时间:
最初WebApp包含在电子表格中,但我将其移出,因此它们一起共享。增加疯狂。我现在有一个脚本,它使用DriveApp创建目录,与用户共享,复制电子表格和脚本以及其他一些内容。实际上为了安全起见,除了WebAppScript之外,我还有WebAppScriptProxy,它发布了WebAppScript的公共函数。那是用户与之交互的内容。
答案 0 :(得分:3)
不仅是你和另一个用户,还有你和你自己在两个不同的函数调用之间(例如但不仅仅是)2个浏览器窗口......
这就是为什么您无法在Google Apps脚本中使用全局变量的原因:每次执行任何函数时,所有全局变量都会重新初始化,并且只能在此范围内使用函数调用(以及在中执行的任何函数调用。
请记住,这当然只适用于脚本变量,显然不适用于文档或其他永久存储位置(例如属性),其中同时执行肯定会通过相互覆盖来创建并发问题。
答案 1 :(得分:3)
它位于完全不同的记忆空间中。
我不认为“reentrant”是这里最准确的术语,因为一个人的代码没有中断来运行另一个人的代码。它们都是同时安全地发生的。我不确定正确的用语是什么。我想你可以说整个环境是“线程安全的”,因为它们在不同的线程/进程中执行,并且没有共享变量。
您只需要处理共享资源,例如常见的电子表格或文档属性等。
- 修改
很难理解你的设置,但无论如何我会建议一种方法。首先,我建议您只有一个脚本,并且只与用户共享其部署的URL(而不是脚本本身)。关于使用Spreadsheet和BigQuery,建议不要对BigQuery提出建议。如果您有这方面的知识并愿意使用它,那就去吧。但我认为你可以使用Google表格解决问题,因为它继承了并发性质,这是一个非常好的简单脚本数据库。
最重要的是,只与您的用户分享您必须拥有的内容并将其他所有内容隐藏起来。对他们来说这对你来说更简单。例如,如果他们不需要手动编辑“本地缓存”电子表格,那么请与他们共享。同样,如果他们需要的是访问您的网络应用程序的链接,那么不要让它变得更复杂。
答案 2 :(得分:0)
我倾向于认为脚本更接近老式的CGI脚本,用Perl,Python,Bash等编写。只有这次它是用JavaScript编写的。
每次访问服务器时,Web服务器都会从头开始启动新版本的脚本。
它有点发烧友,因为它有一个漂亮的框架,用来来回移动信息。但这就是它。