Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript支持的网站需要大量内存,但profiler不需要';不要暗示_Javascript_Memory Leaks_Profiling_Google Chrome Devtools - Fatal编程技术网

JavaScript支持的网站需要大量内存,但profiler不需要';不要暗示

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开发工具制作堆快照 前后的快照非常相似,

我正试图找出为什么我的网站(使用JavaScript,包括jQuery和GoogleMapsAPIv2)需要超过400MB的内存来创建一个标签

到目前为止我所做的:

  • 在Firefox和Chrome中都尝试过,同样的问题
  • 在地图上创建路线之前和之后,检查了Chrome的任务管理器
    • 之前:28MB制表进程内存(31MB为“专用内存”,13MB为“共享内存”)
    • 之后:550 MB选项卡进程内存(557 MB专用内存,13 MB共享内存)
  • 使用Chrome开发工具制作堆快照
    • 前后的快照非常相似,都显示了大约12MB的堆对象
所以我的问题是:术语“私有/共享内存”的确切含义是什么?它与堆栈变量有关吗?如何调试巨大的“私有”内存使用?我真的不在乎我使用哪个浏览器进行调试

编辑:不幸的是,当我在我的应用程序中创建一个GMaps路由时,内存问题就出现了,它似乎不能与IE一起正常工作——所以我有点局限于Firefox/Chrome

编辑2:我在没有任何工具的情况下找到了问题所在(如果有人知道工具,我仍然对工具感兴趣)。当我调用
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&amp;v=2&amp;oe=utf-8&amp;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>