我正在创建一个基于边界框和缩放级别加载和销毁标记的地图.我有一个真正的问题,正确删除标记,它似乎有时适用于某些情况.
我有一个包含标记信息的对象,它还包含谷歌地图标记对象.我的代码检测是否应根据边界框或缩放级别删除市场.我将标记对象设置为"setMap(null);" 并使用firebug我可以看到它被设置,然后我完全删除父对象,并正确更新对象数据长度.
当一个标记被删除时,我输出到firebug控制台,似乎正在工作,我可以看到标记没有从边界框更改上的标记的ajax调用中重新创建.
然而,如果我在地图上缩放,我有时会看到标记被移除,如果我缩小然后向后平移按住鼠标.或者,如果我第一次缩小,有时会删除所有标记,但如果我再次放大然后退出,则不会删除它们.
我必须对我的代码逻辑做错事,我很难过.
您可以查看http://www.trailforks.com/map/test.php?lat=49.352247&lon=-123.202413 的来源, JS是 http://www.trailforks.com/map/includes/map.js
删除标记的代码位于底部
function clearMarkerMemory(mapItem, i) {
google.maps.event.removeListener(mapItem.lis); // remove stored listener
mapper.data[i].obj.setMap(null); // remove marker
mapper.data.splice(i, 1);
console.log("removed marker "+mapItem.icon+":"+mapItem.nid+' '+mapItem.name);
};
Run Code Online (Sandbox Code Playgroud)
我在控制台中添加了一些调试,只用2个标记进入地图的简单区域http://www.trailforks.com/map/test.php?lat=49.43210641783767&lon=-123.49878636730955&z=14
我可以看到创建的标记,然后稍微移动地图,看到标记没有被重新创建,因为它们是在标记对象中检测到的.然后我移动视口,使其中一个标记离开屏幕,我可以看到标记被删除,标记对象长度更新.但是,如果我将地图平移回标记仍然在地图上.

随着我的数据库表变大,我的主页上的查询越来越慢.
tablename = tweets_cache rows = 572,327
这是我目前使用的查询很慢,超过5秒.
SELECT * FROM tweets_cache t WHERE t.province='' AND t.mp='0' ORDER BY t.published DESC LIMIT 50;
Run Code Online (Sandbox Code Playgroud)
如果我取出WHERE或ORDER BY,那么查询超快0.016秒.
我在tweets_cache表上有以下索引.
PRIMARY
published
mp
category
province
author
Run Code Online (Sandbox Code Playgroud)
所以我不确定为什么它不使用索引,因为mp,provice和发布都有索引?执行查询的配置文件显示它不使用索引对查询进行排序,并且正在使用非常慢的filesort.
possible_keys = mp,province
Extra = Using where; Using filesort
Run Code Online (Sandbox Code Playgroud)
我尝试使用"profiles&mp"添加一个新的multie-colum索引.解释显示这个新索引列在"possible_keys"和"key"下,但查询时间不变,仍然超过5秒.
以下是查询中的探查器信息的屏幕截图.
奇怪的是,我在我的本地桌面上进行了数据库转储以便进行测试,所以我不会搞砸现场网站.我本地的相同查询运行超快,毫秒.所以我将所有相同的mysql启动变量从服务器复制到我的本地,以确保没有可能导致这种情况的设置.但即便如此,本地查询运行速度超快,但实时服务器上的查询超过5秒.
我的数据库服务器只使用了大约800MB的4GB可用空间.这是我正在使用的相关my.ini设置
default-storage-engine = MYISAM
max_connections = 800
skip-locking key_buffer
= 512M
max_allowed_packet = 1M
table_cache = 512 sort_buffer_size =
4M
read_buffer_size = 4M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 64M
thread_cache_size = 8 query_cache_size …
如果要处理数百条折线,使用https://developers.google.com/maps/documentation/utilities/polylinealgorithm?hl=sv-SE对折线进行编码会带来很大的性能优势吗
似乎这主要与 API v2 和 v3 一起使用,它自己可以很好地处理大量折线?
我似乎找不到任何基准比较。