优化地图服务接口响应

在我们开发地图服务时,比如要加载很多地图上的图例,这个时候如果数据过大而每条数据都去请求的话就会造成地图服务器响应时间过长甚至调取服务失败。考虑用dojo的DeferredList方法进行分组调取,减少相应时间。具体代码如下。

                        idGroup = [];
			response.objectIds.forEach(function(id, i) {  // response是接口返回的数据
				var i = Math.floor(i / 150);  //每150条数据一组
				if (!idGroup[i]) {
					idGroup.push([]);
				}
				idGroup[i].push(id);
			});
			new DeferredList(idGroup.map(function(group) {  // DeferredList方法实现分组请求服务
				return request(url, {
					handleAs: 'json',
					query: {
						f: 'json',
						returnGeometry: false,
						outFields: '*',
						where: 'wg_class = \'' + wg_class + '\' and wg_oid in (' + group.join(',') + ')'
					},
					headers: {
						'X-Requested-With': null
					}
				});
			})).then(function(result) {
                                // 获取到数据进行之后的逻辑操作
				var obj = {};
				// result.forEach(function(tuple) {
				// 	if (tuple[0] === true) {
				// 		tuple[1].features.forEach(function(f) {
				// 			if (!obj[f.attributes.wg_oid]) {
				// 				obj[f.attributes.wg_oid] = [];
				// 			}
				// 			obj[f.attributes.wg_oid].push(f.attributes);
				// 		});
				// 	}
				// });
				for(i=0;i<result.length;i++){
					if(result[i][0] === true) {
						for(j=0;j<result[i][1].features.length;j++){
							var f = result[i][1].features[j];
							if (!obj[f.attributes.wg_oid]) {
								obj[f.attributes.wg_oid] = [];
							}
							obj[f.attributes.wg_oid].push(f.attributes);
						}
					}
				}
				dic[wg_class] = obj;
				defObj[wg_class].resolve(dic[wg_class]);
			});
posted @ 2020-11-11 17:01  海常7号  阅读(116)  评论(0编辑  收藏  举报