【发布时间】:2018-10-29 09:28:21
【问题描述】:
上下文:我正在开发一个 web 应用程序,它必须显示一些相当复杂且不断更新(每秒多次)的 SVG 图像。更新来自一个单独的服务器,一旦 Web 前端收到更新,SVG 就会更新。 webapp 是用Scala.js 编写的,图像是使用d3js 库创建的(另请参见:scala-js-d3)。我们目前只支持谷歌浏览器。
问题:一旦 web 应用程序在后台选项卡中停留了一段时间,一旦再次导航到整个站点就会变得无响应。根据应用程序在后台运行的时间长短,应用程序有时需要长达 20 秒才能再次响应。有什么办法可以解决吗?
【问题讨论】:
-
您是使用 setInterval()/setTimout() 作为更新机制还是使用 requestAnimationFrame()?
-
无意冒犯,但这听起来更像是您的应用程序的设计缺陷。您确定需要在后台进行计算/渲染吗?看看谷歌关于处理后台标签的公告:Background Tabs in Chrome 57。您还可以查看 WebWorkers 或 ServiceWorkers 以将工作卸载到后台处理。
-
我会在收到更新后立即更新 SVG(由可视化服务器发送)。我既没有使用
setInterval()/setTimout()也没有使用requestAnimationFrame(),但我会调查这些。很确定这是我的应用程序的设计缺陷,因为我对一般的 Web 开发并不熟悉。然而,这个应用程序只能在工业 PC 上运行,而不是连接到互联网(至少目前是这样)。
标签: javascript scala google-chrome web d3.js