Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: кэширование
Форумы портала PHP.SU » PHP » Программирование на PHP » кэширование

Страниц (2): [1] 2 »
 

1. phphel - 13 Февраля, 2010 - 12:38:03 - перейти к сообщению
У меня есть скрипт, который выдаёт кучу картинок через ресайзер
то есть <img src=script.php?img=kartinka.jpg>

и я так подозреваю, что это сильную нагрузку на сервер производит, да и
вообще страница начинает медленнее грузиться, может есть какой выход?
кеширование сделать там..подскажите..
2. JustUserR - 13 Февраля, 2010 - 13:15:14 - перейти к сообщению
phphel Вообще если картинка в теги img выглядит именно так без дополнительного JS-кода то браузеры зачастую вообще не запрашивают ее повторно - но при этом ничто не мешает сохранять вам сгенерированные картинки в определенную папку и потом ссылать уже на готовые картинки
3. phphel - 13 Февраля, 2010 - 13:19:45 - перейти к сообщению
Цитата:
но при этом ничто не мешает сохранять вам сгенерированные картинки в определенную папку и потом ссылать уже на готовые картинки


такой вариант отпадает сразу, я бы и тему не создавал, если бы он был возможен ))
никакого js кода нет...
(Добавление)
сайт для телефонов, так что браузер не кэширует..
4. JustUserR - 13 Февраля, 2010 - 13:39:06 - перейти к сообщению
phphel пишет:
Сайт для телефонов, так что браузер не кэширует
Итак понятно что кеширование на клиенте отпадает и вариант с простым сохранением картинок в сгенерированную папку отпадает тоже - но к примеру если речь идет не о долговременном сохранеии картинок - то можно воспользоваться memcached и проверять и перед тем как начать генерировать картинку проверять нет ли уже такой в кеше
5. phphel - 13 Февраля, 2010 - 13:45:09 - перейти к сообщению
ok, щас буду читать насчет memcached, так как первый раз с ним сталкиваюсь )

но мне бы все таки решение для долгосрочного хранения..
(Добавление)
не в качестве рекламы http://webo[dot]in/articles/all/http-caching/ отличная статья про кэш..

и опять вопрос, как мне сделать, что бы кэшировались только картинки?так как страница на которой они расположены динамическая...
6. voltag - 13 Февраля, 2010 - 16:37:09 - перейти к сообщению
Здравствуйте.
Недавно сам разбирался с такой проблемой.
Настоятельно советую при помещении самих картинок на сайт(загрузке) их ресайзить и только потом при обращении пользователя выводить в ХТМЛ. Если Вы грабите картинки, то можете написать Кешь простой... обращайтесь к картинке.. сравниваете например 10 пикселей и решаете забирать картинку в Кешь или нет..После этого выводите нормальный контент.. можете делать Хешь графического файла и сравнивать Хеши.
Хотел поинтересоваться а куча картинок это сколько примерно в цифрах.

phphel пишет:
Цитата:
но при этом ничто не мешает сохранять вам сгенерированные картинки в определенную папку и потом ссылать уже на готовые картинки


такой вариант отпадает сразу, я бы и тему не создавал, если бы он был возможен ))


поясните почему он отпадает... простите но я не понял. Даже если у Вас около 5 тысяч картинок можно просто распихать их правильно по папкам. И тормозов не будет.
7. phphel - 13 Февраля, 2010 - 19:19:01 - перейти к сообщению
Картинок намного больше чем 5000...

Цитата:
но при этом ничто не мешает сохранять вам сгенерированные картинки в определенную папку и потом ссылать уже на готовые картинки


это отпадает так как придётся переписывать очень много в скрипте, я и сам понимаю, что это лучший вариант...
но еще проблема в том, что картинок как я уже говорил очень большое количество, и на ресайз, + раскидывание по папкам, а это
естественно добавляет еще проблем, + сайт для телефонов...ресайзить правильно оч сложно...

ладно, как я понял, все таки нужно переписывать сам скрипт...
8. voltag - 14 Февраля, 2010 - 09:55:48 - перейти к сообщению
phphel пишет:
Картинок намного больше чем 5000...


Вот Вам маленький совет по раскидыванию в папках графических файлов.... (или решение)
Для того чтобы не нагружать Ваш сервер Вы можете создать специфическое древо каталогов(как бы индексирование).
Пример:
дано: 5 тысяч картинок с именами в виде ХЕША самих картинок.
Решение:
Создаём директории для картинок например massimg
потом в этой директории создаём директории от A до Z и от 0-9 и помешаем туда картинки. Признак того, что картинку надо положить в директорию служит первая буква Хеша.... таким образом мы уменьшаем количество картинок в директории.. и потом мы сможем легко вычислить путь до них... если имя картинки есть в базе. Если и этого не хватает можно углубить до уровня 2... создать в каждом первичном каталоге от A до Z... ещё группу каталогов от A - Z 0-9 и помешать в соответсвии с первыми Двумя буквами:

