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


Best way to store 500 marker objects in DOM

我正在实现一个nokia/google地图,我必须在其中存储500个标记。我通过循环遍历php数组并使用数据属性将其放入无序列表来接收信息(名称、纬度、经度、标记组和图像)。然后我使用jQuery循环遍历那些li元素,并用标记信息填充地图。

这很好,但在dom中有一个包含500个隐藏元素的列表似乎是我在性能问题上的开销。

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

现在,有没有比拥有500个包含所需标记信息的dom元素更好的方法来存档呢?

一些想法:

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

2) 我可以创建一个带有所需标记信息的JSON/XML/KML文件,并通过AJAX访问该文件。在我的情况下,这是一项更大的工作,ajax请求可能比dom解析需要更长的时间。

3) 再次使用内联JS(在我的案例中,由于缺乏可重用代码,这确实是一种糟糕的做法。)

有什么想法吗?有人测试过类似的案例来检查性能吗?

我认为您在这里有一些选择,并且您已经在脑海中有了一些。在我看来,AJAX是最具语义的选项,将来会给您带来更少的问题。

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

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

它已经帮了我很多。

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

将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);