Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: На клиенте по действию пользователя необходимо загрузить и отобразить картинку, которая формируется на сервере php-скриптом...
 
 автор: Cyrax   (29.01.2009 в 22:54)   письмо автору
 
 

Задача следующая.
Пользователь на клиентской стороне совершает некоторое действие. Javascript'ами в некоторую пустую до этого область экрана с сервера загружается изображение.
Сложность заключается в том, что подгружаемое изображение на этот момент физически не существует - его должен сформировать серверный php-код.

На сервере имеются изображения большого размера. На разных страницах сайта отображаются изображения разных размеров. Поскольку эти изображения на сервере будут часто меняться, то хранить отдельные копии изображений определённых размеров будет нецелесообразно - при изменении одного изображения придётся синхронно изменять и его копии.
Посему решено хранить на сервере только большие изображения (в одном варианте), а их разные размеры получать с помощью php-кода.

В данном случае изображения при загрузке страницы загружаться не должны - подгрузка каждого изображения происходит только по действию пользователя без перезагрузки всей страницы.

Таким образом, необходимо организовать следующую последовательность действий:
1. Пользователь совершает действие
2. JavaScript отправляет запрос серверу
3. Сервер из большого изображения лепит изображение нужного размера и возвращает его на клиентскую сторону.

Как проще всего реализовать данные действия ?

Один из вариантов - вместо img'ев использовать маленькие фреймы, в которые по действию пользователя загружать php-страницы, где php-код будет просто выводить в выходной поток изображения.

  Ответить  
 
 автор: Loki   (29.01.2009 в 23:19)   письмо автору
 
   для: Cyrax   (29.01.2009 в 22:54)
 

Судя по вопросу, Вы не знаете ни JS, ни PHP... Что же Вы хотите услышать в ответ?

Сгенерируйте на клиенте код вида
<img src="http://server.com/image.php?var=value" />

  Ответить  
 
 автор: Cyrax   (30.01.2009 в 13:58)   письмо автору
 
   для: Loki   (29.01.2009 в 23:19)
 

Только здесь проблема возникает. На странице 200 таких картинок.
При генерации страницы для этих IMG'ев указываю:
...src="image.php?id=1"...
...src="image.php?id=2"...
...src="image.php?id=3"
...
...src="image.php?id=200"


При этом скрипт image.php сделал пустым (без всяких команд).
В результате все эти 200 картинок загружаются около минуты. Это же ненормально.

// Соответственно, если убрать параметры или указать один и тот же id, то загрузка происходит мгновенно, поскольку фактически загружается только одна картинка.

Т.е. вся эта минута тратится только на 200 вызовов image.php ?

  Ответить  
 
 автор: Николай2357   (30.01.2009 в 14:03)   письмо автору
 
   для: Cyrax   (30.01.2009 в 13:58)
 

А зачем сразу? Сразу грузите обычный html , а по вызову из JS меняйте у картинок src в зависимости от выбранной.

  Ответить  
 
 автор: Cyrax   (30.01.2009 в 15:31)   письмо автору
 
   для: Николай2357   (30.01.2009 в 14:03)
 

>А зачем сразу? Сразу грузите обычный html , а по вызову из JS меняйте у картинок src в зависимости от выбранной.
А разница будет ? Что сразу страницу с src формировать, что при нажатии на кнопку на клиенте. Ведь столько же времени будут вызываться эти image.php.

На странице имеется волшебная кнопка, которая сразу все картинки отображает. Без перезагрузки страницы. Вот в этом случае мне и придётся 200 раз грузить скрипт image.php.
А почему без перезагрузки (основная причина) - состояние таблицы, которое на данный момент сформировано JS-ми (действия пользователя), должно быть сохранено. При перезагрузке страницы, естественно, таблица окажется в начальном состоянии.

Хотя всё нормально. Что-то я подумал, что страница на это время блокируется.

Только вот хостер будет ругаться - ведь проц (тестирую у себя локально) на 100% загружен в течении 60 секунд.
И непонятно, на что тратится 100% процессорного времени. Ведь это вызовы пустых скриптов и всё. Байты туда-сюда и всё. Проц у меня 3200 MГц. И 100% загрузка на 60 секунд.
Это ненормально...

  Ответить  
 
 автор: Cyrax   (30.01.2009 в 15:57)   письмо автору
 
   для: Cyrax   (30.01.2009 в 15:31)
 

Насчёт 100%-ной загрузки процессора не совсем так.
Это первые несколько секунд - 100%, далее 60-70%, из них AVP - 10-20%
Т.е. в течение 60 секунд процессор (httpd.exe, браузер, php-cgi и всё это хозяйство) занят на 50%.

  Ответить  
 
 автор: Николай2357   (30.01.2009 в 17:25)   письмо автору
 
   для: Cyrax   (30.01.2009 в 15:31)
 

>А разница будет ? Что сразу страницу с src формировать, что при нажатии на кнопку на клиенте. Ведь столько же времени будут вызываться эти image.php.
На сколько я понял, 200 раз вызывается функция ресайза. Тогда разница будет. И вполне ощутимая.

  Ответить  
 
 автор: Cyrax   (30.01.2009 в 19:42)   письмо автору
 
   для: Николай2357   (30.01.2009 в 17:25)
 

>На сколько я понял, 200 раз вызывается функция ресайза. Тогда разница будет. И вполне ощутимая.

Ресайза на клиенте не происходит. Изображение нужного размера формирует скрипт image.php.

  Ответить  
 
 автор: Loki   (30.01.2009 в 14:06)   письмо автору
 
   для: Cyrax   (30.01.2009 в 13:58)
 

>Это же ненормально.
А что тут ненормального? 200/60=3,3 запроса в секунду

  Ответить  
 
 автор: Trianon   (30.01.2009 в 19:58)   письмо автору
 
   для: Cyrax   (30.01.2009 в 13:58)
 

>// Соответственно, если убрать параметры или указать один и тот же id, то загрузка происходит мгновенно, поскольку фактически загружается только одна картинка.
>Т.е. вся эта минута тратится только на 200 вызовов image.php ?

Минута тратится на 1 вызов, на получение контента одного документа. Поскольку запрошен один документ, а не 200.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования