Forum Webscript.Ru

Программирование => PHP => Тема начата: Anthony от 19 Июля 2006, 14:55:06

Название: Может кто сталкивался (php и картинки)
Отправлено: Anthony от 19 Июля 2006, 14:55:06
Добрый день!

Столкнулся я со следующей проблемой, на странице есть 3 картинки, каждая из которых генерируется на основе данных из базы. Т. е. на самой странице вставлена картинка в src="" которой прописан адрес скрипта, который на основе параметров GET выбирает из базы соответствующие данные и строит график. Если кому интересно: http://www.amity.ru/index.php?categoryid=8

Так вот, в этом самом скрипте прописано подключение к БД, а т. к. графиков на странице 3, соответственно за одну загрузку страницы происходит 3 подключения. Это и базу нагружает и скорость работы сильно снижает. Кроме того, все графики обновляются без перезагрузки страницы, поэтому запрашивать данные на самой странице нельзя.

У хостера помимо всего прочего нет возможности использовать постоянное соединение с БД, которое бы решило проблему.

Может у кого встречались подобные проблемы? Как их решали?

Я вижу два решения, оба мне не очень нравятся. Первое - выделенный сервер, ну или VPS, это дороже и геморойнее. Второе - работать через сессии, т. е. один скрипт запрашивает все данные с одного подключения и сохраняет их в сессионных переменных, а графики уже выбирают оттуда. Честно говоря не охота переделывать ;)

Может есть еще какие-нибудь варианты?
Название: Может кто сталкивался (php и картинки)
Отправлено: vasa_c от 19 Июля 2006, 15:08:27
Anthony, лишнее подключение к БД настолько замедляет ваши программы, что требуется выделенный сервер?
Название: Может кто сталкивался (php и картинки)
Отправлено: Anthony от 19 Июля 2006, 15:24:46
2 лишних подключения к БД настолько замедляют работу сайта, что требуется решить проблему ;) Выделенный сервер одно из решений, и как я сказал не самое выгодное и правильное на мой взгляд. Ну а кроме того есть еще VPS ;)))
Название: Может кто сталкивался (php и картинки)
Отправлено: vasa_c от 19 Июля 2006, 16:04:47
Anthony, а что за графики? На основании каких данных? Если эти данные не меняются раз в несколько секунд, может быть имеет смысл кэшировать картинки?
Название: Может кто сталкивался (php и картинки)
Отправлено: Anthony от 19 Июля 2006, 16:10:53
Данные меняются раз в минуту по 30 (пока 30, дальше больше будет) инстументам в 6 масштабах. Данные в принципе кешируются, но обновления все равно нужно из базы брать.
Название: Может кто сталкивался (php и картинки)
Отправлено: vasa_c от 19 Июля 2006, 16:18:15
Попробуйте кэшировать картинки.

Т.е. пусть на диске будет сохранено изображение, а где-то установлен флаг актуальности его.
При запросе графика если флаг установлен — отдается уже существующая. Не установлен — формируется новая, флаг устанавливается в true.
Соответственно, при изменении каких-либо данных флаг сбрасывается.

А сам процесс подключения к БД по времени, по сравнению с созданием изображения, это ничто.
Название: Может кто сталкивался (php и картинки)
Отправлено: Anthony от 19 Июля 2006, 17:25:28
Не, с кешированием картинок только гемороя больше...

Дело кстати в другом. Меня вполне устраивает время генерации картинок. Например, бывает ситуация когда графики обновляются мгновенно, а бывает зависают на несколько секунд. Я так понимаю это как раз и зависит от скорости передачи данных от базы с серверу, кстати непомню я написал что база удаленная? Т. е. когда канал быстрый, подключение и забор данных происходит быстро, а вот когда канал забит... вот и хочется ускорить работу хотя бы за счет избавления от лишних подключений.
Название: Может кто сталкивался (php и картинки)
Отправлено: vasa_c от 19 Июля 2006, 19:06:23
Anthony, перейдите на локальную базу. Все менее радикально, чем свой сервер устраивать.

>бывает ситуация когда графики обновляются мгновенно
Где мгновенно? В браузере? Это зависит от скорости передачи м/у базой и сервером, м/у сервером и браузером, от буфера браузера, от отрисовки страницы и еще от кучи вещей о которых даже разработчики браузеров не знают.
Чтобы оценить времы передачи данных от базы и время генерации картинки на их основе — поставьте по краям нужных участков microtime().
Название: Может кто сталкивался (php и картинки)
Отправлено: Anthony от 20 Июля 2006, 13:14:47
Ситуация следующая: сайт хостится на Мастерхосте (платформа *nix), база находится на удаленном выделенном сервере т. к. из-за специфики программного обеспечения нужна платформа Win. Короче совместить одно с другим не получается. Переносить сайт на свой сервер да еще и виндовый не хочу, а программное обеспечение нет никакой возможности перенести на *nix-овую платформу.

По поводу скорости обновления.

Рядом с графиками есть простые таблички с данными, которые также обновляются без перезагрузки страницы. И эти таблички обновляются практически всегда очень быстро. А вот картинки лишь иногда быстро, а чаше всего подвисают на несколько секунт. Для картинок из базы выбирается приблизительно 2,5 Кб за одно подключение, соответственно для 3-х графиков 7,5 Кб. Это правда по максимуму, а т. к. данные кешируются думаю и одного Кб на все три графика не наберется. Для табличек тоже самое. Может быть конечно затык происходит на стыке броузера и сайта, но с этим уже ничего не сделаешь...
Название: Может кто сталкивался (php и картинки)
Отправлено: vasa_c от 20 Июля 2006, 21:58:08
Anthony, а поставьте все-таки microtime() перед подключением к БД и после завершения выборки.
А так же перед началом генерации изображения и опять-таки после.
И сравните промежутки.