|
модуль смайлов
|
| Распознования смайлов должно производится на : |
| стороне сервера (php) |
|
72% |
[ 8 ] |
| стороне клиента (javascript) |
|
27% |
[ 3 ] |
|
| Всего голосов : 11 |
|
| Автор |
Сообщение |
антон888 Два пингвина


Зарегистрирован: 05.11.2007 Сообщения: 311
13441 
|
Добавлено: Ср, 02 Янв, 2008 18:54 Заголовок сообщения: модуль смайлов |
|
|
Пришла необходимость сделать на форуме (самописном) модуль смайлов. Встаёт вопрос о том как делать распознование смайлов в тексте (чтоб было масштобируемо и не напрягозно для сервера)
Пока остановился на варианте, когда для каждого смайла делается замена на картинку с помощью поиска на регулярных выражениях(всё происходит на стороне сервера). Но так получается что полсотни раз (по количеству доступных смайлов) приходится делать поиск. Особых тормозов я не заметил пока, но чувствую что это далеко не самый рациональный способ...
Сейчас подумал о том, чтобы проводить поиск и замену на стороне клиента (яваскриптом), но тут встаёт проблема с подгрузкой картинок, на которые заменяются смайлы. Если их подгрузить (картинки) заранее, то лишний трафик..
Короче, у кого какие мнения по этому поводу? Как это лучше реализовать ? У мну уже башка болит по поводу оптимизации _________________ сайт знакомств Забудь про фразу "Мне не с кем". Всегда есть с кем! |
|
| Вернуться к началу |
|
 |
Roma-i-alena 11 1110 1000


Зарегистрирован: 03.05.2007 Сообщения: 1133 Откуда: vladimir 6191 
|
Добавлено: Ср, 02 Янв, 2008 19:05 Заголовок сообщения: |
|
|
| Цитата: | | Пока остановился на варианте, когда для каждого смайла делается замена на картинку с помощью поиска на регулярных выражениях |
Моё мнение, что это использование огромного молота для того, чтобы забить маленький гвоздик. Или использование проф.фотика ля того, чтобы сделать обычную фотку друзей. Но это, ИМХО!!!
Можно осуществять поиск и замену средствами PHP не прибегая к регуляркам - и это лучший вариант. Моё мнение что регулярки нужно использовать только в том случае, когда встроенные средства не справляются с задачей.
Ну а ежели ты шаришь в ЯваСкрипт - то вообще... _________________ Жизнь никогда не заканчивается!!!
На то, собственно говоря, она и ЖИЗНЬ...
____________________________________
http://www.coderun.ru - Блог человека |
|
| Вернуться к началу |
|
 |
[LP]LordPro.teus Призрак Лорда


Зарегистрирован: 26.07.2007 Сообщения: 5092
42282 
|
Добавлено: Ср, 02 Янв, 2008 19:22 Заголовок сообщения: |
|
|
Все руль..)) лучше всего подгрузить на стороне клиента, AJAX'ом инструкцию по регулярным выражениям и пусть заменяет в уме... экономит не только ресурсы обоих сторон, но и электроэнергию _________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
антон888 Два пингвина


Зарегистрирован: 05.11.2007 Сообщения: 311
13441 
|
Добавлено: Ср, 02 Янв, 2008 20:13 Заголовок сообщения: |
|
|
Roma-i-alena
ИМХО, рег. выражения сработают быстрее, чем, например, та же функция str_replace();
[LP]LordPro.teus
На связке AJAXa и JS было бы идеально, но лень париться. Плюс ущемляет масштабируемость и плюс не снимает нагрузки с сервера(AJAX будет грузить даже больше, чем PHP). _________________ сайт знакомств Забудь про фразу "Мне не с кем". Всегда есть с кем! |
|
| Вернуться к началу |
|
 |
[LP]LordPro.teus Призрак Лорда


Зарегистрирован: 26.07.2007 Сообщения: 5092
42282 
|
Добавлено: Ср, 02 Янв, 2008 20:14 Заголовок сообщения: |
|
|
антон888
я настаиваю на обработке рег.выражений пользователем по инструкции..) идеально масштабируемо, экономия кучи ресурсов, траффика и нагрузки сервера
Добавлено:
Согласно мануалам, str_replace функционирует быстрее прегов... хотя лично я использовал в свое время именно их... банально, по незнанию) _________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
антон888 Два пингвина


Зарегистрирован: 05.11.2007 Сообщения: 311
13441 
|
Добавлено: Ср, 02 Янв, 2008 20:38 Заголовок сообщения: |
|
|
При использовании AJAXa мы увеличиваем количество обращений к серверу и не так важно, подгрузим ли мы просто какой-либо текст или скрипт, к которому обращается AJAX-запрос, будет выполнять сложный код, в любом случае, нагрузка от этого запроса быдет ощутимой.
Что касается рег. выражений против str_replace(); - всё зависит от объёма текста, поэтому лучше замерять скорость работы каждого из вариантов в каждом отдельном случае (как я и делаю).
Сейчас думаю, что идеальным вариантом решения задачи будет являться использование чистого JS. Теряем в масштабируемости, но я не думаю, что будет часто возникать необходимость в замене наборов смайлов для форума. _________________ сайт знакомств Забудь про фразу "Мне не с кем". Всегда есть с кем! |
|
| Вернуться к началу |
|
 |
Roma-i-alena 11 1110 1000


