[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файла на сервер AJAX
Страницы: 1, 2
AllesKlar
Чет уныло на выходных как-то, один тролинг бедной девушки smile.gif

Вот вам задачка в коллективный разум, а то самому ленно искать.

Имеем: Пользователь загружает файлы на сервер через веб-интерфейс, проще говоря, через браузер.
Размер файла ограничен 10 gb (хотя, это не суть важно)
Можно грузить параллельно несколько файлов
Загрузка должна быть через AJAX (ну или первый запрос кинуть через AJAX, если уместны другие технологии)

Текущая реализация:
режем файл на чанки, кодируем в base64, (FileReader() readAsDataURL(data) ), считаем md5 сумму чанки, шлем на сервер, сервер открывает файлу сессию (на случай мультизагрузки, чтобы понимать, чей чанк прилетел), сравнивает чанку с полученной с md5 суммой, и клеит файл у себя.

Все хорошо, но скорость....
Загружаю 2 gb файл, скорость 700-800 kb/sec
Кинул тот же файл по ftp - 1,5 mb/sec
Оно понятно, передаем в текстовом представлении (base64), объем трафика на файл почти 1,3 от самого файла, подсчет контрольных сумм, склейка... всё это стоит времени. Но, блин, аж в два раза скорость проседает. Обидненко как-то smile.gif

Есть идеи?

_____________
[продано копирайтерам]
chee
AllesKlar, по веб-сокетам можешь передать, если проблема в количестве запросов к серверу.

Цитата (AllesKlar @ 25.03.2018 - 01:06)
один тролинг бедной девушки

правильно слово ты выбрал, бедной. На серое вещество бедной. А еще быдловатой.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
AllesKlar
chee
Нет, проблемы в количестве запросов к серверу нет.
Проблема в том, что AJAX - это все же http, и данные шлются в тексте. И видео-файл в 2gb при трансфере превращается в 2.6 gb текста, при том, что сначала на клиенте бинарные данные нужно перевести в текст, посчитать контрольные суммы, а потом на сервере это все Г назад в бинарные данные конвертировать. Отсюда падение производительности.

Сокеты - вариант, они умеют бинарные данные передавать.
В понедельник запрошу на работе время на рефакторинг, надеюсь, от наглости моей не подохнут smile.gif

Цитата
А еще быдловатой.
ласки девушке не хватает, ласки smile.gif обычного мужского ху.. ласки smile.gif

_____________
[продано копирайтерам]
Invis1ble
Цитата (chee @ 25.03.2018 - 03:02)
правильно слово ты выбрал, бедной. На серое вещество бедной. А еще быдловатой.

Ты че такой дерзкий? Щас она приедет и тебя с прогиба как кинет! laugh.gif laugh.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Эли4ка
Цитата
Есть идеи?

Через динамически создаваемые фреймы пробовали? Или считаете устаревшей технологией?
Плюс сколько замеров было сделано? Всегда в фтп загрузке выше в 2 раза?
Цитата
Отсюда падение производительности.

Падение производительности, а падение скорости тут при чем? Или вы хотите сказать, что это зависит напрямую?
Цитата
один тролинг бедной девушки

Разве? wink.gif
Цитата
правильно слово ты выбрал, бедной. На серое вещество бедной. А еще быдловатой.

Если сможете пояснить за свои слова-пожалуйста, нет-пустобрех.
Цитата
ласки девушке не хватает, ласки smile.gif обычного мужского ху.. ласки

Зря ты так. разве в этом счастье?
Цитата
Ты че такой дерзкий? Щас она приедет и тебя с прогиба как кинет!

Ерунда.
killer8080
Цитата (AllesKlar @ 25.03.2018 - 00:06)
Оно понятно, передаем в текстовом представлении (base64), объем трафика на файл почти 1,3 от самого файла, подсчет контрольных сумм, склейка...

По моему ты сам себе проблемы создаёшь.
Во первых, зачем кодить в base64? Чем не устраивает Content-Transfer-Encoding: binary ?
Во вторых нужен ли подсчёт md5, когда tcp сам по себе транспорт с гарантированной доставкой?

Почему бы не использовать jquery плагин?
https://github.com/blueimp/jQuery-File-Uplo...ed-file-uploads
Эли4ка
Цитата
Почему бы не использовать jquery плагин?
https://github.com/blueimp/jQuery-File-Uplo...ed-file-uploads

это кстати тоже через скрытые фреймы laugh.gif
killer8080
Цитата (Эли4ка @ 25.03.2018 - 10:24)
это кстати тоже через скрытые фреймы

с чего ты это взяла? Ты хоть по этой ссылке ходила? user posted image

Цитата
Chunked file uploads
Sebastian Tschan edited this page on 9 Jul 2013 · 32 revisions


Chunked file uploads are only supported by browsers with support for XHR file uploads and the Blob API, which includes Google Chrome and Mozilla Firefox 4+.
Эли4ка
https://github.com/blueimp/jQuery-File-Uplo...me-transport.js
Я с ней работала очень плотно. Сейчас она перешла на новые технологии, но скрытые фреймы там тоже есть.
killer8080
Цитата (Эли4ка @ 25.03.2018 - 13:04)
но скрытые фреймы там тоже есть.

Есть, но это очевидно fallback для старых браузеров, без поддержки XHR2, там ни о каких чанках и речи быть не может.

Эли4ка
так может они и не нужны,раньше то ведь как-то обходились
killer8080
Цитата (Эли4ка @ 25.03.2018 - 14:00)
так может они и не нужны,раньше то ведь как-то обходились

раньше и без ютюбов обходились, жизнь же на месте не стоит smile.gif
А теперь представь, грузишь ты видео на сервер, размером в пару гигов, через говёный 3G модем, и через час мучений вдруг дисконнект на 98% ... rolleyes.gif
Эли4ка
Цитата
А теперь представь, грузишь ты видео на сервер, размером в пару гигов, через говёный 3G модем, и через час мучений вдруг дисконнект на 98% ...

Не раз сталкивалась. Решали такую проблему через флеш некоторые.
Цитата
раньше и без ютюбов обходились, жизнь же на месте не стоит

Верно, тут не спорю.
killer8080
Цитата (Эли4ка @ 25.03.2018 - 15:29)
Не раз сталкивалась. Решали такую проблему через флеш некоторые.

flash это левый плагин, у клиента он может быть не установлен, опера например по умолчанию его блокирует, пока юзер явно не разрешит запуск. На маках вроде его вообще не было из-за лицензионных ограничений, если не ошибаюсь.
В любом случае суть не меняется, если нужно организовать докачку, всё равно нужно большой файл бить на чанки. Для даунлоада они есть на уровне стандарта, а для аплоада приходится изголяться. smile.gif
Эли4ка
Цитата
На маках вроде его вообще не было из-за лицензионных ограничений, если не ошибаюсь.

Вот про это даже не слышала. Тогда Microsoft Silverlight она была на эту платформу. Правда в 2013 разработку прекратили вовсе.
Цитата
flash это левый плагин, у клиента он может быть не установлен, опера например по умолчанию его блокирует, пока юзер явно не разрешит запуск.

Было дело.
Цитата
В любом случае суть не меняется, если нужно организовать докачку, всё равно нужно большой файл бить на чанки. Для даунлоада они есть на уровне стандарта, а для аплоада приходится изголяться.

Верно, тут я поспорить не могу.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.