【问题标题】:CesiumJS memory management issuesCesiumJS 内存管理问题
【发布时间】:2015-04-28 08:24:14
【问题描述】:

我正在用 cesiumjs 制作一个 3d 模型 viwer。 geojson 是从 url 请求的,它适用于小型模型。如果复杂的 json 多面体文件和 json url 请求数据超过 16mb,铯在解析和渲染时需要很长时间,如果我调用另一个模型,它会使 Web 浏览器崩溃,并出现内存不足的错误。我在旁边检查了 chrome,它从 url 占用了大约 900 个内存来获取 16mb geojson。有没有更好的内存管理方法?或任何提示如何解决这个问题。一种解决方案可能是在发送该模型的geojson之前进行3d网格简化,但我要求与客户端的内存管理有关。

【问题讨论】:

    标签: javascript json geojson cesium


    【解决方案1】:

    请记住,部分时间是浏览器在 16 兆字节的文件上运行 JSON.parse。这是所有浏览器中的同步操作,在浏览器添加异步 JSON 解析之前,任何人都无能为力。我建议的第一件事是在服务器上通过TopoJSON 运行 GeoJSON,这样可以显着节省大小。这将减少传输时间和 JSON.parse 时间。我还可以确定您的服务器正在压缩您的数据,这将进一步节省费用。我已经看到使用这些技术可以将 16MB 的文件压缩到一个兆以下。

    话虽如此,这只是问题的第一部分。真正的问题不是 GeoJSON 有多大,而是它有多少功能?如果它是一个 16MB 的文件,具有约 15000 个功能,那么我的上述建议将解决您的问题。如果它有成千上万个功能,那么您将遇到一些不容易解决的问题。实际上,我昨天在我们的邮件列表中提供了一些关于此的详细信息:https://groups.google.com/d/msg/cesium-dev/F6IkY9aEG1I/8dRkhlBnLI4J

    我们一直在寻找优化和进一步改进 Cesium 的方法。如果可以,请随时联系我们的邮件列表并提供一些大型样本数据,以便我们在未来优化时将其用作一个很好的用例。

    【讨论】:

    • Google earth web api KML 非常流畅地处理相同的数据,并且永远不会耗尽内存,因此 google earth 正在死去,所以我们必须转向 Cesium,是的,它比 google earth web 插件快得多加载需要时间,但是当数据加载时它比谷歌地球更流畅,但谷歌地球的好处是我可以同时处理更多的 kml,即使大小为 96mb 和更多这样的文件,但速度较慢。当然我会参加邮件列表!谢谢,我将探索 TopoJSON
    • 顺便说一句,我在哪里可以分享该组的信息?
    • Google 地球是一个原生 C++ 应用程序(这就是它需要插件的原因),并且可以更轻松地暴力破解大型数据集。由于 Cesium 是纯 JavaScript,因此具有良好的性能变得更具挑战性。不要误解我的意思,Cesium 在负载方面有很大的优化空间,我们会做到的,这只是一个更难解决的问题。
    • 您可以从我们的网站cesiumjs.org/forum.html 或Google 网上论坛主页groups.google.com/forum/#!forum/cesium-dev 向论坛发帖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2011-01-07
    • 2016-10-20
    • 2011-04-11
    相关资源
    最近更新 更多