Как увеличить скорость преобразования png в base64


  • Banned

    Всем доброго времени суток, вот столкнулся с лимитами... Суть проблемы, достаем из файла картинки png формата и конвертируем в base64, примерно по времени 3,5 минуты получается преобразовать 6000 картинок, весом в 15 кб. Подскажите, как можно уменьшить время? Пробовал асинхронную загрузку... Не помогло... Время стало еще больше, чем обработка в 1 потоке...



  • @Игорь777 Попробуйте Nodejs, но очевидно, что скорость напрямую зависит от вашего диска


  • Banned

    @UserTrue На ПК у меня действительно древний жесткий диск, но на сервере он в 100 раз лучше, но даже там... время не поменялось...По поводу nodeJS, я профан совсем...



  • @Игорь777 said in Как увеличить скорость преобразования png в base64:

    Всем доброго времени суток, вот столкнулся с лимитами... Суть проблемы, достаем из файла картинки png формата и конвертируем в base64, примерно по времени 3,5 минуты получается преобразовать 6000 картинок, весом в 15 кб. Подскажите, как можно уменьшить время? Пробовал асинхронную загрузку... Не помогло... Время стало еще больше, чем обработка в 1 потоке...

    Для начала опишите, как именно вы преобразовываете изображение в base64 и для чего? Сам файл можно сразу прочитать в base64 или отправить файл можно без предварительного чтения в base64 просто прикрепив файл к запросу


  • Banned

    @Fox

    1. Вариант:
      а) Получаю информацию о файлах и сохраняю путь в переменную.
      б) Далее произвожу поиск файлов png в папке и получаю список с адресами картинок в папке.
      в) Затем устанавливаю цикл "FORECH", в котором читаю каждый файл по порядку и сохраняя в base64 формата в переменную.
      г) Затем значение переменной сохраняю в список.

    При таком формате, на 6000 картинок, каждая из них весит от 12 до 16 кб уходило в районе 14 минут... Если без пункта "г" то скрипт выполнялся за 3.5 минуты...

    Пробовал вместо цикла FORECH делать функцию, а вместо списка делал ресурс - результат еще хуже, видать каждый раз вызывать функцию.. тоже тратиться не мало времени.

    Но проблему я решил, вспомнил где-то на форуме кто-то говорил, если заранее известно сколько нужно повторять цикл, то лучше использовать FOR. Попробовал я FOR, результат - 11 сек, если без пункта "г", то 3 сек!) Я даже обалдел. Такая колоссальная разница между этими 2-мя циклами... Спасибо всем, кто отозвались и хотели помочь)



  • @Игорь777 ничего не понял )) Но про циклы отмечу, что под капотом все 3 цикла while, for, forEach работают одинаково



  • @Игорь777 said in Как увеличить скорость преобразования png в base64:

    @Fox

    1. Вариант:
      а) Получаю информацию о файлах и сохраняю путь в переменную.
      б) Далее произвожу поиск файлов png в папке и получаю список с адресами картинок в папке.
      в) Затем устанавливаю цикл "FORECH", в котором читаю каждый файл по порядку и сохраняя в base64 формата в переменную.
      г) Затем значение переменной сохраняю в список.

    При таком формате, на 6000 картинок, каждая из них весит от 12 до 16 кб уходило в районе 14 минут... Если без пункта "г" то скрипт выполнялся за 3.5 минуты...

    Пробовал вместо цикла FORECH делать функцию, а вместо списка делал ресурс - результат еще хуже, видать каждый раз вызывать функцию.. тоже тратиться не мало времени.

    Но проблему я решил, вспомнил где-то на форуме кто-то говорил, если заранее известно сколько нужно повторять цикл, то лучше использовать FOR. Попробовал я FOR, результат - 11 сек, если без пункта "г", то 3 сек!) Я даже обалдел. Такая колоссальная разница между этими 2-мя циклами... Спасибо всем, кто отозвались и хотели помочь)

    Вы написали то КАК вы решаете свою задачу, но не описали какую именно задачу вы решаете этим способом


  • Banned

    @Fox В конечном счете, я произвожу операцию поиска одного изображения в другом.... И при совпадении сохраняю координаты, но самое печальное... Что во время этой операции... BAS в прямом смысле висит, ни лог не посмотреть ничего не сделать... Может и выкинуть...


  • Banned

    @Игорь777 Точнее выкидывает( Что-то с циклом FOR под конец цикла происходит и BAS крашится... с forech все хорошо... Если нужно могу скрипт приложить.



  • @Игорь777 said in Как увеличить скорость преобразования png в base64:

    @Fox В конечном счете, я произвожу операцию поиска одного изображения в другом.... И при совпадении сохраняю координаты, но самое печальное... Что во время этой операции... BAS в прямом смысле висит, ни лог не посмотреть ничего не сделать... Может и выкинуть...

    Добавьте секундную задержку в цикл, если это сильно замедлит процесс, можете создать условие, что бы сон выполнялся скажем каждые 10 итераций или 100


  • Banned

    @Fox Так я пробовал всего 5 картинок сравнивать... В конце цикл почему-то ломается... хоть 500, разницы нет...



  • @Игорь777 said in Как увеличить скорость преобразования png в base64:

    @Fox Так я пробовал всего 5 картинок сравнивать... В конце цикл почему-то ломается... хоть 500, разницы нет...

    Без примера скрипта не скажу точно, но зависание интерфейса BAS происходят при бесконечных или очень больших циклах без задержки.
    По поводу сравнения, вы можете прочитать один раз все изображения и внести их в базу данных, работа с базой будет быстрее, чем с файлами. Если изображения без шума (то есть одинаковые) то можно вообще хешировать изображение и сравнивать уже хеши, это будет происходить мгновенно


  • Banned

    @Fox Изображения разные, хешировать не получиться... А вот с базой надо будет попробовать, спасибо за направление...


Log in to reply