OpenLayers 3 - 样式缓存和内存使用

时间:2015-05-19 10:04:10

标签: javascript google-chrome caching openlayers-3

我有一个带有矢量图层的OL3应用程序,该矢量图层具有样式函数,可以为每个要素创建ol.style.Style对象进行昂贵的计算。更确切地说,如果地图缩放超过某个级别,则每个点都有一个动态创建的图标,以及一些文本(点的名称)。它创建了需要时间的图标,因此我使用了ol.style.Style对象的缓存。它可以很好地减少初始地图加载时间(巨大的差异),因为在实践中没有太多可能的样式,因此每次一个点将共享相同的样式,图像的计算/转换产生图标被跳过,并从缓存中检索样式。 (对于显示名称的情况,它可能没那么有用,因为可能大多数点都有不同的名称,但如果用户平移地图然后返回到同一位置或放大,它仍然有用无论如何,似乎没有性能问题,因为我注意到,OpenLayers只渲染当前在视图中可见的点。)

但是,我想知道这个缓存真正使用了多少内存。首先,我尝试了一些在网上找到的库,它们可以让你获得一个JavaScript变量的总大小,但是它们不能在我的缓存上工作,可能是因为有太多的子属性,或者它们没有处理的情况。接下来,我尝试了Google Chrome开发工具,并使用了" Take heap snapshot"功能,我发现的缓存大小令人惊讶地低。似乎我的styleCache每个ol.style.Style对象只占用704个字节(保留大小)(实际上每个都在Array中是唯一的,因为样式函数必须返回一个数组,我把数组直接放在缓存中)。

所以,这里有两个问题:

  1. 我注意到使用该工具的对象的总保留大小可能小于其属性/子对象的总和。你知道为什么吗 ?该工具是否是测量使用内存的可靠方法?

  2. OpenLayers是否有自己的图标图像内部缓存?我注意到还有一个ol.style.IconImageCache对象...这可以解释为什么我的缓存不占用太多内存,因为图像也会在可能的情况下共享。这意味着仍然必须为每个点完成图标图像的计算(因为ImageIconCache无法猜测图标图像将与它已经存在的图像相同),但它仍然有助于减少内存使用量

0 个答案:

没有答案