JavaScript支持的网站需要大量内存,但profiler不需要';不要暗示
我正试图找出为什么我的网站(使用JavaScript,包括jQuery和GoogleMapsAPIv2)需要超过400MB的内存来创建一个标签 到目前为止我所做的:JavaScript支持的网站需要大量内存,但profiler不需要';不要暗示,javascript,memory-leaks,profiling,google-chrome-devtools,Javascript,Memory Leaks,Profiling,Google Chrome Devtools,我正试图找出为什么我的网站(使用JavaScript,包括jQuery和GoogleMapsAPIv2)需要超过400MB的内存来创建一个标签 到目前为止我所做的: 在Firefox和Chrome中都尝试过,同样的问题 在地图上创建路线之前和之后,检查了Chrome的任务管理器 之前:28MB制表进程内存(31MB为“专用内存”,13MB为“共享内存”) 之后:550 MB选项卡进程内存(557 MB专用内存,13 MB共享内存) 使用Chrome开发工具制作堆快照 前后的快照非常相似,
- 在Firefox和Chrome中都尝试过,同样的问题
- 在地图上创建路线之前和之后,检查了Chrome的任务管理器
- 之前:28MB制表进程内存(31MB为“专用内存”,13MB为“共享内存”)
- 之后:550 MB选项卡进程内存(557 MB专用内存,13 MB共享内存)
- 使用Chrome开发工具制作堆快照
- 前后的快照非常相似,都显示了大约12MB的堆对象
someGPolylineInstance.insertVertex(0,point)
时会出现问题,其中point是来自“dblclick”事件的lat/lng点。每次我插入一个点(我注释掉了双击处理程序中发生的所有其他事情),Chrome中的内存使用量就会增加~1MB。这可能是Maps API的问题吗
所以,由于我不能建立我的整个网站,我提取了一个最小的例子来说明这个问题。目前我可以在Chrome10上重现这个问题。通过双击添加路由点可增加大约0.5 MB的内存使用量,而一次添加50个点所需的内存更少。请尝试并告诉我您是否有相同的体验(只需将示例打开为“file://”):
函数init()
{
map=newGMAP2(document.getElementById(“map_canvas”),{mapTypes:[G_NORMAL_map],
DragableCursor:“十字线”})
line=new GPolyline(新数组(),“#0090EE”,2,{可点击:假,测地线:假})
map.addOverlay(行)
地图设置中心(新格拉特林(49,9),12)
addControl(新的GlargeMappControl())
map.disableDoubleClickZoom()
addListener(映射“dblclick”,
功能(覆盖,点击点)
{
如果(!覆盖)
line.insertVertex(0,单击点)
}
)
}
纬度=49
液化天然气=9
函数doSomething()
{
对于(变量i=0;i<50;++i)
{
lat+=0.05
液化天然气+=0.03
线插入顶点(0,新玻璃(板条,液化天然气))
}
document.getElementById(“调试”).innerHTML=line.getVertexCount()+“点”
}
加50分
你可能想试试,你能发一个链接到你的网站吗?@josh:对不起,私人网站不在互联网上。我想学习如何自己调试;)@波蒂:谢谢你的建议。正在下载Firefox版本…@AndiDog祝你好运-我只使用过IE版本,但它很酷
<html>
<head>
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&oe=utf-8&key=open_me_as_file_so_that_no_key_is_necessary"></script>
<script>
function init()
{
map = new GMap2(document.getElementById("map_canvas"), {mapTypes : [G_NORMAL_MAP],
draggableCursor : "crosshair"})
line = new GPolyline(new Array(), "#0090EE", 2, { clickable: false, geodesic: false })
map.addOverlay(line)
map.setCenter(new GLatLng(49, 9), 12)
map.addControl(new GLargeMapControl())
map.disableDoubleClickZoom()
GEvent.addListener(map, "dblclick",
function(overlay, clickedPoint)
{
if(!overlay)
line.insertVertex(0, clickedPoint)
}
)
}
lat = 49
lng = 9
function doSomething()
{
for(var i = 0; i < 50; ++i)
{
lat += 0.05
lng += 0.03
line.insertVertex(0, new GLatLng(lat, lng))
}
document.getElementById("debug").innerHTML = line.getVertexCount() + " points"
}
</script>
</head>
<body onload="init();">
<div id="map_canvas" style="width: 500px; height: 300px"></div>
<div id="debug"></div>
<button onclick="doSomething();">Add 50 points</button>
</body>
</html>