为什么用 ArcGIS API JS 加载 WMS 图层这么慢?
Why is loading a WMS layer with ArcGIS API JS is that slow?
我想知道 arcgis API JS 加载 WMS 图层的速度有多慢是否正常。这是一个例子:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>Intro</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.17/esri/css/main.css">
<script src="https://js.arcgis.com/4.17/"></script>
<script>
require(["esri/Map", "esri/views/MapView", "esri/layers/WMSLayer", "esri/widgets/LayerList"], function(
Map,
MapView,
WMSLayer,
LayerList,
) {
const map = new Map({
basemap: "streets-navigation-vector"
});
const view = new MapView({
container: "viewDiv",
map: map,
zoom: 3,
center: {
latitude: 32.7353,
longitude: -117.1490
}
});
var layer_precipitations = new WMSLayer({
url: "https://geo.weather.gc.ca/geomet?",
title: "Précipitation radar",
sublayers: [{
name: "RADAR_1KM_RRAI",
title: "precipitations",
popupEnabled: false,
queryable: false,
visible: true,
}, ],
visible: true,
});
map.add(layer_precipitations);
var layerList = new LayerList({
view: view,
});
view.ui.add(layerList, {
position: "top-left"
});
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
使用 chrome 加载页面大约需要 4 秒,使用 firefox 大约需要 8 秒。如果我尝试用 leaflet 或 openlayers 加载同一层,它甚至不需要 1 秒。
任何人都知道我怎样才能让它更快?
谢谢!
朱利安
编辑:Leaflet 与 ArcGIS 基础知识
你的评论让我仔细看看。我为 arcgis 和 leaflet 版本都创建了 codepens,但是如果没有 posting 代码,我不会让我 post 链接,我认为这有点傻,所以请参阅链接的评论。速度的差异在于每个库用来拉取层的底层方法。查看传单版本的网络选项卡:
:
如您所见,传单接受请求并将其分解成小块,分成小块。由于所有这些请求都是同时发出的,而且每个请求都较小,因此整个响应返回得更快,每个图块平均需要 800 毫秒才能获得。
再来看看ArcGIS的方法:
如您所见,ArcGIS 获取当前地图范围的整个图像。这需要更长的时间——在我的例子中,大约 2 秒。我不确定为什么您会得到长达 4 秒和 8 秒的响应时间,但您现在至少可以明白为什么会有差异。
所以这归结为每个库处理 wms 请求的方式存在根本差异。 ArcGIS 很棒,但在某些事情上似乎确实比 leaflet 慢一点。 Leaflet 已针对速度进行了不懈的优化,但不具备 arcgis 具有的所有内置功能。我认为 2 秒的响应时间可能没问题,但在较慢的连接上,8 秒有点不可接受。很长一段时间以来,这一直是我对 arcgis 的不满,但正如我所说,我们可以选择最适合给定应用程序需求的库。
我想知道 arcgis API JS 加载 WMS 图层的速度有多慢是否正常。这是一个例子:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>Intro</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.17/esri/css/main.css">
<script src="https://js.arcgis.com/4.17/"></script>
<script>
require(["esri/Map", "esri/views/MapView", "esri/layers/WMSLayer", "esri/widgets/LayerList"], function(
Map,
MapView,
WMSLayer,
LayerList,
) {
const map = new Map({
basemap: "streets-navigation-vector"
});
const view = new MapView({
container: "viewDiv",
map: map,
zoom: 3,
center: {
latitude: 32.7353,
longitude: -117.1490
}
});
var layer_precipitations = new WMSLayer({
url: "https://geo.weather.gc.ca/geomet?",
title: "Précipitation radar",
sublayers: [{
name: "RADAR_1KM_RRAI",
title: "precipitations",
popupEnabled: false,
queryable: false,
visible: true,
}, ],
visible: true,
});
map.add(layer_precipitations);
var layerList = new LayerList({
view: view,
});
view.ui.add(layerList, {
position: "top-left"
});
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
使用 chrome 加载页面大约需要 4 秒,使用 firefox 大约需要 8 秒。如果我尝试用 leaflet 或 openlayers 加载同一层,它甚至不需要 1 秒。 任何人都知道我怎样才能让它更快? 谢谢! 朱利安
编辑:Leaflet 与 ArcGIS 基础知识
你的评论让我仔细看看。我为 arcgis 和 leaflet 版本都创建了 codepens,但是如果没有 posting 代码,我不会让我 post 链接,我认为这有点傻,所以请参阅链接的评论。速度的差异在于每个库用来拉取层的底层方法。查看传单版本的网络选项卡:
如您所见,传单接受请求并将其分解成小块,分成小块。由于所有这些请求都是同时发出的,而且每个请求都较小,因此整个响应返回得更快,每个图块平均需要 800 毫秒才能获得。
再来看看ArcGIS的方法:
如您所见,ArcGIS 获取当前地图范围的整个图像。这需要更长的时间——在我的例子中,大约 2 秒。我不确定为什么您会得到长达 4 秒和 8 秒的响应时间,但您现在至少可以明白为什么会有差异。
所以这归结为每个库处理 wms 请求的方式存在根本差异。 ArcGIS 很棒,但在某些事情上似乎确实比 leaflet 慢一点。 Leaflet 已针对速度进行了不懈的优化,但不具备 arcgis 具有的所有内置功能。我认为 2 秒的响应时间可能没问题,但在较慢的连接上,8 秒有点不可接受。很长一段时间以来,这一直是我对 arcgis 的不满,但正如我所说,我们可以选择最适合给定应用程序需求的库。