在DOM中存储500个标记对象的最佳方法

时间:2014-11-11 14:34:16

标签: php jquery google-maps here-api

我正在实施诺基亚/谷歌地图,我必须在其中存储500个标记。我通过循环遍历php数组并使用数据属性将其放入无序列表中来接收信息(名称,lat,lon,markergroup和image)。然后我使用jQuery循环遍历这些li元素并用标记信息填充地图。

这个工作正常但是在dom中有一个包含500个隐藏元素的列表似乎对我来说是性能问题的开销。

在将标记直接插入地图之前,使用内联javascript结合php元素,这对我来说是一个不好的做法,因为我必须在不同的情况下使用地图,而且我有很多重复的代码。

现在有一个更好的方法来归档这个,而不是有500个dom元素包含所需的标记信息吗?

一些想法:

1)我可以创建一个包含所有500个标记信息的JSON数组,并将其保存在单个数据属性中。不确定是否存在某些浏览器限制因为这是单个数据属性的大量数据。由于json编码/解码,性能可能更差。

2)我可以使用所需的标记信息创建一个JSON / XML / KML文件,并通过AJAX访问它。在我的情况下,这是一个更大的努力,并且ajax请求可能比dom解析花费更长的时间。

3)再次使用内联JS(由于缺少可重用的代码,在我的情况下真的是一种不好的做法..)

有什么想法?有人测试类似的情况检查性能吗?

2 个答案:

答案 0 :(得分:0)

将json直接输出到脚本标签是最简单的选择:

<script>
    var data = <?php echo json_encode($data);?>;
</script>

但是ajax对jquery来说也很简单:

var data;
$.get('somefile.php', function(data){
    data=data;
});

somefile.php:

header('Content-Type: application/json');
echo json_encode($data);

答案 1 :(得分:0)

我认为你在这里有一些选择,你已经有了一些它们。 在我看来,AJAX是最具语义性的选择,将来会给你带来更少的问题。

为了提高性能,您可以尝试减少repaint事件。 考虑在添加500个标记之前隐藏整个地图,并在完成后显示它们。

为了便于使用,您可以显示加载gif,例如。

它已经为我节省了很多。

正如@DoXicK所说,如果您的标记是静态内容,则可以使用JSONP策略在您的身体中导入脚本标记。