教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤


Posted in Servers onSeptember 25, 2021

一、背景

最近有小伙伴遇到了大数据量地图加载慢的情况,观察iServer性能并未发挥到极致,所以通过搭建子域的方式成功实现了浏览速度的提升。
子域能对加载速度进行提升是因为浏览器对同一个域名服务的并发请求数量有限制,通过 Nginx 服务部署多个子域名,加大向 iServer 发送数据请求的并发量,从而达到提升加载速度的目的。

二、Nginx配置步骤

1.修改Nginx 配置nginx.conf,监控多个端口

server {
		listen       8881;
		listen       8882;
		listen       8883;
		listen       8884;
		listen       8885;
        server_name  127.0.0.1,172.16.15.124;
        location / {
            root   html;
            index  index.html index.htm;
        }

		location /iserver {
            proxy_pass   http://172.16.15.124:8090;
            proxy_redirect off;
			proxy_buffering off;
			proxy_set_header Host $host:$server_port;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

三、前端对接

1.Leaflet使用subdomains参数,url中加入{s}占位符

教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤

代码如下:

var map= "";
    map = L.map('map', {
        crs: L.CRS.EPSG4326,
        center: [0, 0],
        maxZoom: 18,
        zoom: 1
    });
    L.supermap.tiledMapLayer("http://127.0.0.1:{s}/iserver/services/map-world/rest/maps/World",{subdomains:[8881,8882,8883,8884]}).addTo(map);

2.OpenLayer通过设置url参数{?-?},并通过XYZ方式对接

教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤

代码如下:

var map, url = "http://127.0.0.1:888{1-4}/iserver/services/map-world/rest/maps/World/zxyTileImage.png?z={z}&x={x}&y={y}";
    map = new ol.Map({
        target: 'map',
        controls: ol.control.defaults({attributionOptions: {collapsed: false}})
            .extend([new ol.supermap.control.Logo()]),
        view: new ol.View({
            center: [0, 0],
            zoom: 2,
            projection: 'EPSG:3857',
            multiWorld: true
        })
    });
    var layer = new ol.layer.Tile({
        source: new ol.source.XYZ({
            url: url,
            wrapX: true
        }),
        projection: 'EPSG:3857'
    });
    map.addLayer(layer);
    map.addControl(new ol.supermap.control.ScaleLine());

3.Classic直接传递url数组

教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤

代码如下:

var map, layer,
        host = window.isLocal ? window.server : "https://iserver.supermap.io",
        url = host + "/iserver/services/map-world/rest/maps/World";
    //初始化地图
    map = new SuperMap.Map("map", {
        controls: [
            new SuperMap.Control.Navigation(),
            new SuperMap.Control.Zoom()]
    });
    map.addControl(new SuperMap.Control.MousePosition());
    //初始化图层
    layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", ["http://127.0.0.1:8881/iserver/services/map-world/rest/maps/World","http://127.0.0.1:8882/iserver/services/map-world/rest/maps/World","http://127.0.0.1:8883/iserver/services/map-world/rest/maps/World"], null, {maxResolution: "auto"});
    //监听图层信息加载完成事件
    layer.events.on({"layerInitialized": addLayer});
    function addLayer() {
        map.addLayer(layer);
        //显示地图范围
        map.setCenter(new SuperMap.LonLat(0, 0), 0);

4.MapboxGL直接传递tiles参数

教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤

代码如下:

var host = window.isLocal ? window.server : 'https://iserver.supermap.io';
            var map = new mapboxgl.Map({
                container: 'map', // container id
                style: {
                    version: 8,
                    sources: {
                        'raster-tiles': {
                            type: 'raster',
                            tileSize: 256,
                            tiles: ["http://127.0.0.1:8881/iserver/services/map-world/rest/maps/World","http://127.0.0.1:8882/iserver/services/map-world/rest/maps/World","http://127.0.0.1:8883/iserver/services/map-world/rest/maps/World"],
                            rasterSource: 'iserver'
                        }
                    },

                    layers: [
                        {
                            id: 'simple-tiles',
                            type: 'raster',
                            source: 'raster-tiles',
                            minzoom: 0,
                            maxzoom: 22
                        }
                    ]
                },
                crs: 'EPSG:4326', // 或者 mapboxgl.CRS.EPSG4326  或者 new mapboxgl.CRS('EPSG:4326',[-180,-90,180,90]);
                center: [0, 0],
                zoom: 2
            });

到此这篇关于利用 Nginx 服务搭建子域环境提升二维地图加载性能的文章就介绍到这了,更多相关Nginx 服务内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
Mar 09 Servers
Nginx搭建rtmp直播服务器实现代码
Mar 31 Servers
扩展多台相同的Web服务器
Apr 01 Servers
Nginx部署vue项目和配置代理的问题解析
Aug 04 Servers
解决xampp安装后Apache无法启动
Mar 21 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
nginx.conf配置文件结构小结
Apr 08 Servers
Windows Server 2019 域控制器安装图文教程
Apr 28 Servers
配置nginx负载均衡
May 06 Servers
如何让你的Nginx支持分布式追踪详解
Jul 07 Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 Servers
VMware虚拟机安装 Windows Server 2022的详细图文教程
Sep 23 Servers
Nginx进程调度问题详解
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 #Servers
关于nginx 实现jira反向代理的问题
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 #Servers
nginx安装以及配置的详细过程记录
Sep 15 #Servers
Nginx缓存设置案例详解
Sep 15 #Servers
图文详解Nginx版本平滑升级方案
Sep 15 #Servers
You might like
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
Javascript的闭包详解
2014/12/26 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
高中地理教学反思
2014/01/29 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
总经理年会致辞
2015/07/29 职场文书
班主任培训研修日志
2015/11/13 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server