[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хранить или не хранить пути в до картинки в бд.
Страницы: 1, 2, 3, 4, 5
Invis1ble
Апну темку, интересует один скользкий и в то же время интересный момент smile.gif

Michael
Цитата
Если запрашивается картинка по пути "ресайзных" картинок, типа http://сайт.рф/picturessmall/300_300/id/1.jpg и этой картинки нет, то модуль отрабатывает и ее создает. Т.е. когда первый раз запросили, тогда создает обрезку.

Как друпал разруливает ситуации с одновременным запросом одной и той же картинки от нескольких клиентов сразу? Мьютексы? Если да, то что отдается непервым запросившим? Или они тупо ждут?

_____________

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

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

Michael
Ну я так в глубины кода этого довольно навороченного модуля не лазил, это только про принцип я написал.


_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Вот функция, которая за это отвечает:
_http://api.drupal.org/api/drupal/modules!image!image.module/function/image_style_deliver/7

_____________
There never was a struggle in the soul of a good man that was not hard
Krevedko
Не читал, что тут пишут, но я делаю так.
Есть папка с картинками. В корне полноразмерные (или с ресайзом под максимальный размер, допустимый на сайта, а то дай волю - будут 18мегапиксельные заливать), во внутренней папке thumb - превьюшки.
При заливке картинка ресайзится и закидывается в две папки.
В базе хранится только название картинки, которое генерится обычно - текущее время + _ориг. название картинки.
Joker - а ты что до этого впервые додумался ? smile.gif Я так делаю всю жизнь.
Invis1ble
Цитата (Michael @ 19.01.2013 - 08:06)
Вот функция, которая за это отвечает:
_http://api.drupal.org/api/drupal/modules!image!image.module/function/image_style_deliver/7

ага, вот нашел:
  // Don't start generating the image if the derivative already exists or if
// generation is in progress in another thread.

$lock_name = 'image_style_deliver:' . $style['name'] . ':' . drupal_hash_base64($image_uri);
if (!file_exists($derivative_uri)) {
$lock_acquired = lock_acquire($lock_name);
if (!$lock_acquired) {
// Tell client to retry again in 3 seconds. Currently no browsers are known
// to support Retry-After.

drupal_add_http_header('Status', '503 Service Unavailable');
drupal_add_http_header('Retry-After', 3);
print t('Image generation in progress. Try again shortly.');
drupal_exit();
}
}

Т.е. мьютексы + другие клиенты ждут, как я и предпологал.
Спасибо за ссылку на код.

_____________

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

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

Быстрый ответ:

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