间隔中的Ajax调用会降低地图

时间:2015-06-29 05:12:42

标签: jquery ajax google-maps

我正在构建一个跟踪应用程序,它从经常更新的数据库中获取位置,并将最后更新的数据作为标记。我在每秒调用的间隔中使用ajax调用来检索实时更新数据。

 $.ajax({
     type: "POST",
     async:false,
     dataType: "json",
     url: "{{ url('/tracking_mysql/bt6pmSWHTfnOAjfJMlSvRQ==') }}",
     success: function(data)
     {
      @foreach($eventUsers as $eventUser)
        markers['marker' + '{{$eventUser->userId}}'] = null ;
      @endforeach
      $.each(data,function(u,v){
      markers['marker' + v['user_id']] = new google.maps.LatLng(v['Location'].split(' ')[0],v['Location'].split(' ')[1]);
     lastUpdatedTimes['lastUpdatedTime' + v['user_id']] = v['time'];
   });
  }
});

并且传递当前位置的控制器是:

 public function get_locations($eventid)
    {
            $eventId = $event_group_Idarray[0];
            $locations = DB::table('locations')
                ->select('time', 'Location','user_id')
                ->join(DB::raw('( SELECT MAX(id) as Id FROM locations GROUP BY user_id ) AS newest'), function($join)
                {
                    $join->on('locations.id', '=', 'newest.id');
                })
                ->where('event_id',$eventId)
                ->get();

            print_r(json_encode($locations));
    }

问题是在每个ajax调用期间,地图更新会冻结片刻。我确定问题是在间隔中使用ajax调用。我评论了ajax调用并在间隔中传递了随机标记,地图是平滑的。 。有什么解决方案可以用于我的目的吗?

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您正在使用同步Ajax调用。 尝试异步Ajax调用。



var jqAjax = null;

function updateMap() {
	//this will abort old pending request
	jqAjax && jqAjax.abort();
	
	jqAjax = $.ajax({
		type: "POST",
		dataType: "json",
		url: "{{ url('/tracking_mysql/bt6pmSWHTfnOAjfJMlSvRQ==') }}",
		success: function(data) {@
			foreach($eventUsers as $eventUser)
			markers['marker' + '{{$eventUser->userId}}'] = null;@
			endforeach
			$.each(data, function(u, v) {
				markers['marker' + v['user_id']] = new google.maps.LatLng(v['Location'].split(' ')[0], v['Location'].split(' ')[1]);
				lastUpdatedTimes['lastUpdatedTime' + v['user_id']] = v['time'];
			});
		}
	});
}




答案 1 :(得分:0)

有一件事我想建议使用带有Ajax调用的“cache:true”参数,这可能会减少一些性能问题(它不会完全减少,但有助于减少)。< / p>