我在客户端有很多由大型数组组成的数据,我需要将这些信息返回到服务器并能够轻松解析它。我在前端使用 jQuery,在后端使用 PHP (CodeIgniter)。
现在我只是使用 jQuery $.post 发布一个巨大的数组。这是一个好主意还是我应该使用几个较小的?
另外,我应该使用 jQuery 的 ajax 方法还是有比这更好的方法?
我在客户端有很多由大型数组组成的数据,我需要将这些信息返回到服务器并能够轻松解析它。我在前端使用 jQuery,在后端使用 PHP (CodeIgniter)。
现在我只是使用 jQuery $.post 发布一个巨大的数组。这是一个好主意还是我应该使用几个较小的?
另外,我应该使用 jQuery 的 ajax 方法还是有比这更好的方法?
最大帖子大小将由post_max_size
服务器的 PHP.INI 文件中的设置控制。默认设置为 8MB,这是用于发布数据的大量空间。请记住,可能还有其他因素会影响该限制(memory_limit
等)。
简而言之,如果您的 1000 个元素的大小非常小,那么使用 jQuery 进行常规发布可能是一种足够的方法。
Maybe you could try to ZIP your data, before sending it to the server. Check out this thread: JavaScript implementation of Gzip
如果您可以将所有数据合并到一篇文章中,那绝对是要走的路。浏览器,尤其是 IE (gag),当您超过同一服务器的太多同时 XHRequest 时,将会阻塞。一次太多通常意味着超过 2 个。
基本上,将数据发送到服务器的最佳实践可以总结为:“尽可能少地请求尽可能少的请求”。如何构建数据取决于您。
如果您确实通过 jQuery 发送了很多内容,请考虑使用jsend(用于压缩的 jQuery 插件,用于解压缩的 PHP 对应物)之类的东西对其进行压缩。
Darin 在这里回答了类似的问题:Sending large data to server
使用 POST HTTP 动词而不是 GET:
$.ajax({
url: '/foo',
type: 'POST',
data: { value: someVariableThatCouldBeHuge },
success: function(result) {
// TODO: process the results
}
});
或等价物:
$.post('/foo', { value: someVariableThatCouldBeHuge }, function(result) {
// TODO: process the results
});
如果 post 不是一个选项,Pekka 建议序列化数据并分成块:Sending a large parametrized data set as a GET request
您可以使用 FormData:
var formData = new FormData();
formData.append('filename', filename);
formData.append('data', data);
$.ajax({
url: "FileUploadServlet",
type: "POST",
data: formData,
cache: false,
contentType: false,
processData: false});