Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Исследование. Особенности парсинга сообщений в html-кодах и в bb-кодах
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
Цель. Сбор информации, обсуждение и подготовка обзорной статьи о парсинге сообщений в html-кодах и в bb-кодах.
Название статьи: "Принципы парсинга сообщений. Применение html-кодов и bb-кодов".
Аннотация. Принципы парсинга сообщений в блогах, комментариях и на форумах. Парсинг с применением html-кодов, достоинства и недостатки. Парсинг с применением bb-кодов, достоинства и недостатки. Преимущества парсинга при создании сообщений над парсингом при отображении сообщений (при генерации страницы с сообщением). Преимущества и недостатки хранения в БД текста сообщений, форматированного в bb-кодах и текста сообщений, форматированного в html-кодах. Возможность оптимизации форматирования текста в html-кодах за счет записи значений атрибутов html-тегов без кавычек.
Рассматриваемые вопросы
* Парсинг сообщений в bb-кодах.
* Хранение сообщений в БД с форматированием текста в bb-кодах.
* Парсинг сообщений в html-кодах
* Хранение сообщений в БД с форматированием текста в html-кодах.
* Возможности и ограничения оптимизации форматирования и парсинга текста в html-кодах за счет записи значений атрибутов html-тегов без кавычек.
Текущая ситуация. Проблемы и решения
На текущий момент форматирование и парсинг текста сообщений в блогах, комментариях, на форумах и т.д. в bb-кодах весьма популярно,. В частности, парсинг bb-кодов довольно хорошо отработан на форумном движке FluxBB последних версий. При этом в БД хранится текст сообщений, отформатированных в bb-кодах. Такой подход имеет ряд ограничений и недостатков. Например, необходимость парсить сообщения (преобразовывать из представления в bb-кодах в представление в html) при каждом просмотре сообщения. Это может довольно серьезно нагружать сервер хостера . В то же время, хранение в БД соощений, отформатированных в html-кодах, избавляет от необходимости парсить такие сообщения при их просмотре (отображении). Однако, парсинг таких сообщений при их создании и редактировании существенно сложеннее парсинга в bb-кодах. Кроме того, хранение в БД сообщений, отформатированных в html-кодах обладает ощутимой избыточностью, по сравнению с хранением в БД сообщений, отформатированных в bb-кодах. Определенным образом упростить операции с сообщениями в html-кодах может определение правил, по которым возможна запись значений атрибутов html-тегов, используемых для форматирования, без кавычек. При этом ощутимо упрощается парсинг таких сообщений. Но и, соответственно, появляются некоторые ограничения форматирования, поскольку запись значений атрибутов html-тегов без кавычек не всегда допустима. Насколько серьезны такие ограничения - предстоит выяснить при обсуждении темы. Мне представляется, что при грамотном подходе эти ограничения на 95% можно обойти, получая при этом доволльно мошный и богатые возможности форматирования текста сообщений в html-кодах. Со всеми преимуществами такого подхода.
PS. На этом форуме, как я наблюдаю, создание сообщений также происходит с форматированием в bb-кодах.Отредактировано администратором: EuGen, 04 Июля, 2013 - 10:16:47 Прямые ссылки в целях переиздания имеющихся сторонних материалов недопустимы
avtor.fox
Отправлено: 04 Июля, 2013 - 10:13:24
Постоянный участник
Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012 Откуда: Воронеж
Помог: 50 раз(а)
щто?
пиар своего "форума разработчиков"?
sadex
Отправлено: 04 Июля, 2013 - 10:18:42
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
avtor.fox пишет:
щто?
пиар своего "форума разработчиков"?
А продуктивных мыслей нет? Нет никакого "форума разработчиков", есть обкатка движка в экстримальном режиме на бесплатном хостинге. И скоро этот движок оттуда будет снесен. И какой смысл пиарить то, чему суждено исчезнуть? Просто сейчас там в тестовом режиме обкатываются и определенные решения по парсингу, о которых говорится в теме. Т.е. кое-что можно посмотреть и пощупать руками в реальной работе. Остальное - в теме. Меня вопросы темы интересуют гораздо больше, чем ссылка на рабочий пример. Ссылку могу хоть сейчас убрать, если публике не нравится.
Насколько я понимаю, на этом форуме, также как и на FluxBB, в БД хранятся сообщения, пропарсенные при создании и отформатированные в bb-кодах. Значит, проблема аналогичная. При каждом просмотре таких сообщений не только участниками форума, но и любыми случайными посетителями, которых в десятки раз больше участников, такое сообщение надо доставать из БД, парсить его из представления в bb-кодах в html-представление, и генерировать страницу с сообщением уже в окончательном html-представлении. А это изърядная нагрузка на сервер при относительно плотной посещаемости форума.
Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012 Откуда: Воронеж
Помог: 50 раз(а)
sadex, Вы разводите воду-водную, а от меня требуете конструктивности (думаю, что Вы немного запутались в терминах)? Всё за Вас уже давно обдумано и решено.
sadex
Отправлено: 04 Июля, 2013 - 10:31:54
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
avtor.fox пишет:
Всё за Вас уже давно обдумано и решено.
Все - не может быть решено. Эта проблема продолжает обсуждаться на разных ресурсах, и единого мнения не сложилось. Кто-то отстаивает работу с bb-кодами, кто-то с html-кодами.
По поводу возможности записи значений атрибутов html-тегов без кавычек - это тоже интересный вопрос. В HTML5 это вполне допускается. Часто это во многом упрощает работу парсера.
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
caballero пишет:
хранение HTML в Бд как минимум будет занимать больше места.
А насколько больше? Сам объем форматирования (в bb или в html) по отношению к объему текста не так уж и велик, имхо. Ну несколько увеличится объем форматирования в html по сравнению с объемом оного в bb - ничего страшного. На то она и БД, чтобы расплачиваться некоторым несущественным увеличением своего объема для создания удобства и увеличения скорости работы движка, плюс снижения нагрузки на сервер при отображении сообщений. Значительного снижения, поскольку сообщения, отформатированные и хранимые в БД в html представлении парсить при отображении практически не нужно.
caballero пишет:
вообще, когда я писал свой форум - такая мысль была но отказался от нее, к сожалению не помню почему.
Точно не уверен, но вроде бы в SMF сообщения в БД хранятся с HTML-форматированием.
vanicon
Отправлено: 04 Июля, 2013 - 12:27:51
Частый посетитель
Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010 Откуда: Самара
Помог: 17 раз(а)
sadex
Скорость да наверное возрастет, но тут есть существенный минус, что если допустим поменяются какие-нибудь стили или разметка, то что делать будите, с разметкой которая в бд?
----- Так было, так есть и так будет
sadex
Отправлено: 04 Июля, 2013 - 13:30:56
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
vanicon пишет:
если допустим поменяются какие-нибудь стили или разметка, то что делать будите, с разметкой которая в бд?
Встречный вопрос. Что будете делать в аналогичном случае, если форматирование текста сообщений хранится в БД в bb-кодах?
Сугубое имхо. Разметка отформатированного текста сообщений (кроме заголовков этих сообщений, которые подобным образом - через bb- или html-коды - вообще не форматируются) не имеет особого отношения к стилю самого сайта (блога, форума и т.д.).
Ведь эта разметка отдана на откуп юзеру, на его усмотрение. И потому она может быть совершенно любой. Свободу юзера при этом определяет или создатель сайта или админ, эта свобода зависит исключительно от состава опций панели инструментов формы редактирования сообщений. А состав этих опция для админов и модераторов может быть один (обширный) а для рядовых юзеров другой (минималоьтный, например только B, I, U, quote, code, url - без цветов).
Здесь состав таких опций для рядовых юзеров довольно богатый...
Вопрос - как повлияли мои упражнения со здешними довольно богатыми опциями bb-кодов для юзеров на общий стиль форума? Имхо - почти никак. Они повлияли только на стиль моего сообщения.
vanicon пишет:
Скорость да наверное возрастет
Не только в скорости дело. Появляется возможность исключить процедуру (довольно затратную по ресурсам сервера) парсинга сообщений при их простом просмотре огромной массой посетителей форума. Если запрос на просмотр сообщений одновременно подают 200-300 посетителей, и для каждого надо запускать процедуру парсинга - это тяжелый случай. А если парсинг не надо при этом запускать, а просто взять сообщение из БД и отобразить для посетителя - это гораздо легче.
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
sadex пишет:
Что будете делать в аналогичном случае, если форматирование текста сообщений хранится в БД в bb-кодах?
Давайте определимся для начала, про который говорим HTML.
Есть HTML как средство полностью видимое пользователю - фактически, никакой разницы с BB не имеет, только синтаксис чуть другой. Их обоих надо яростно и пристально фильтровать и валидировать.
И есть HTML, который идёт в отрендеринной странице форума. Где совершенно безобидный исходный тег CODE даёт килобайты форматирования. А подсветка синтаксиса имеет свойство совершенствоваться. Например, не было указано слово implements как ключевое. Подсветка должна быть обновлена на всё форуме, что делать?
Вы про хранение в базе которого из?
Я за вариант хранить в базе исходное сообщение (совершенно безразлично что это будет, подмножество HTML или BB), рендер этого сообщения - в мемкэше.
----- PostgreSQL DBA
sadex
Отправлено: 04 Июля, 2013 - 14:03:32
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
Мелкий пишет:
Давайте определимся для начала, про который говорим HTML. ... Есть HTML как средство полностью видимое пользователю...
Говорим про html c ограниченными функциями, только для форматирования текста сообщений, т.е некие html-коды аналогичные bb-кодам. Естественно, эти html-теги форматирования видны пользователю при создании и редактировании сообщений, также как видны ему и аналогичные теги bb-кодов. Например,
Я за вариант хранить в базе исходное сообщение (совершенно безразлично что это будет, подмножество HTML или BB), рендер этого сообщения - в мемкэше.
Уточните, что хранить в БД. Голый текст сообщения с некими метками или же текст сообщения, отформатированный, с тегами bb- или html-кодов. Имхо, есть только два варианта, нормальных, либо хранить в БД текст с bb-кодами, либо текст с html-кодами форматирования.
Про сам парсер (рендер) здесь речи не идет, речь о том, когда его запускать а когда нет. Если запускать только при создании и редактировании сообщений, то это гораздо меньшая нагрузка на сервер ина систему, чем постоянный запуск парсера при любом просмотре сообщений.
Фильтровать и валидировать bb- или html-коды (теги) форматирования надо только при создании и редактировании сообщений. А это процедура гораздо более редкая чем массовый просмотр сообщений.
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
sadex пишет:
Уточните, что хранить в БД.
Исходное сообщение, написал же. То, что пользователь написал.
sadex пишет:
постоянный запуск парсера при любом просмотре сообщений.
Почему любом? Только того, которого нет в мемкэше.
А что вы хотите хранить для банального описанного мной случая с тегом CODE?
Терять исходное сообщение - писать не только рендер этого подмножества форматирования (урезанный HTML или BB), но и обратный конвертер так же нужен. Тупым реплейсом дело не ограничится - кода больше, ошибок, как следствие, гораздо больше. (Добавление)
А нет мемкэша - ну построить пародию на мемкэш в базе. В частности, в базу рендер и писать (писать и исходное сообщение и рендер). Оверхед по месту - ну и что? Когда будете утыкаться в io - уж тогда на мемкэш ресурсов точно хватит.
----- PostgreSQL DBA
sadex
Отправлено: 04 Июля, 2013 - 15:09:28
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
Мелкий пишет:
Почему любом? Только того, которого нет в мемкэше.
Это не выход, просмотров, к которым обращаются впервые, при хорошей посещаемости всегда много.
Мелкий пишет:
А что вы хотите хранить для банального описанного мной случая с тегом CODE?
Пока не знаю. Но есть варианты. Один - не каждый форум (блог, сайт) в инете для программистов, и тег code при этом не будет нужен. Другой - в HTML есть свой тег code, его и можно хранить. Форматирование кодов при этом гораздо беднее, чем здесь на форуме, но часто - сойдет. Третий - попробовать сделать функционал для кода не хуже, чем здесь, но это совсем не банальный вариант.
Мелкий пишет:
...писать не только рендер этого подмножества форматирования (урезанный HTML или BB), но и обратный конвертер так же нужен. Тупым реплейсом дело не ограничится - кода больше, ошибок, как следствие, гораздо больше.
Если хранить в БД html-коды, то без обратного конвертера вполне можно обойтись, имхо. Вот прямой коныертер и валидатор (парсер) можно делать сколь угодно мощный, и.к. он будет относителдьно редко использоваться - только при создании сообщений и только админами-модераторами, имеющими доступ к расширенным опциям форматирования текста. А обычные юзеры могут удовольствоваться простым конвертером-валидатором, т.к. доступные им опции форматирования могут быть сильно ограничены.
sadex
Отправлено: 12 Июля, 2013 - 05:38:51
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
В своей микро-CMS делаю пока два варианта, для экспериментов.
1. Сообщение от юзеров (комментарии и т.п.) - создаются с разметкой в bb-кодах, парсятся на сервере в html перед сохранением в БД, в html достаются из БД и выводятся. Узкое место - редактирование юзерами таких сообщений. Для этого нужно делать обратный парсинг из html в bb-разметку, но это приемлемо, с учетом относительно редких случаев редактирования. Еще кое-что. Для реализации предпросмотра на клиенте в JS делается простой парсет из bb в html разметку текста.
2. Сообщения от админа (статьи, новости и пр.), которые создаются в админке, создаются с текстовой разметкой в html. В ней же отсылаются на сервер и сохраняются в БД. В ней же, без парсинга, отображаются на сайте. Узкое место - фильтрация html от XSS и прочих атак. Но это приемлемо, с учетом того, что админка доступа админу но не хакерам, и админ свой сайт атаковать не будет.
DeepVarvar
Отправлено: 12 Июля, 2013 - 16:25:27
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Ох, сколько воды...
Все же просто.
Храним в базе оба вида сообщений, и bb и html.
Для показа в топик выводим те, которые сохранены как html.
Это максимально увеличит скорость отдачи страницы и не будет нагружать сервер.
Если пользак отредактирует свое исходное bb-сообщение, парсим-генерируем html-разметку для html-поля и обновляем оба поля, записав туда новые bb и новые html.
Так, вместо герерации каждого сообщения в топике, мы генеримся один раз и успокаиваимся.
Оверхед хранения данных можно не учитывать, т.к. БД может хранить практически любые объемы информации.
Для тех кто одержим сокращением места в БД предлагаю наделать классов стилей вида .uppercase, .bold, .italic, .quote, .etc.. Тогда вместо <span style="blabla будет <span class="bla1 bla2 bla3
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.