Chr*_*ian 8 javascript google-maps google-maps-api-3
我正在遇到谷歌地图v3 api的大量性能问题,在搜索此问题时找不到任何有类似问题的人.这个问题可以在任何浏览器上看到,但我在这里专注于Chrome.
当我放大地图或离开地图时,FPS率急剧下降,导致难以接受的糟糕体验.
我用最简单的例子使用他们的文档实现了谷歌地图.
<!DOCTYPE html>
<html>
<head>
<title>Simple Map</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?callback=initMap"
async defer></script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
首先,转到https://maps.google.com并尝试缩放功能(使用鼠标滚轮)会产生非常好的效果.一切顺利,FPS率为60 fps.在我的测试中,我打开了官方谷歌地图网站和我的小示例页面,并执行了以下操作:
在Chrome开发控制台中,我启用了"显示FPS计量表".以下是原始网站和我的网站在20秒放大和缩小会话期间拍摄的两个屏幕截图.
请注意,原始谷歌地图网站似乎根本没有使用GPU内存,而我的网站极其使用它.实际上在拍摄截图的时刻它是146 MB,然而,这是在0-200MB之间以非常高的速度波动.
我接下来要做的是在Chrome中启用开发控制台的Paint Flashing功能,该功能显示重绘的矩形.我再次放大并缩小地图并制作截图:

这里很明显,我的网站只是试图重新绘制正在改变的内容,而原始的谷歌地图网站总是重新绘制整个画面.无论我持续缩放多长时间,原始网站总是重新绘制整个内容,并且根本不会使用GPU内存.
有没有人经历过类似的行为,有没有办法(也许是一些设置)让我也像谷歌在他们的网站上做的那样渲染地图?我的具体用例确实使我无法使用谷歌地图与我遇到的性能.
原因是谷歌地图api与谷歌地图应用程序使用的javascript不一样.
如果您查看生成的地图,您可以看到使用api创建的地图由多个div创建,每个div是一个地图平铺图像.在缩放期间,必须使用新图像重新渲染每个图块.同样在网络选项卡中,您可以看到您正在将地图图块下载为图像.
另一方面,谷歌地图应用程序有一个画布元素,在缩放过程中你不是下载图像而是矢量数据(以某种谷歌格式),它们被渲染到画布中.Canvas对象是本机支持的,并且比使用DOM元素替换图像便宜.
| 归档时间: |
|
| 查看次数: |
1552 次 |
| 最近记录: |