2021-06-04 如何解决浏览器stalled时间过长的问题

长话短说,一般量小的业务系统不会遇到这种问题的,但是对于GIS行业来说随随便便就很容易出现。不管你服务是架设在内网还是外网或是公网,只要是同一个域名或者同一个IP去访问瓦片服务的话,必然一次地图漫游会产生很多次请求,拿我所负责的XXX系统所处的业务场景来说,对于一个一般的栅格或矢量图层来说,鼠标轻轻漫游一次就有近几十个请求(文末有彩蛋!!),如下:

image.png

一种图层还好,如果一多,那速度简直了,如下:

image.png

随随便便请求上N百,点开其中一条请求看下:

image.png

好家伙,请求居然在浏览器端停滞了5.19s,真实发数据到数据返回前端用时不到200ms,你一个等待直接让我崩溃,不,是让用户崩溃,用户奔溃了,研发的锅就跑不掉了,怎么解释呢?

其实这种问题网上一搜一大堆,都说了原因,没说解决办法,原因无外乎浏览器对同一个域名的请求有限制,比如谷歌的是6个请求,对于一次请求上百的系统,你品、你细品!!!

重点来了,怎么解决???

复杂问题简单化,就是搞多个域名不就行了,你看人家天地图、谷歌、百度或其他地图服务提供商的瓦片服务哪个不是有多个域名的,比如天地图的domain就有0~10个不等,那请求中如何带上不同的domin呢,如下:

L.tileLayer('https://yl{s}.xxx.com/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:4490&serviceId=1344802456462912&cache=true', {
        subdomains: [0,1,2,3,4,5,6,7]
    }).addTo(map);

效果如下:


image.png

剩下的就是域名的问题了(让运维申请域名吧),如果域名加了后,还是慢,后台服务就要搞负载了,别想着一台机器就可以满世界的漫游实时看瓦片了,当然做了瓦片缓存,服务的负载后面也是要做的,做不做还是要看用户的并发量了。

没有效果无法服众,来,我基于内网也就是我本地环境,来给你们演示一下配了多域名和不配的浏览器前后响应时间对比(主要以chrome为主):

不配前,代码如下(ip我就不马赛克了,知道我的人肯定知道,不知道我的人给你再多的信息你都不一定知道):

<body>
    <div id="mapDiv">
    </div>
    <script>
        map = new L.map("mapDiv", {
            minZoom: 1,
            maxZoom: 19,
            center: [32.317312, 116.743469],
            zoom: 9,
            zoomControl: false,
            attributionControl: false,
            crs: L.CRS.EPSG3857,
            editable: true,
            doubleClickZoom: false
        });

        L.tileLayer('http://10.16.28.13:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367793003311552', {}).addTo(map);
        L.tileLayer('http://10.16.28.13:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367793003311552', {}).addTo(map);
        L.tileLayer('http://10.16.28.13:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367793727992256', {}).addTo(map);
        L.tileLayer('http://10.16.28.13:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367799700586944', {}).addTo(map);
        L.tileLayer('http://10.16.28.13:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367799980966336', {}).addTo(map);
        var popup = L.popup();
        function onMapClick(e) {
            popup
                .setLatLng(e.latlng)
                .setContent("You clicked the map at " + e.latlng.toString())
                .openOn(map);
        }
        map.on('click', onMapClick);
    </script>
</body>

浏览器预览效果:

image.png

配后,hosts文件配置如下:

image.png

配后,核心代码片段如下:

<body>
    <div id="mapDiv"></div>
    <script>
        map = new L.map("mapDiv", {
            minZoom: 1,
            maxZoom: 19,
            center: [32.317312, 116.743469],
            zoom: 9,
            zoomControl: false,
            attributionControl: false,
            crs: L.CRS.EPSG3857,
            editable: true,
            doubleClickZoom: false
        });
        L.tileLayer('http://www.service{s}.com:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367793003311552', {
            subdomains: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
        }).addTo(map);

        L.tileLayer('http://www.service{s}.com:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367793003311552', {
            subdomains: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
        }).addTo(map);
      
        L.tileLayer('http://www.service{s}.com:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367793727992256&', {
            subdomains: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
        }).addTo(map);
    
        L.tileLayer('http://www.service{s}.com:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367799700586944', {
            subdomains: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
        }).addTo(map);
    
        L.tileLayer('http://www.service{s}.com:8099/datamg-server/datamg/services/tile?x={x}&y={y}&l={z}&crs=EPSG:3857&serviceId=1367799980966336', {
            subdomains: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
        }).addTo(map);

        var popup = L.popup();
        function onMapClick(e) {
            popup
                .setLatLng(e.latlng)
                .setContent("You clicked the map at " + e.latlng.toString())
                .openOn(map);
        }
        map.on('click', onMapClick);
    </script>
</body>

配后,浏览器预览效果:

image.png

当然还有一种方式就是后端服务配置下,支持http2,这个正在尝试中....

2022年7月15日15:06:02,尝试成功,得出结论如下:https://www.processon.com/view/link/62d111baf346fb089dbddcce

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容