在 Leafletjs 中使用多个域更快地加载图块(不是子域)

Sor*_*rer 1 javascript leaflet

我正在尝试加快自定义游戏地图的图块加载时间:www.nwnevilparty.com,我只是碰巧有另一个域什么都不做www.evilpartynwn.com,我想用它来帮助加载图块。目前我的主机不允许子域,所以我只能这样做。

这是我研究的地方:https ://leafletjs.com/reference-1.6.0.html#tilelayer


我尝试过的:

// Original line
main = L.tileLayer('maps/barovia/{z}/{x}/{y}.png', {noWrap: true, bounds: new L.LatLngBounds(southWest, northEast),}).addTo(map);

// Modified line -- Why only nwnevilparty.com gets used for tiles?
main = L.tileLayer('http://{server}/maps/barovia/{z}/{x}/{y}.png', {server: 'nwnevilparty.com' || 'evilpartynwn.com'}, {noWrap: true, bounds: new L.LatLngBounds(southWest, northEast),}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

我做错了什么以及为什么我的例子不起作用?

ghy*_*ybs 5

在 JavaScript 中,||如果运算符为true,则返回左侧操作数,否则返回右侧操作数。此外,它会在规定的地方执行。

在您的情况下:'nwnevilparty.com' || 'evilpartynwn.com'左侧非空字符串是真实的,因此它始终是操作的结果。

此外,在 Leaflet Tile Layer URL 模板中,只有s占位符对于解决每个域的浏览器同时请求限制具有特殊含义。由于在您的情况下您使用server,Leaflet 不会尝试对其进行任何特殊处理,除了将其替换为常量字符串。

根据s占位符的文档:(强调我的)

{s}表示可用子域之一(按顺序使用以帮助处理每个域限制的浏览器并行请求;子域值在选项 [...] 中指定)

subdomains选项:

磁贴服务的子域。可以以一个字符串(其中每个字母是一个子域名)或字符串数​​组的形式传递。

因此你应该使用:

L.tileLayer('http://{s}/maps/barovia/{z}/{x}/{y}.png', {
  subdomains: ['nwnevilparty.com', 'evilpartynwn.com'], // also note that it should not be on a separate options object
  noWrap: true,
  bounds: new L.LatLngBounds(southWest, northEast)
}).addTo(map);
Run Code Online (Sandbox Code Playgroud)