отказано Удаление bb_posts_text

Нужно удалить bb_posts_text?


  • Всего проголосовало
    14

Sprinx

Пользователь
#1
Нужно удалить bb_posts_text, ибо не кошерно дергать от туда инфу, а также хранить лишние данные.
Так же, плюсом будет уменьшенное количество запросов.

Написал фуньку преобразования html в ббкод, разработчикам в помощь.
Код:
function html_to_bbcode ($text)
    {
        $text = preg_replace('/<span class="post-b">(.*?)<(?=\/)\/span>/', '[b]$1[/b]', $text);   
        $text = preg_replace('/<span class="post-u">(.*?)<(?=\/)\/span>/', '[u]$1[/u]', $text);       
        $text = preg_replace('/<span class="post-i">(.*?)<(?=\/)\/span>/', '[i]$1[/i]', $text);   
        $text = preg_replace('/<span class="post-s">(.*?)<(?=\/)\/span>/', '[s]$1[/s]', $text);       
        $text = preg_replace('/<u class="q-post">(.*?)<(?=\/)\/u>/', '[qpost=$1]', $text);       
        $text = preg_replace('/<a href="mailto:.*?">(.*?)<(?=\/)\/span>/', '[email]$1[/email]', $text);       
        $text = preg_replace('/<a href="(.*?)" class="postLink">(.*?)<(?=\/)\/a>/', '[url=$1]$2[/url]', $text);       
        $text = preg_replace('/<span style="font-family: (.*?);">(.*?)<(?=\/)\/span>/', '[font=$1]$2[/font]', $text);           
        $text = preg_replace('/<span class="post-align" style="text-align: (.*?);">(.*?)<(?=\/)\/span>/', '[align=$1]$2[/align]', $text);       
        $text = preg_replace('/<span style="font-size: (.*?)px; line-height: normal;">(.*?)<(?=\/)\/span>/', '[size=$1]$2[/size]', $text);       
        $text = preg_replace('/<span style="color: (.*?);">(.*?)<(?=\/)\/span>/', '[color=$1]$2[/color]', $text);   
        $text = preg_replace('/<pre class="post-pre">(.*?)<(?=\/)\/pre>/', '[pre]$1[/pre]', $text);   
        $text = preg_replace('/<a class="postLink-name" href="#(.*?)">(.*?)<(?=\/)\/a>/', '[url=$1]$2[/url]', $text);   
        $text = preg_replace('/<a name="(.*?)"><(?=\/)\/a>/', '[name=$1]', $text);   
        $text = preg_replace('/<ul type="(.*?)">(.*?)<(?=\/)\/ul>/', '[list=$1]$2[/list]', $text);           
        $text = preg_replace('/<var class="postImg" title="(.*?)">.*?<(?=\/)\/var>/', '[img]$1[/img]', $text);           
        $text = preg_replace('/<var class="postImg postImgAligned img-(.*?)" title="(.*?)">.*?<(?=\/)\/var>/', '[img=$1]$2[/img]', $text);
        $text = preg_replace('/<div class="q-wrap"><div class="q" head="(.*?)">(.*?)<\/div><(?=\/)\/div>/', '[quote="$1"]$2[/quote]', $text);   
        $text = preg_replace('/<div class="q-wrap"><div class="q">(.*?)<\/div><(?=\/)\/div>/', '[quote]$1[/quote]', $text);   
        $text = preg_replace('/<div class="sp-wrap"><div class="sp-body">(.*?)<\/div><(?=\/)\/div>/', '[spoiler]$1[/spoiler]', $text);
        $text = preg_replace('/<div class="sp-wrap"><div class="sp-body" title=".*?"><h3 class="sp-title">(.*?)<\/h3>(.*?)<\/div><(?=\/)\/div>/', '[spoiler="$1"]$2[/spoiler]', $text);       
        $text = preg_replace('/<div class="clear">.*?<(?=\/)\/div>/', '[clear]', $text);
       
        $text = str_replace('<span class="post-br"><br /></span>', '[br]', $text);
        $text = str_replace('<span class="post-hr">-</span>', '[hr]', $text);
        $text = str_replace('<li>', '[*]', $text);
        $text = str_replace("\n\n", '[br]', $text);
        $text = str_replace('<br />', "\n", $text);
 
       
        return trim( strip_tags( html_entity_decode( $text ) ) );
    }
