1

恐怕我正在开发的产品本质上充满了深奥的客户敏感内容,以至于我无法将问题场景有意义地简化为可复制的示例,因此这对领域专业知识和洞察力很有吸引力,基于以下内容代码:

http://jsbin.com/barney/1/edit

(使用 jQuery、Underscore、Mustache、一些插件,当然还有 Google Maps v3 JS API)

我正在使用 Google Maps JS API 来生成一个相对简单的网络应用程序。到目前为止,它所做的只是创建一个自定义内容InfoWindow,并在用户单击自定义内容时动态更改内容MarkerImage。使用样式器使地图不饱和。

当我单击这些自定义标记之一时,该过程将间歇性地(无法可靠地重现)完全冻结。我在代码的第一行立即有一个断点event.addListener——我的代码第一次在通常的堆栈中被命中——但这个过程永远不会到达那里:当我到达那里时,一切都被冻结了。

4 次标记点击通常可以解决问题,但其他时候应用程序会毫不费力地运行整个 UX。

附加信息,我的头顶:

  • 我有几个委托给主体的 jQuery 点击事件(不是这些在可观察堆栈中触发);
  • 单独放置 5 分钟左右,这个应用程序无论如何都会冻结,所以我怀疑我在不知不觉中默默地滥用 Maps API。

对于这种情况的陷阱的任何建议将不胜感激。

4

1 回答 1

1

通过从 Google Maps DOM 结构的祖先元素中移除 CSS3 过渡,上述所有问题都得到了解决,该元素translate3d(0)用作强制 GPU 加速动画的 hack。离奇但真实。来自 Webkit 中明显不相关的性能问题的轶事 证据transition表明,将s 应用于translate3d'd 有各种未发现的内存泄漏问题。奇怪的是,考虑到传统观点认为将 translate3d 应用于转换是一种缓解 CPU 性能占用的方法!

于 2012-09-28T10:11:57.817 回答