thehighhomie
@thehighhomie

Производительность jQueryAJAX: множество запросов?

Добрый день! Делаю загрузку файлов на сервер для темы wordpress. Нужно чтобы была возможность загружать сразу по 30-40 файлов. Если не трогать php.ini на сервере то можно загружать до 20 фото за раз. Хочу обойтись без настройки php.ini, так как сам лично я не буду иметь доступ к серверу и не известно что там будет потом, мне нужно реализовать задачу.

В общем мне нужен совет по AJAX, так как файлы будут отправляться на сервер именно аяксом.

Есть у меня на уме 2 варианта, либо грузить по одному файлу и для каждого файла создавать ajax отправку, либо разрешить сразу множественное закачивание, собрать все файлы в кучу и по частям отправлять аяксом.

Вот пример но он не доведен до ума:
getUploadImages();

function getUploadImages() {
  var $btn = $('#upload-img');
  var MAX_COUNT_UPLOADS = 15;

  $btn.change(function() {
    var files = $btn[0].files, accept = [], exclude = [], i; // exclude нужен будет для показа сообщения о файлах которые не были загружены (если не картинки)

    if ( !files.length ) return;

    for (i = 0; i < files.length; i++) {

      if ( files[i].type.match('image.*') ) {
        accept.push( files[i] );
      } else {
        exclude.push( files[i].name );
      }

    }

    // тут я просто для теста отправил два раза, чтобы посмотреть как вообще это работает, вроде все ок, отправляет сразу второй запрос после загрузки 15 файлов.
    var def = $.when( uploadImagesAjax( accept.splice(0, MAX_COUNT_UPLOADS) ) );

    def.done(function() {
      console.log('=============ok=======');
      uploadImagesAjax( accept.splice(0, MAX_COUNT_UPLOADS) );
    });

  });
}

function uploadImagesAjax(data) {
  var $result = $('#uploaded-container');
  var formData = new FormData();

  formData.append( 'action', 'upload_image' );
  formData.append( 'nonce', ajax.nonce );

  $( data ).each(function(key, value) {
    formData.append( 'photo-' + key, value ); // префикс photo- нужен для дополнительных манипуляций в обработчике upload_image
  });

  $.ajax({
    type: 'post',
    url: ajax.url,
    data: formData,
    processData: false,
    contentType: false,

    success: function(response) {
      var urls = JSON.parse(response);

      $(urls).each(function() {
        $result.append('<img src="' + this + '">');
      });
    }
  });
}


Ребята, подскажите пожалуйста, много я ужаса написал или нет? как лучше поступить реализуя такую задачу?

Какой вариант предпочтительнее, по одному ajax на файл отправлять, либо сделать примерно так же как я в примере показал, либо как то по другому??

Если честно я уже голову сломал, я не знаю как по производительности будет вообще отличаться реализация этих 2х вариантов.
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы