Автор Тема: Может кто сталкивался (php и картинки)  (Прочитано 5222 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
Добрый день!

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

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

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

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

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

Может есть еще какие-нибудь варианты?

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
Может кто сталкивался (php и картинки)
« Ответ #1 : 19 Июля 2006, 15:08:27 »
Anthony, лишнее подключение к БД настолько замедляет ваши программы, что требуется выделенный сервер?
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
Может кто сталкивался (php и картинки)
« Ответ #2 : 19 Июля 2006, 15:24:46 »
2 лишних подключения к БД настолько замедляют работу сайта, что требуется решить проблему ;) Выделенный сервер одно из решений, и как я сказал не самое выгодное и правильное на мой взгляд. Ну а кроме того есть еще VPS ;)))

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
Может кто сталкивался (php и картинки)
« Ответ #3 : 19 Июля 2006, 16:04:47 »
Anthony, а что за графики? На основании каких данных? Если эти данные не меняются раз в несколько секунд, может быть имеет смысл кэшировать картинки?
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
Может кто сталкивался (php и картинки)
« Ответ #4 : 19 Июля 2006, 16:10:53 »
Данные меняются раз в минуту по 30 (пока 30, дальше больше будет) инстументам в 6 масштабах. Данные в принципе кешируются, но обновления все равно нужно из базы брать.

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
Может кто сталкивался (php и картинки)
« Ответ #5 : 19 Июля 2006, 16:18:15 »
Попробуйте кэшировать картинки.

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

А сам процесс подключения к БД по времени, по сравнению с созданием изображения, это ничто.
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
Может кто сталкивался (php и картинки)
« Ответ #6 : 19 Июля 2006, 17:25:28 »
Не, с кешированием картинок только гемороя больше...

Дело кстати в другом. Меня вполне устраивает время генерации картинок. Например, бывает ситуация когда графики обновляются мгновенно, а бывает зависают на несколько секунд. Я так понимаю это как раз и зависит от скорости передачи данных от базы с серверу, кстати непомню я написал что база удаленная? Т. е. когда канал быстрый, подключение и забор данных происходит быстро, а вот когда канал забит... вот и хочется ускорить работу хотя бы за счет избавления от лишних подключений.

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
Может кто сталкивался (php и картинки)
« Ответ #7 : 19 Июля 2006, 19:06:23 »
Anthony, перейдите на локальную базу. Все менее радикально, чем свой сервер устраивать.

>бывает ситуация когда графики обновляются мгновенно
Где мгновенно? В браузере? Это зависит от скорости передачи м/у базой и сервером, м/у сервером и браузером, от буфера браузера, от отрисовки страницы и еще от кучи вещей о которых даже разработчики браузеров не знают.
Чтобы оценить времы передачи данных от базы и время генерации картинки на их основе — поставьте по краям нужных участков microtime().
Блог ГО

Оффлайн Anthony

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
Может кто сталкивался (php и картинки)
« Ответ #8 : 20 Июля 2006, 13:14:47 »
Ситуация следующая: сайт хостится на Мастерхосте (платформа *nix), база находится на удаленном выделенном сервере т. к. из-за специфики программного обеспечения нужна платформа Win. Короче совместить одно с другим не получается. Переносить сайт на свой сервер да еще и виндовый не хочу, а программное обеспечение нет никакой возможности перенести на *nix-овую платформу.

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

Рядом с графиками есть простые таблички с данными, которые также обновляются без перезагрузки страницы. И эти таблички обновляются практически всегда очень быстро. А вот картинки лишь иногда быстро, а чаше всего подвисают на несколько секунт. Для картинок из базы выбирается приблизительно 2,5 Кб за одно подключение, соответственно для 3-х графиков 7,5 Кб. Это правда по максимуму, а т. к. данные кешируются думаю и одного Кб на все три графика не наберется. Для табличек тоже самое. Может быть конечно затык происходит на стыке броузера и сайта, но с этим уже ничего не сделаешь...

Оффлайн vasa_c

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 157
  • +0/-0
  • 0
    • Просмотр профиля
    • http://blgo.ru/blog/
Может кто сталкивался (php и картинки)
« Ответ #9 : 20 Июля 2006, 21:58:08 »
Anthony, а поставьте все-таки microtime() перед подключением к БД и после завершения выборки.
А так же перед началом генерации изображения и опять-таки после.
И сравните промежутки.
Блог ГО

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28