【问题标题】:google earth fetchKml timeout谷歌地球 fetchKml 超时
【发布时间】:2012-07-23 07:22:01
【问题描述】:

我正在通过 javascript 调用 goolge earth api 函数“fetchKml”。获取大文件时,firefox 给我一个弹出窗口,上面写着“此页面上的脚本可能正忙,或者它可能已停止响应。您可以立即停止脚本,在调试器中打开脚本,或让脚本继续运行。”

我注意到关于 google groups issue 331 的类似问题('fetchKml 在较慢的连接或快速连接和大型 KML/KMZ 文件时失败')。唉 - 这个问题是在 2009 年。现在是 2012 年。我如何在不出现超时问题的情况下以编程方式加载文件?

谢谢。

【问题讨论】:

标签: timeout kml large-files google-earth-plugin


【解决方案1】:

根本原因是fetchKml 是同步的。在通过网络获取、解析 KML 文件并将其指定的内容加载到插件中之前,它将一直阻塞。如果其中任何一个步骤耗时过长(服务器响应慢、文件很大、内容过于复杂)等函数调用耗时过长,则会触发浏览器中的慢脚本警告,通常只是在一个简单的基于时间的看门狗循环上触发。

有几种方法可以解决这个问题:

  • 最简单的方法是将您的内容分成几个独立的 KML 文件并加载每个文件,可能会产生 setTimeout in 在每个fetchKml() 通话之间。如果您的主要问题是,这将无济于事 延迟,但既然你说这发生在大型 KML 文件中, 这可能不是这里的情况。

  • 惯用的方法是在您的 KML 中使用 NetworkLinks 来加载 这些其他文件。第一个fetchKml 调用将是同步的,但是 然后(取决于update mechanism is set)后续 内容将由插件在自己的时间加载,无需 阻塞 javascript 执行线程。

  • 最后,还有一种“亲自动手”的方式。你可以 使用浏览器的原生 XMLHttpRequest 功能加载 KML 文件,默认情况下是异步的。加载文件时,您的 回调函数将被通知,然后你可以使用 parseKml() 在插件中加载该文件并显示其 内容。注意parseKml也是同步的,所以会阻塞 在解析文件并创建内容时,但通常 与在 第一名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2013-11-16
    • 2014-12-18
    相关资源
    最近更新 更多