webew
Войти » Регистрация
 
PHP

Скорость создания изображения в PHP

14 ноября 2008, 4:48
Автор: 1234ru
Есть задача вывести со стороннего сервера картинку с числом, которое генерится на сервере (по типу счётчиков с числом посетителей на иконке счетчика).
Обычно это делают, конструируя изображение на сервере кодом вида

$image = ImageCreateFromGif('image.gif'); // создает изображение из рисунка
$tx = ImageColorAllocate($image,$color1,$color2,$color3); // цвет текста
ImageString($im,0,10,21,'число',$tx);
ImageDestroy($im);


И картинку выводят на целевой сайт тегом <img src="адрес к скрипту, генерирующему картинку" />.


Мне пришел в голову другой подход: статичную картинку (без текста) подложить под текст в виде backgroud'а, а сам текст уже сгенерить в скрипте, например, через AJAX.
Преимущество такого подхода в том, что ресурсоемкая (как мне кажется) задача создания gif-изображения и работы с ним заменяется на простую отдачу числа.
Но вижу и недостатки:

- вместо одного запроса на удаленный сервер будет два: один - за картинкой (хотя и статичной), второй - AJAX-запрос за числом.

- возможные проблемы с результирующим видом иконки, которые могут возникнуть в силу особенностей стиля конечного сайта: например, стиль может быть прописан так, что шрифт текста над картинкой будет не того размера или вообще съедет с нее (хотя, этого можно, видимо, избежать, точно прописав стиль)


Как считаете?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

bur

Мысль интересная. Вижу следующие плюсы:
1) Статичную фоновую картинку можно кэшировать на стороне клиента, что нельзя было делать раньше для картинки с числами.
2) Из-за (1) имеем не два запроса, как предполагалось, а один, для получения текстовых данных, что снизит нагрузку на сервер, которому не придется генерить картинки.

Минусы:
1) Код счетчика существенно увеличится, как за счет JavaScript-части, так и за счет стилей, которые должны быть грамотно написаны, чтобы верстка страницы не влияла на внешний вид счетчика. Задача с версткой вполне решаемая. А вот вместо AJAX я бы рекомендовал использовать другой способ асинхронного запроса: динамическую генерацию тега <SCRIPT>, что существенно сократит объем используемого JavaScript-кода.
2) Юзеры без JavaScript-а идут лесом. Но таких в целом мало, и это можно пофиксить с помощью обычного счетчика в контейнере <NOSCRIPT>.

В целом, идея рисовать статистику версткой мне нравится больше :-)
Хотя считаю, что такие счетчики должны умереть, т.к. не очень-то и нужны. Лучше иметь обычную статичную кнопку, которая ведет на страницу статистики и не выкаблучиваться, имхо.
14.11.2008, 11:52
Ответить

1234ru

А как можно динамически сгенерить <scipt>, если ты выдаешь HTML-код счетчика на сторонний сайт? о_О

То, что не убивает нас, делает нас инвалидами.
14.11.2008, 21:47
Ответить

bur

Под динамической генерецией тега SCRIPT я понимаю один из способов создания асинхронного запроса. Он происходит полностью на машине клиента средствами JavaScript&DOM. Сервер к нему не имеет отношения.
16.11.2008, 23:23
Ответить
NO USERPIC

rgbeast

Неплохая идея, но это, ИМХО, просто усложнение, пока не доказано, что генерация картинки является узким местом.
14.11.2008, 18:09
Ответить

1234ru

Тестирование показало, что генерация картинки действительно вряд ли является узким местом. 100 000 итераций кода, приведённого в головном сообщении, для картинки размером 88х31 проходят за 14 секунд, т.е. получается ~0,14 мс на один раз (тестировалось на сервере webew).
Т.е производительность вроде не страдает, да.

Но всё равно, мне кажется, что для хорошего программиста мириться с таким кодом как-то не вполне недостойно...
То, что не убивает нас, делает нас инвалидами.
14.11.2008, 22:09
Ответить
NO USERPIC

rgbeast

Надо исходить из простоты пользователя. Если мы даем ему счетчик в виде картинки это хорошо. А если навязываем AJAX на сайт юзера без всякой необходимости, это, ИМХО, ставить интересы программиста выше пользовательских.
15.11.2008, 12:03
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100