В функцию не вошли теги, так как хрен знает зачем они:
'[tab]' => ' ',
'[del]' => '<span class="post-s">',
'[/del]' => '</span>',
 

JDVU

Разработчик
#2
что значит "не кошерно дергать от туда инфу"?
вы вообще понимаете для чего эта таблица нужна?
 

Exile

Администратор
#3
Лишние данные? Ненужная таблица? В этой таблице хранится по сути кеш постов - текст, уже обработанный классом bbcode и tidy. Он оттуда юзается чтобы заново не прогонять через достаточно сложную процедуру парсинга бб-кодов. А вы предлагаете удалив эту таблицу, каждый раз для вывода сообщений прогонять их текст с бб-кодами через соответствующий класс. Если мешает то что "лишний запрос" - установите данной таблице тип данных MEMORY, будет тягать из памяти. Но удалять эту таблицу абсолютно никакого смысла нет - это один из основных кешей движка по сути.
'[tab]' => ' ', '[del]' => '', '[/del]' => '',
Табуляция и зачеркнутый текст.
 

Exile

Администратор
#4
PHP:
html_to_bbcode
Ну и да - пользователям мы выводим вроде как не бб-коды на страницу, а готовый html. Функция, имеющаяся в движке -
PHP:
bbcode_to_html
смысл имеет. Эта - нет.
 

Sprinx

Пользователь
#5
Все равно для тем html дергается из bb_posts_html, который уже обработанный.
А из bb_posts_text, дергает для цитат, редактирования и еще чего-то.

bbcode_to_html нету такой функции, может bbcode2html?
 

Sprinx

Пользователь
#6
Наверное не ясно выразился, опишу подробней.
Т.е хранить темы только в виде html как в bb_posts_html. А bb_posts_text удалить.
bb_posts_text занимает место, и используется не часто, когда нужно будет текст в виде ббкода, то просто прогнать через скрипт.
И не надо будет каждый раз обновлять или делать кеш постов, и т.д
 

Exile

Администратор
#7
Sprinx, я не понимаю смысла этих манипуляций. Сейчас посты пишутся в bb_posts_text. Во время просмотра тем, они обрабатываются классом bbcode и уже обработанный результат хранится в bb_posts_html. Оба этих варианта используются в равной мере. Таблица с html - для вывода постов в темах, своеобразный кеш. Таблица с эталонным текстом - для цитирования, редактирования и т.п. Если сделать вариант с одной таблицей - мы лишаемся кеша. То есть все посты придется хранить в эталонном виде с бб-кодами и каждый раз для вывода на страницу прогонять через соответствующий класс. При этом мы теряем прирост в производительности, который приобретается за счет использования "кеша" постов, уже записанного в таблице bb_posts_html.

Нельзя отказаться от одного из вариантов хранения. Откажемся от html - потеряем кеш-прослойку. Которую можно и в памяти хранить и где угодно, хоть в мемкеше/редисе и т.д. А отказаться от хранения просто эталонного текста нельзя, потому что он используется для восстановления этой самой кеш-прослойки при каких-либо изменениях связанных с бб-кодами. Для цитирования, редактирования и т.п., чтобы каждый раз не выполнять операции по обратному преобразованию html в бб-коды. Да, в итоге имеем почти одинаковое содержание у таблиц bb_posts_html и bb_posts_text, но простой потерей места (можно вообще не терять, если в память загнать, как я выше написал) - получаем значительный прирост в производительности. Если у вас посещаемый трекер - отключите в конфиге кеш постов, ну и долгосрочно (примерно за неделю) посмотрите на рост la по серверу.
 

Sprinx

Пользователь
#8
Дело ваше, добавлять в движек или нет.
Сделал у себя, отказался от bb_posts_text.
Страницы стали загружаться быстрее.
Топик до:
[ Время выполнения: 0.062 сек | MySQL: 0.001 сек (2%) · 9 запр.
Топик после:
[ Время выполнения: 0.055 сек | MySQL: 0.001 сек (1%) · 9 запр.

Так же, при редактировании идет быстрый перегон из html в ббкод.
 

Exile

Администратор
#9
Велика посещаемость у трекера? Ну мне так, чисто справки ради. У меня на трекере с 15к уников было заметно по производительности.
 
Сверху