Какова наилучшая практика для передачи больших объемов данных на стороне клиента на сервер? - PullRequest
4 голосов
/ 15 октября 2011

У меня много данных на стороне клиента, состоящих в основном из больших массивов, и мне нужно вернуть эту информацию на сервер и иметь возможность легко ее анализировать. Я использую jQuery на внешнем интерфейсе и PHP (CodeIgniter) на заднем конце.

Сейчас я просто размещаю один огромный массив с помощью jQuery $ .post. Это хорошая идея, или я должен использовать несколько меньших?

Кроме того, я должен использовать jjuery-методы ajax или есть что-то лучше этого?

Ответы [ 5 ]

2 голосов
/ 15 октября 2011

Максимальный размер сообщения будет регулироваться параметром post_max_size в файле PHP.INI вашего сервера. Значение по умолчанию составляет 8 МБ, что является ОЧЕНЬ большим пространством для данных поста. Помните, что на этот лимит могут влиять и другие факторы (memory_limit и т. Д.).

Короче говоря, если ваши 1000 элементов довольно малы по размеру, то обычный пост с jQuery, вероятно, является адекватным подходом.

1 голос
/ 15 октября 2011

Возможно, вы могли бы попытаться заархивировать ваши данные, прежде чем отправлять их на сервер.Проверьте эту тему: Реализация JavaScript Gzip

1 голос
/ 15 октября 2011

Если вы можете объединить все данные в один пост, это определенно верный путь.Браузеры, особенно IE (gag), будут задыхаться, когда вы превышаете слишком много одновременных XHRequests к одному и тому же серверу.Слишком много за один раз, как правило, означает больше, чем 2.

Как правило, наилучшую практику отправки данных на сервер можно обобщить следующим образом: «как можно меньше при минимально возможном количестве запросов».Как вы структурируете данные, зависит от вас.

Если вы действительно отправляете много через jQuery, рассмотрите возможность сжатия его чем-то вроде jsend (плагин jQuery для сжатия с помощью PHPаналог для распаковки).

0 голосов
/ 18 апреля 2013

Вы можете использовать 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});
0 голосов
/ 15 октября 2011

Дарин ответил на аналогичный вопрос здесь: Отправка больших данных на сервер

Используйте глагол 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
});

Пекка предложил сериализовать данные и разбить их на фрагменты, если публикация невозможна: Отправка большого параметризованного набора данных в виде запроса GET

...