加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

多个ajax请求php后端导致反应时间慢解决方案

发布时间:2020-12-16 03:15:15 所属栏目:百科 来源:网络整理
导读:产生的原因 var democ=new Vue({el:'#list',data:{ her:'',listData:[],listurl:ALLURL+'/index.php/Wap/Read/indexlist' },created:function(){ this.listDll() },methods:{ listDll:function(){ var that=this; that.$http({ method:'GET',url:this.listur

产生的原因

var democ=new Vue({
		el:'#list',data:{
	 			her:'',listData:[],listurl:ALLURL+'/index.php/Wap/Read/indexlist'
	 		},created:function(){
	 			this.listDll()
	 		},methods:{
	 			listDll:function(){
	 				var that=this;
           
	 				that.$http({
	 					method:'GET',url:this.listurl
	 				}).then(function(response){
	 		
	 					//console.log(response.data)
	 					var obj=JSON.parse(response.data);
	 					this.her=ALLURL;
	 					this.listData=obj.data;	               
	 				},function(error){
	 					
	 				})
	 			}
	 		}
	});

$.get(ALLURL+'/index.php/Wap/Read/indexlist',function(res){
	       		var obj=JSON.parse(res);
	       		var Data=obj.data;	      
	       	
	       }
         );
  
          $.get(ALLURL+'/index.php/Wap/Read/cases',function(res){
	       		var obj=JSON.parse(res);
	       		var Data=obj.data;	      
	       	
	       }
         );
		
         /
          $.get(ALLURL+'/index.php/Wap/Read/active',function(res){
	       		var obj=JSON.parse(res);
	       		var Data=obj.data;	      
	       	     
	       }
         );
         
     
         $.get(ALLURL+'/index.php/Wap/Read/record',function(res){
	       		var obj=JSON.parse(res);
	       		var Data=obj.data;	      
	       	
	       }
         );

多个界面请求,经执行后发现需要执行10秒左右时间,初以为是php与数据库交互花的时间过多导致,其实不然,真正原因是session文件锁导致。


当你向服务器发送一个Ajax请求时,PHP脚本也开启了session_start(),它的调用会锁定PHP的session文件。
你可能已经知道,PHP默认会把session数据存储在服务器上的文件中。因为仅仅只有一个PHP请求能改变同一个session文件,两个同时的PHP请求可能会造成典型的文件锁条件,因此,任何一个其他由PHP调用的对于同一个用户的session_start()请求将不得不等到第一个请求结束。
现在,大部分PHP框架会首先在主文件中使用session_start()。因此,如果你正在使用会调用session_start()的框架或者函数库,将会造成session文件锁,对于使用同一个浏览器的相同用户,这将延迟同时发送的Ajax请求。


简言之同一个客户端同时并发发送多个请求(如ajax在页面同时发送多个请求),且脚本执行时间较长,就会导致session文件阻塞,影响性能。因为对于每个请求,PHP执行session_start(),就会取得文件独占锁,只有在该请求处理结束后,才会释放独占锁。这样,同时多个请求就会引起阻塞。


解决方案


1.不用session

2.调用session_write_close()

3.利用session_set_save_handler()函数是实现自定义会话处理

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读