我正在使用瓣叶和Angular (带有@asymetrik/ngx-leaflet ^14.0.1和瓣叶^1.9.2),自定义标记图标出现问题。
在Map上,我有大约200 - 400个标记,这些标记是"动态的",每15秒更新一次(代表Map上的车辆)。当用户点击标记时,会设置一个新图标,让用户知道选择了什么车辆。只有3种类型的选定图标/标记。
当用户点击标记,我看到它在谷歌Chrome开发工具网络标签,这张图片(图标)加载,这很好,然后我再次单击,网络选项卡中没有显示任何内容,因为图像被缓存,这也很好。但当我再次单击同一标记时(相同的图标,因此相同的图像)在大约10秒之后,其已经被高速缓存,我看到在网络选项卡中再次加载。这会导致问题,因为从网络加载图像时总是有一个小的延迟(而且在较慢的设备/较慢的网速上,这也会产生一段时间的空白点)。
我试着做一些类似"资产预热"的事情,在Map准备好后我就预加载了这三个图像,但是图像/图标的加载在预热后大约10秒后仍然存在。
private warmMarkerAssets(): void {
const selectedMarkerIcons = ["bus/selected_bus.png", "train/selected_train.png", "trolleybus/selected_trolleybus.png"]
selectedMarkerIcons.forEach((iconPath) => {
const tempMarker = marker(
latLng(0, 0),
{ icon: icon({
iconUrl: this.assetMarkerPath + iconPath,
iconSize: [40, 40],
iconAnchor: [20, 20],
})}
)
this.map.addLayer(tempMarker)
this.map.removeLayer(tempMarker)
})
}
你有什么建议,如何解决这个问题,或者也许你已经遇到过这个问题?
多谢了
1条答案
按热度按时间r1wp621o1#
从你的截图来看,缓存控制似乎没有任何明显的问题。
它将再次加载到网络选项卡中
即使从缓存提供服务,“请求”也可能出现在浏览器网络选项卡中,请参见Check whether network response is coming from server or Chrome cache
最后,还要确保开发工具的“禁用缓存”选项未选中。
如果您仍然有实际的服务器请求,那么它将需要更详细的调查,这在这里可能是不切实际的,除非您能够分享一个现场复制的例子。
但是一个非常简单的解决方案是将静态图像作为Data URL(使用Base64编码)提供,至少对于那些点击时出现的图像,这应该完全摆脱对这些资源的任何网络请求。
请注意,如果您有数百个标记与1张图像一起永久显示,您可能更喜欢以正常方式保留该图像,因为数据URL/Base64在多次同时显示时性能较差,请参见传单/传单#4968。
顺便说一句,对于“预热”(预加载图像资产内容),无需构建瓣叶标记。参见Preloading images with JavaScript