减少Openlayers

时间:2018-04-03 08:39:22

标签: openlayers-3

我在地图中有很多图块层。因此,当我缩放或移动地图时,所有图层都会向服务器发送wms请求。如何通过将不同图层的请求合并到单个请求来缩放地图,从而减少HTTP请求?

2 个答案:

答案 0 :(得分:1)

与地图进行交互时,您可以使用maxTilesLoading选项更改Openlayers同时发送的异步请求的数量,即:

var map = new Map({
  maxTilesLoading:5,
  layers: [
    new TileLayer({
      source: new OSM()
    })
  ],
  target: 'map',
  view: new View({
    center: [0, 0],
    zoom: 2
  })
});

默认值为16,但是如果要加载的磁贴需要花费一两秒钟,则最终会导致大量未完成的请求积压,待处理的服务器正在处理该请求。这是因为浏览器只能同时向服务器发送10-20个活动的HTTP请求。如此一来,请求将一直挂起,直到队列减少。从浏览器发送到服务器的请求数量不断增加,只是等待请求队列减少,这样站点才能停止运转。不断移动/缩放地图会从浏览器向服务器发送大量的http请求。使用maxTilesLoading减少此操作可减少使请求数量超载的机会。值得权衡的是,随着一系列工作的进行,地图的加载速度可能会稍慢一些,但在与地图交互时,整体性能会大大提高。

答案 1 :(得分:0)

如果所有WMS图层都来自同一服务器,则可以将它们组合成单个ol.layer.Layer对象,更准确地说是在一个源对象中,通过在逗号分隔列表中定义每个图层(在{{1}下)参数):

'LAYERS'

您还可以尝试减少请求数量/提高整体效果:

  • 您提到了“许多图块层”,然后是WMS请求。如果你没有使用磁贴缓存方法,你可以调查一下。示例:MapCache
  • 你也可以做一个大的瓷砖请求而不是很多小的请求来渲染你的图层(上面的例子就是这样)。这种方法减少了请求的数量,但您会觉得地图渲染速度较慢。它还使得“缓存”结果的可能性降低,因为磁贴的请求通常是唯一的(取决于地图视图的范围)。