我创建了一个Drupal网站,它使用Openlayers来显示地图。在其中一个地图中,有一些“过滤器”,用户可以使用它们来动态更改地图中显示的数据。与各国相关的数据显示为各国的泡沫。使用Openlayers的API绘制气泡。选择过滤器时,会在场景后面进行大量计算。我使用了setTimeout来避免长时间运行的循环。过滤器工作正常。但是,在单击多个过滤器后(例如,如果单击12个过滤器),如果用户尝试通过单击链接移动到另一个页面,则在IE7和IE8中显示以下错误 -
“停止运行此脚本?
此页面上的脚本导致您的网络浏览器运行缓慢。 如果它继续运行,您的计算机可能会无响应。“
此错误不会在任何其他浏览器中显示,并且在单击链接之前不会显示在IE7中。这方面的任何指针都将受到高度赞赏。
更新:问题出在OpenLayers的事件缓存中。 OpenLayers在窗口卸载事件中清除事件缓存,这在IE7和IE8中陷入困境(我不知道为什么)。到目前为止,我已经能够在用户单击另一个链接时通过单击普通链接调用OpenLayers.Event.unloadCache()来解决问题。
答案 0 :(得分:5)
jQuery可能非常昂贵。链接下面的文章为您提供了10个良好的建议,以更好地执行您的jQuery应用程序。对我来说最有用(我一个月前遇到同样的问题)是用传统的lops替换$ .each()并用jquery模板替换大量的DOM构造。还使用ID而不是类,并为选择器,选择器缓存等提供上下文。
此列表是根据建议中的“有用性”标准订购的。
答案 1 :(得分:0)
您需要优化客户端脚本。请参阅答案here.