Зарегистрирован: 03.05.2007 Сообщения: 1133 Откуда: vladimir 6191 
|
Добавлено: Ср, 02 Янв, 2008 21:13 Заголовок сообщения: |
|
|
| Цитата: | | Согласно мануалам, str_replace функционирует быстрее прегов... хотя лично я использовал в свое время именно их... банально, по незнанию) |
100% - однозначно факт!!!
| Цитата: | | Что касается рег. выражений против str_replace(); - всё зависит от объёма текста, поэтому лучше замерять скорость работы каждого из вариантов в каждом отдельном случае (как я и делаю). |
А какой у тебя там объем текст для форума и смайлов. Что посетители пишут мегабайты текста??? _________________ Жизнь никогда не заканчивается!!!
На то, собственно говоря, она и ЖИЗНЬ...
____________________________________
http://www.coderun.ru - Блог человека |
|
| Вернуться к началу |
|
 |
[LP]LordPro.teus Призрак Лорда


Зарегистрирован: 26.07.2007 Сообщения: 5092
42282 
|
Добавлено: Ср, 02 Янв, 2008 21:23 Заголовок сообщения: |
|
|
Roma-i-alena
меньше гига - это чат... мы таких прогоняем)  _________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
Stesh Согнул ложку


Зарегистрирован: 22.07.2007 Сообщения: 950
1666 
|
|
| Вернуться к началу |
|
 |
[LP]LordPro.teus Призрак Лорда


Зарегистрирован: 26.07.2007 Сообщения: 5092
42282 
|
Добавлено: Чт, 03 Янв, 2008 02:26 Заголовок сообщения: |
|
|
Stesh
нет... больше 1025Мб... _________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
Alek$ 11 1110 1000


Зарегистрирован: 24.11.2007 Сообщения: 1136 Откуда: Новосибирск 26695 
|
Добавлено: Чт, 03 Янв, 2008 07:32 Заголовок сообщения: |
|
|
Я бы все же посоветовал юзать str_replace()
Причины:
1) Работает быстрее регулярок.
2) Если ей в качестве аргументов передавать массивы (первый - коды смайлика, второй - текст для замены), то заменит она все в один проход, при этом добавление новых смайлов станет элементарной задачей. При этом нагрузка на сервер будет минимальна.
3) Использовать JS не стоит, ИМХО, по 2-м причинам. Во-первых, как уже говорилось, подгрузка - это лишний запрос к серверу, во-вторых, в FF, например JS работает очень уж тормозно. Соответственно, посетители твоего сайта, юзающие FF будут не в восторге. _________________ Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB3 [Russian]
Антисоциальный блог |
|
| Вернуться к началу |
|
 |
AlfaUngzipper Два пингвина


Зарегистрирован: 23.02.2007 Сообщения: 370 Откуда: Halle (Saale) 4 
|
Добавлено: Чт, 03 Янв, 2008 14:40 Заголовок сообщения: |
|
|
| ответ кроется в старых компах с установленным ie6 на втором пне... |
|
| Вернуться к началу |
|
 |
Roma-i-alena 11 1110 1000


Зарегистрирован: 03.05.2007 Сообщения: 1133 Откуда: vladimir 6191 
|
Добавлено: Чт, 03 Янв, 2008 15:05 Заголовок сообщения: |
|
|
| Цитата: | | ответ кроется в старых компах с установленным ie6 на втором пне... |
Ну и что же там за тайны у "старого пня"??  _________________ Жизнь никогда не заканчивается!!!
На то, собственно говоря, она и ЖИЗНЬ...
____________________________________
http://www.coderun.ru - Блог человека |
|
| Вернуться к началу |
|
 |
антон888 Два пингвина


Зарегистрирован: 05.11.2007 Сообщения: 311
13441 
|
Добавлено: Чт, 03 Янв, 2008 17:31 Заголовок сообщения: |
|
|
Alek$
Так и сделал изначально (так и остается пока на сей день), но тут не согласен по поводу скорости работы. Считайте сами:
имеем 53 смайла и 30 блоков текста (постов на странице в форуме)
итого грубо говоря в цикле имеем что-то вроде:
| Код: |
foreach ($smiles as $n=>$v)
{
$st=str_replace($n,$v,$str);
}
|
и этот цикл приходится вызывать для каждого из блоков текста. Итого 53*30=1590 проходов =) Не мало ... Время генерации форума увеличивается на 120-150% (на моем сеплероне с 0.008 до 0.02 секунды)
Есть вариант сначала объединить все посты в один блок текста и потом пройтися по нему 53 раза. Выиграешь дает, но возникают трудности с обратным разбиением в результате объем кода увеличивается в разы.
Может я чего не понимаю ? _________________ сайт знакомств Забудь про фразу "Мне не с кем". Всегда есть с кем! |
|
| Вернуться к началу |
|
 |
Alek$ 11 1110 1000


Зарегистрирован: 24.11.2007 Сообщения: 1136 Откуда: Новосибирск 26695 
|
Добавлено: Чт, 03 Янв, 2008 17:41 Заголовок сообщения: |
|
|
| php.net писал(а): | | Если и search , и replace - массивы, то str_replace() использует все значения массива search и соответствующие значения массива replace для поиска и замены в subject . Если в массиве replace меньше элементов, чем в search , в качестве строки замены для оставшихся значений будет использована пустая строка. Если search - массив, а replace - строка, то replace будет использована как строка замены для каждого элемента массива search . |
Т.е.:
| Код: |
function prase_smile($str)
{
$smile_code=array();
$smile_img=array();
$smile_code[]=":)"; $smile_img[]="<img src='smile/smile.gif'>";
$smile_code[]=":("; $smile_img[]="<img src='smile/sad.gif'>";
$smile_code[]=":lol:"; $smile_img[]="<img src='smile/lol.gif'>";
//И так далее...
$str = str_replace($smile_code,$smile_img,$str);
return $str;
}
|
Таким образом мы получаем вместо 1590 проходов для 30 постов всего 30. _________________ Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB3 [Russian]
Антисоциальный блог |
|
| Вернуться к началу |
|
 |
|