| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > технология плавного вывода на экран |
| Автор: Materium 19.12.2006, 16:20 |
| korob2001 подскажи плиз такую вещь: мой чат пишет в файл сообщения, а потом файл выводится. Скрипт обновляется заданное кол-во секунд указанное в <meta>, и выводит файл с сообщениями. Таким образом страница постоянно передёргивается, но хуже того то, что анимированные картинки длинной анимации также передёргиваются на половине и начинаются сначала!!! Посмотрев другие чаты, никакого обновления страницы я в них не нашёл. Сообщения в них спокойно вставляются, и соответсвенно картинки спокойно работают по своему циклу. По крайней мере как это сделано, при помощи чего? JavaScript? Кликнув по свойствам фрейма вывода тех чатов работает вывод идёт из .cgi |
| Автор: korob2001 19.12.2006, 21:35 |
| Ты хочешь выводить контент без перезагрузки страницы? Если да, то тебе помогут XMLHttpRequest и ActiveXObject из JavaScript. Посмотри вот http://forum.vingrad.ru/index.php?showtopic=86759&view=findpost&p=689016. Как-то писал я бегущую строку, которая основана на XMLHttpRequest и ActiveXObject. Если я не верно понял тебя, поясни задачу подробнее. ЗЫ: А почему вопрос задаёшь индивидуально, мне? Здесь же есть и другие участники, которые знакомы с Perl не хуже меня. |
| Автор: Materium 19.12.2006, 23:05 | ||||
| Спросил именно тебя так, из уважения. больше не буду ))) точнее лично писать ))) В общим ссылку я посмотрел, но там вроде немного не то что мне нужно. Или то, но в сложном для меня контексте. Сейчас я выделю упрощённый код со своего скрипта и всё будет прозрачнее:: Итак, есть набор фремов .cgi, создаваемых некоторым .cgi Один такой фрейм как обычно - текстовая область. другой .cgi фрейм получает напечатанный текст, пишет это в файл, а в конце скрипта формируется <html> и файл выводится. В полной упрощёнке так выглядит:: Пишем полученный текст в файл::
В тексте есть команда, к примеру *1, которая заменяется на <IMG> картинку. Всё это пишется в file.dat Далее, в конце скрипта, формируется html:: # Вывод чата
Если сообщение из фрейма не поступило, следовательно идёт вывод в заданное кол сек. Всё прекрасно работает. Вопрос в том, как всё организовать, весь вывод без <META http-equiv="refresh" content="8">? Как юзеры будут получать сообщения из file.dat без обновления скриптового фрейма? Тогда фрейм не будет "передёргиваться", и картинки будут отрабатывать весь свой анимационный цикл. А так после 8 сек они начинаются, соответственно, сначала. Какой JavaScript нужно вставить в этот сценарий .cgi, чтобы всё было "статично", а сообщения выводились в конец, при этом фрейму не нужно было бы пробегать весь скролл сверха до низу??? Спасибо за внимание |
| Автор: korob2001 20.12.2006, 10:02 | ||
Я уже написал, что тебе нужно. Если разберёшься, то твой фрейм не только не будет передёргиваться, он вообще не будет перезагружаться. Попробуй с этим вопросом обратиться в раздел JS, поищи там темы по ключевым словам, которые я указал и выделил выше.
Спасибо. PS: У меня сейчас проблемы с временем, запускаю проект в сеть. ;(((((( Если не разберёшься до выходных, попробую пояснить подробнее. |
| Автор: Materium 20.12.2006, 19:02 |
| Уважаемые, я понимаю что мне придётся изучить более-менее JavaScript, без него видно плохо совсем. Пойду я на форум JS и что? Мне же не голый JS интересует, а именно, самое главное, как этот чёртов JS связать с Perl в моём случае, приведённом выше. Попробую конечно ))) |
| Автор: korob2001 20.12.2006, 19:08 |
| Проэкт запустил, так что сынишку спать положу и попробую написать. |
| Автор: Materium 20.12.2006, 19:15 |
| korob2001 если б у меня уже было 100 постов я бы те поднял репутацию, несколько задач я уже научился решать с твоей помощью. |
| Автор: korob2001 21.12.2006, 19:51 | ||||||
| Привет! Вобщем написал небольшой пример, простейшего чата которому не нужна перезагрузка для вывода сообщений. 1. В каталоге /www создадим каталог chat, т.е. должен получиться такой путь /www/chat. 2. Этот код сохрани в каталог, который создал на первом шаге, в файле request.js
3. Теперь в каталоге /cgi-bin создай каталог ch, в итоге должен получиться путь /cgi-bin/ch 4. В каталоге, который был создан на третьем шаге, создай пустой текстовый файл base.txt 5. Этот код помести в тот же каталог, где расположил пустой файл base.txt на шаге 4, в файле с именем chrequest.pl
С этим кодом будет работать JavaScript Теперь в тот же /cgi-bin/ch сохрани следующий код, в файле с именем chat.pl
Теперь запусти браузер и введи адрес http://localhost/cgi-bin/ch/chat.pl. Вводи строки в поле формы и жми кнопку OK. PS: Чуть позже я прокоментирую весь код, сейчас должен отлучиться. PSS: Это простейший пример, потому он без блокировок файлов, без обработок ошибок и прочего. Вобщем тебе ещё самому придётся над всем этим поработать. |
| Автор: Materium 21.12.2006, 20:23 |
| Спасибо Короб я начну его анализировать и потом сообщу что и как у меня получилось! Сам Чат у меня готов со всеми делами, блокировками, обработками, аутентификацией и администрированием. Самый большой ступор был с сессиями, на которые ты меня сподвиг и которые я освоил, и теперь вот осталось вывод нормальный, так как это JavaScript в котором я вообще пока и ни туды, и ни сюды ))) пошёл заниматься кодом... ))) |
| Автор: Materium 21.12.2006, 22:39 | ||||||
| Итак, Короб2001, ))) тема становится горячее. Я напряг отсутствие своего мозга, и модифицировал свой код выше на основе твоего кода:: Вот так:
модифицировал chrequest.pl, запихав его в cgi-bin/chat
ИТАК, в путь, сейчас перечислю плюсы и минусы (странно что у меня вообще всё заработало ))) ):: +-ы - только один 1)Всё стало конечно приятнее, пропало передёргивание страницы!!! - -ы к сожалению их много 1)Наш с тобой код, точнее твой код, када я его запустил, када пишешь по русски - печатает на выходе ???? знаки вопроса. И ладно бы ещё знаки вопроса, попадаются обрывки разных тэгов, из-за чего у меня в чате например, вылеВзши что-то типа ??? ??ont> соответственно полетел видимо тэг <font>, так как цвета текстовые сразу изменились в чате. )))))) Это раз. 2)Скорость ужасно упала, проходит пара секунд с тех пор, когда отправляешь мессагу и потом видишь её на экране, при этом при отправке экран очищается и заполняется. Ну это может мелочи, согласен, издержки конструкций и т.д.. Всё бы ничего, но, третий минус - 3)Анимационный период картинок попрежнему сразу же начинается при релоаде страницы. (во всех чатах сообщения валят а картинки играют своё) Как я понял в яве таймаут установлен в 5 сек, то есть и анимация gif срезается и начинается вновь с каждым релоадом. 4)Почему-то теперь перестал работать мой скроллинг вниз!!! Он торчит всегда посередине теперь!!! Куда вставить код скроллинга, чтобы он торчал внизу??? Код
Уважаемый Короб2001, если вы поможете хотя бы по пунктам 1) и 4) я буду счастлив. |
| Автор: Materium 21.12.2006, 23:03 | ||||||
Короб2001 проблема №1 решена заменой
на
То есть
|
| Автор: korob2001 22.12.2006, 04:25 | ||||||||
2 и 3) Задержка в JavaScript стоит 5 секунд, т.е. он конектится к серверу каждые 5 секунд.
Попробуй измени значение на 500. Текст будет появляться примерно в 10 раз быстрее, но в тоже время картинки будут обновляться тоже в 10 рыстрее. Избавиться от этого, означает отказаться от того, что бы старые сообщения удалялись, а соответственно и размер страницы будет расти.
На такую:
Здесь мы не обновляем контент, а добавляем к нему. Но теперь у нас будут повторяться сообщения и страница будет расти с неимоверной скоростью. Единственный выход, это использовать такую анимацию в чаете, что бы её скорость была >= скорости обновления, либо вообще не анимированные, что на мой взгляд ещё лучше. Можно конечно написать апплет Java и сделать на его основе чат, это с одной сторы усложнит задачу, но зато и результат будет на лицо. Только не путай Java, с JavaScript, это абсолютно разные языки. 4. Думаю проблема в этой строке:
|
| Автор: Materium 22.12.2006, 15:02 | ||
Спасибо я ща пойду попробую поменять в JS. Дело в том что у меня стоит файл счётчик, который обновляет base.txt каждые 50 записей в него, поэтому мне сразу пришло сейчас в глову что
то что мне и нужно! ))) пойду проверю. |
| Автор: korob2001 22.12.2006, 16:04 |
| Нет, это не то, что тебе нужно. Это я тебе для примера привёл. Возьми для примера работу с файлом. Что ты делаешь, что бы очистить файл от старых записей? Правельно, сначала читаешь файл, затем по каким-то критериям отсеиваешь старые записи, затем открываешь файл для записи, тем самым очищая его и заносишь в него не отсеяную информацию. Примерно тоже самое происходит и с HTML документом. |
| Автор: Materium 22.12.2006, 16:28 |
| УУУ нет не то это что я подумал, плодаятся как тараканы. В общем меня усё устраивает, я тоже реверс взял с твоего кода массива и вывожу сообщения наверх. Скролинг так и не работает. во фрейме моём у меня scrolling="auto" всегда стояло. Пробовал функцию скрола запихать в request JS и PL. 0 эффект. Всё равно спасибо за код ))) |