|
Форумы xBB > BBCode и прочие языки упрощенной разметки
xBB vs ExBB bb
Автор: BM.
Последнее редактирование: 2009-07-25 23:49:46
Всем здрасте.
У меня на сайте стоит обработчик от ExBB движка форума.
Он на регулярках. Поставил xBB - прекрасная вещь по функционалу, но работает в 4 раза медленее (вместо 0.05 сек, 0.2 сек время генерации, только стоит сменить библиотеку) =(( Сколько читаю xBB должен быть в разы быстрее за счет конечных автоматов, но почему то у меня не так, что может быть? ХЕЛП!
7 комментариев
BM
Или быстродействие у вашей библиотеки нормальное, только если хранить обработанный текст в кеше? Тестирую на своём форумце самописном, 20 сообщений на странице. Текстов многотонных не присутствует.
dima
Во-первых, учтите функциональность xBB. Сравнивать быстродействие следует для вещей с одинаково мощной функциональностью. Сколько тегов поддерживает ExBB? Сколько вариантов написания тегов с атрибутами? для xBB это не имеет значения. Для других парсеров - имеет.
Во-вторых. Очень часта ошибка, когда для каждого поста создается свой экземпляр класса bbcode. Это МОЖНО делать, но это НЕНУЖНО делать. Так как именно многократная инициализация объекта bbcode приводит к тормозам. Создавайте ОДИН объект и используйте метод parse. Работать будет гораздо быстрее.
BM
Я об этом написал в первом сообщение, конечно функционал не кудышный, просто иного на момент начала написания взять было не от куда.
Вот я так и почувствовал что ошибка есть 
У меня просто заменена базовая функция и в ней вставлена инициализация объекта BBcode и там return $bb -> get_html();
Буду экспериментировать, если что напишу.
И спасибо за проект, очень дельная штука, написать тег очень легко.
BM
require_once 'lib/bb/bbcode.lib.php';
$bb = new bbcode;
function ikoncode($text) {
global $bb;
$bb->parse($text);
return $bb->get_html();
}
При проходе по БД для каждого поста вызывается функция ikoncode. Вот только не понимаю чего не так, строчка global $bb; не пашет, опять туплю =//
dima
Если приведенный вами код находится в скрипте, который включается в другой в теле некой функции, то переменная $bb не принадлежит глобальной области видимости и применять к ней global бессмысленно. Поясню на примере:
Есть скрипт a.php:
<?php
function c()
{
require './b.php';
}
c();
Есть скрипт b.php:
<?php
$d = 1;
function e()
{
global $d;
var_dump($d);
}
e();
Если вы обратитесь браузером к a.php, то увидете null. Это произошло потому что переменная $d принадлежит области видимости функции c.
Вы можете решить свою проблему с помощью суперглобального массива $GLOBALS.
BM
Точняк она вн видимости)))
Спасибо ещё раз!
dima
Пожалуйста
Ответить:
|