Где лучше собирать анимацию NodeJS или PHP Imagick?
Сейчас использую для сбора анимации PHP Imagick. JS собирает кадры в base64 и отправляет массив данных из кадров на сервер в PHP post запросом в формате JSON. Там уже JSON разбирается и кадры собираются при помощи Imagick в анимацию. Но заметил одну вещь, PHP при таком запросе начинает хорошо так поджирать озу.
Возник вопрос, а правильно ли вообще встал выбор на PHP, может на NodeJS этот процесс будет быстрее и с меньшими затратами ресурсов, есть у кого опыт который позволит однозначно сказать где лучше проводить сборку анимации? Или может кто подскажет по какой причине возникает такой жор памяти?
Еще возможно может кто то знает метод сборки лучше? например используя какой нибудь фреймворк php или что то еще?
Valeron Sergeev, на хабре часто слышу что GD вообще считается самой жрущей память. Поэтому даже не рассматривал такой вариант. Не уж то в сборке анимации GD выигрывает по скорости и затратам озу?
alexjet73, насчет памяти не могу сказать, но по скорости значительно быстрее, возможно на тот момент была проблема в моей криворукости, но реузальтат был когда просто картинки - имаджик, а в гифках - гд
Valeron Sergeev, а не подскажите пример создания на GD? Нашел только пример с GIFEncoder.class, но что то на выходе он выдаёт странный результат, который после кодирования в base64 не воспринимается как GIF и js выкидывает ошибку The string to be decoded contains characters outside of the Latin1 range.
Valeron Sergeev, разобрался в чем была проблема. Но в итоге на GD при помощи GIFEncoder.class анимация действительно создаётся быстро, однако в анимации появляются дефекты, в виде морганий цвета, что делает не возможным использование. Так как такой результат анимации с моргающей палитрой цвета это уж совсем не то :)
Как вы исправляли этот дефект, не подскажите?
Valeron Sergeev, ага. Вот например тут эффект не так явно видно, но принцип такой же. https://gifyu.com/image/vtYd
У 2 картинки оранжевый фон начинает моргать при анимации, похожее я вроде замечал если делаешь оптимизацию гиф и там похожие цвета усредняются или что то вроде этого, и получается такой эффект. Однако тут не нашел параметра, который бы включал или выключал эту оптимизацию. В итоге некоторые элементы в анимации просто становятся глюченными и мерцают как в сломанном ТВ :)
Valeron Sergeev, в imagick такого нет, однако он зато жрёт всю память озу у сервера. И естественно 8 из 10 запросов к скрипту просто зависают и выдают 404 через некоторое время. А free -h на сервере выдаёт 0mb free memory :)
Я в полном ступоре, как быть и как создать хорошую анимацию как Imagick но не тратя столько ресурсов как это делает GIFEncoder.class.php основанный на GD.
Мне одному кажется что ответ очевиден?
Я пока не очень понял что ты хочешь анимировать, но в 99% случае справится любая библиотека на чистом js. Или на том же самом jQuery.
Тем более что ты уже дал очень важный "звоночек" что у тебя поджирает память и зачем оно тебе тогда надо?
вы вопрос то читали?)) собрать анимацию из кадров на серверной стороне, вопрос в выборе платформы и фреймворка\библы для сбора гифки.
Причем тут анимация dom элементов?
alexjet73, Я думаю на тостере нету таких людей кто будет собирать анимацию dom на стороне сервера. Зря вы так обо мне)))
Вам же гифку собрать нужно? Я правильно понимаю??
Я бы например попробовал так сделать.Для начала, если уж совсем не удобно, то я бы стал смотреть в сторону node. Как раз будет удачная такая же самая библиотека.
Кирилл Горелов, извините если что) просто не понял к чему тут JS и Jquery))
Да про этот гифшот я знаю, но нужна именно серверная сборка, поэтому ищу исключительно серверные решения вопроса, так как выполнять эту процедуру на клиенте не совсем то, что нужно по ряду причин (их несколько и одна из них высокая нагрузка на клиенте).
В итоге пока только знаю о GifCreator PHP и Imagick. Первый очень быстро собирает и не тратит ресурсов, но есть косяк с цветами в кадрах, они иногда начинают мелькать, как будто были пропущены через оптимизацию с объединением похожих цветов в пикселях.
А Imagick при сборке тупо сжирает 200+ мб озу и ложил процесс php и 1 из 10 запросов увенчивались успехом. Однако гифка создаётся высокого качества - прям идеал.
В итоге встал вопрос либо искать что то другое или пробовать другую платформу например NodeJS либо может как то выяснить почему Imagick жрет столько памяти, или как убрать у GifCreator эту оптимизацию с цветами, которую я не смог найти в исходниках, поэтому до сих пор не понимаю откуда эти глюки.
alexjet73, ну смотри, раз проблемы с клиентом, то:
nodejs серверный, ты можешь попробовать с ним поработать. Поискать еще библиотеки.
Второй вариант, смена языка, к примеру питон или java, если проблем с изучением третьего языка нету, то там точно сможешь найти решение.
И третий для Imagick, ты можешь поставить сервер по мощнее и на отдельной машинке запускать генерацию гиф. Тут, конечно вопрос, как часто будешь генерировать гиф, а то придется ставить в очередь и ждать пока все не выполниться.
Кирилл Горелов, поэтому вот и задал вопрос, возможно кто то подскажет хорошую библу или фреймворк, или скажет что например на NodeJS такие процессы делать лучше чем на php и подскажут чем там можно собрать гиф.
Клиент и апи это точно нет, вещи с ограничениями, а апи еще и с зависимостью от сервиса.