Например Хешь МД5 картинки (её файловое имя) вот такой
c93d3bf7a7c4afe94b64e30c2ce39f4f

значит надо её поместить в каталоги с/9/ или massimg/c/9/

Лучше конечно создавать папки динамически (по мере надобности) чтобы не плодить лишнего.

Надеюсь Вам поможет
9. JustUserR - 14 Февраля, 2010 - 11:16:22 - перейти к сообщению
[quote=phphelОтличная статья про кэш.. и опять вопрос, как мне сделать, что бы кэшировались только картинки?так как страница на которой они расположены динамическая...[/quote]Хм так вы не остановились на использовании memcached - ведь на вашем сайте скорее всего не требуются все 5000 картинок сразу - а при обращении к наиболее частым их можно закешировать на некоторое время - это впринципе некая середина между временем на генерацию и местом для сохранения картинок
voltag пишет:
Поясните почему он отпадает... простите но я не понял. Даже если у Вас около 5 тысяч картинок можно просто распихать их правильно по папкам. И тормозов не будет.
Да действительно я соглашусь с вами ведь если важно именно быстродейсвтие то необходимо просто сохранить эти картинки по папкам и выводить их - при этом и расположения не так важно если иметь номер картинки по некоторым паравилам
10. valenok - 14 Февраля, 2010 - 11:34:54 - перейти к сообщению
5000 картинок хранить в памяти, да и 1000 — не очень хорошая затея.
Вариантов на самом деле не много. Можете их даже хранить не у себя, а заливать на какой нибудь imageshack и сохранять в базе путь.
Но мне не очень понятно чего вы хотите добиться, если переписывать скрипт или что-то менять в структуре каталогов не входит в ваши интересы.
11. JustUserR - 14 Февраля, 2010 - 11:45:14 - перейти к сообщению
valenok пишет:
5000 картинок хранить в памяти, да и 1000 — не очень хорошая затея.
Я имел в виду не все 5000 картинок хранить в memcached а те последние одинаковые которые выдавались пользователю - и с ограничением по времени на хранения Улыбка Я с самого начала предлагал варианет с сохранением картинок в виде файлов в папке но автору такое не подходило Улыбка
12. voltag - 14 Февраля, 2010 - 14:43:51 - перейти к сообщению
Я думаю все наши советы и решения не попадут в точку пока мы не узнаем истинную задачу. Потому, что мы обсуждаем усовершенствование метода решения задачи о которой мы по большому счёту ничего не знаем, кроме того что есть сайт для мобильных телефонов на котором надо выводить картинки, причём урезаные!!???
Прошу Вас phphel уточнить саму задачу. Мы не знаем что это за сайт, можно ли вообще менять код или можно менять шаблогы... можно ли лезть в Базу(а её может и не быть).. откуда наконец берутся картинки, они грабятся, они уже залиты на сервер, они заливаются на сервер каждый день по 1 тысячи штук в архиве...
И сколько намного больше 5000!??? 10К -20К... миллион??? Если варианты не подходят, то я могу предположить или догадываться, что Вы, например, делайте минигугл с поиском картинок и их обрезаете или что-то типо этого????

Вариант от valenok - отличный
Вариант от JustUserR - отличный
13. phphel - 14 Февраля, 2010 - 17:18:07 - перейти к сообщению
voltag, спасибо, способ хороший, но у меня немного другая проблема ))
с вложенностью всё норм..

JustUserR, я так понял что memcached здесь будет лишним..

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

спасибо всем кто откликнулся в решении данного вопроса.

to voltag:

всё проще..

есть скрипт, для вап сайта, что-то наподобие "ленты новостей".

сначала в админке добавляешь новость, потом сами картинки, причём в нынешней версии картинки добавляются "как есть"

но это админка, дальше уже идёт пользовательский интерфейс, тоесть, юзерам нужно выводить картинки в уменьшенном виде,
примерно по 10 шт на 1 странице, естественно, что при клике на картинку, предлагается скачать ее, в разных форматах,
опять же на лету всё делается...
14. voltag - 14 Февраля, 2010 - 18:19:57 - перейти к сообщению
phphel я рад что проблема решилась
15. JustUserR - 14 Февраля, 2010 - 18:29:28 - перейти к сообщению
phphel пишет:
JustUserR, я так понял что memcached здесь будет лишним..
Решил проблему так, что вместо ресайза "на лету", буду сначала ресайзить их
на локальном сервере, потом закачивать, а уж потом отдавать юзеру в нужном формате.
Понятно то есть вы все равно держите оба варианта картинки - уменьшенный вариант и оригинальный вариант - и кстати как вариант можно использовать ресайз на клиенте например посредставами ActiveX или Flash и закачкой соответствующих вариантов на сервер - тем более что на браузере у администратора по сути можно устанавливать любые средства
voltag пишет:
Вариант от valenok - отличный
Вариант от JustUserR - отличный
Да в принципе это достаточно стандартные решение при подходе с разной стороны

 

Powered by ExBB FM 1.0 RC1