在做个彩票项目的时候,有个业务是需要一个大型的数组通过ajax把一个大型数组传到后台,网上搜了一大轮,发觉说的都是说这种方式使用ajax不符合业务要求。
或者问非所答,很少有亲自测试的。
这里做了个10W长度的数据通过post请求传到后台。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>大量数据测试</title>
</head>
<body>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
;(function(){
function fun(){
var arr=new Array();
for(var a=0;a<10;a++){
for(var b=0;b<10;b++){
for(var c=0;c<10;c++){
for(var d=0;d<10;d++){
for(var e=0;e<10;e++){
arr.push(a.toString()+b.toString()+c.toString()+d.toString()+e.toString());
}
}
}
}
}
$.ajax({
url:"post.php",
type:"post",
data:{big:arr},
success:function(data){
console.log(data);
}
})
}
function test(func){
var start = new Date().getTime();//起始时间
func();//执行待测函数
var end = new Date().getTime();//接受时间
return (end - start)+"ms";//返回函数执行需要时间
}
console.log("start:开始计时");
var time = test(fun);
console.log(time);
console.log("end:开始计时");
})();
</script>
</body>
</html>
后台只是简单的返回数据,并没有作数据处理
<?php
$big=$_POST['big'];
echo "success";
?>
得出的结果是需要416ms—422ms才能把数据作异步返回.
(提醒下,如果用的是xampp需要配置下,max_input_vars )
很明显,我这里只是0-10随机生成的5位数,但是数组长度却达到了10W,如果传到后台的方式不是以数据形式而是以字符串或者其他形式会不会减轻了传递的压力呢?
毕竟转成字符串或者其他格式,传递到后台也可以通过其他方式转换成数组形式。
说干就干,
主要是利用JSON.stringify()
var json=JSON.stringify(arr);
json.replace("[");
json.replace("]");
console.log(json);
$.ajax({
url:"post.php",
type:"post",
data:{big:json},
success:function(data){
console.log(data);
}
})
这样就将数组转换成字符串了。
而且大幅提高了速度:
提交到后台的数据,只需要处理一下分解下字符串,就可以使用了
$hello = explode(',',$_POST['big']);