我正在开发一个网络应用程序,该应用程序应该在世界任何地方实时显示陆地交通。几个月来,我一直在使用JavaScript和OpenLayers(http://www.openlayers.org)框架开发它。
不幸的是,这种解决方案似乎效率低下。地图上有数百(200-300)个对象每隔几分钟更新一次。刷新和渲染它们的纯粹操作需要花费大量的时间 应用程序不太可用(对用户操作的响应速度慢)。
目前我正在考虑改变这项技术。 Adobe Flex似乎是最合理的解决方案。至少有一个写在其中的应用程序与我的相似(http://casper.frontier.nl/)。
但是,我对Flex有几个担忧:
有人可以解决这些问题吗?
答案 0 :(得分:1)
在现代浏览器(例如,IE7或更高版本)上运行的JavaScript应该能够轻松地每隔几分钟处理200或300个对象更新。当然,如果你想同时进行所有300次更新,事情可能会变得有点慢。但如果这些更新在这段时间内发生,那么你应该没有任何麻烦。
使用JavaScript编写的小行星游戏和3D射击游戏非常可玩。他们每秒进行数十次更新。
我怀疑你的框架(我对OpenLayers一无所知)或者在我怀疑平台之前你做更新的方式。
我对Flash的体验不那么积极。虽然它可以与JavaScript互操作,但是有一些奇怪的边缘情况会让你失望。而我的经验是,除非你所做的事情真的微不足道,否则几乎不可能不会超越这些边缘情况。当然,iPad和iPhone上缺乏Flash支持将无法支持这些平台。
我认为Flash不太可能很快被放弃,因为有太多的客户继续相信Flash是构建交互式Web应用程序的愚蠢概念。尽管四年前几乎可以肯定这一点,但是浏览器,计算机和JavaScript技术已经发展到我目前对Flash的唯一用途就是播放视频。当HTML5视频变得更加普及时,这种用途将在未来几年内消失。借助Google的WebM视频格式和构建WebM的预期高质量工具,除了较旧的内容外,Flash几乎与电影播放器无关。
我的建议是长时间仔细研究您当前的实现,研究一些经常更新的其他JavaScript应用程序,并确定它是否真的是平台而不是您使用它导致性能问题的方式
答案 1 :(得分:1)
我已经使用Google Maps JavaScript API +自定义画布图块图层(请参阅here和here)来绘制带有10k +标记的地图,非常快。也许您只需要重新考虑您的特定方法,而不是完全重写您的地图。
答案 2 :(得分:0)
不知道你可以在js中管理和更新多少个对象,但在我的公司(flashmaps.com)中,我们已经构建了处理数千个对象的基于闪存的地图。事实上,许多情况下的关键问题是地图与标记完全重叠。我们建议在这些情况下过滤标记。我们在构建基于flash / flex的地图方面拥有丰富的经验,因此我们可以毫不犹豫地向我提出任何问题。
顺便说一句,我认为Flash不会很快失效。 Apple控制iPhone / iPad应用程序的策略(Flash禁止背后的真正原因)给Web开发人员带来了很多麻烦,他们需要为这些设备创建特定版本的网站,这很疯狂。但是我确信苹果公司有一天会允许使用Flash ......可能当许多其他平板电脑上街支持Flash时。走着瞧。
答案 3 :(得分:0)
关于MVC架构的一个很棒的事情是,只要您将域逻辑与业务逻辑和UI分开,那么创建访问相同数据的特定于平台的应用程序就相对容易了。例如,您可以构建相同的UI以在Web浏览器(通过html / javascript或flash播放器),桌面(通过Air)和iPhone / iPad(通过iOS)上运行,这些UI都连接到同一台服务器边脚本。选择哪个平台都是个人选择的问题。如果一个平台在未来变得不合时宜,那么您只需在另一个平台上创建一个新UI。