ООО ЭкоЮнит
FAQПоискПользователиГруппыФайлыВходРегистрацияГлавная
Версия для печати
 
АвторСообщение
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Данная тема хоть и была создана ещё в конце 2004 году, но актуальности не потеряла, так как форумы на двиге phpBB2 будут ещё долго эксплуатироваться. К сожалению, на сайте источнике она была удалена, возможно по ошибке. Выкладываю её полностью, с сохранением авторства постов. Поправлены только орфография, пунктуация и добавлены свои примечания
Профессор писал:
В index.php имеются следующие строки:
Код:

    //
    // Define appropriate SQL
    //
    switch(SQL_LAYER)
    {
        case 'postgresql':
            $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id 
                FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u
                WHERE p.post_id = f.forum_last_post_id 
                    AND u.user_id = p.poster_id  
                    UNION (
                        SELECT f.*, NULL, NULL, NULL, NULL
                        FROM " . FORUMS_TABLE . " f
                        WHERE NOT EXISTS (
                            SELECT p.post_time
                            FROM " . POSTS_TABLE . " p
                            WHERE p.post_id = f.forum_last_post_id  
                        )
                    )
                    ORDER BY cat_id, forum_order";
            break;

        case 'oracle':
            $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id 
                FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u
                WHERE p.post_id = f.forum_last_post_id(+)
                    AND u.user_id = p.poster_id(+)
                ORDER BY f.cat_id, f.forum_order";
            break;

        default:
            $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
                FROM (( " . FORUMS_TABLE . " f
                LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
                LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
                ORDER BY f.cat_id, f.forum_order";
            break;
    }

Поскольку у меня стоит MySQL, то можно выкинуть то, что касается postgresql и oracle.
От этого фрагмента остается только то, что следует после метки default:
Код:
            $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
                FROM (( " . FORUMS_TABLE . " f
                LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
                LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
                ORDER BY f.cat_id, f.forum_order";


Избавляемся от db.php
В каталоге includes имеется файл db.php со следующим содержанием:

Код:

<?php
if ( !defined('IN_PHPBB') )
{
    die("Hacking attempt");
}

switch($dbms)
{
    case 'mysql':
        include($phpbb_root_path . 'db/mysql.'.$phpEx);
        break;

    case 'mysql4':
        include($phpbb_root_path . 'db/mysql4.'.$phpEx);
        break;

    case 'postgres':
        include($phpbb_root_path . 'db/postgres7.'.$phpEx);
        break;

    case 'mssql':
        include($phpbb_root_path . 'db/mssql.'.$phpEx);
        break;

    case 'oracle':
        include($phpbb_root_path . 'db/oracle.'.$phpEx);
        break;

    case 'msaccess':
        include($phpbb_root_path . 'db/msaccess.'.$phpEx);
        break;

    case 'mssql-odbc':
        include($phpbb_root_path . 'db/mssql-odbc.'.$phpEx);
        break;
}

// Make the database connection.
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false);
if(!$db->db_connect_id)
{
    message_die(CRITICAL_ERROR, "Could not connect to the database");
}

?>

Поскольку я знаю, что мне на моем хостинге никогда не понадобится ни postgres, ни mssql-odbc, ни oracle, то можно выкинуть ненужные фрагменты. От файла остаётся только такой маленький кусочек:
Код:
<?php 
// db.php,v 1.10 2002/03/18 
if ( !defined('IN_PHPBB') ) 
{ 
    die("Hacking attempt"); 
} 
include($phpbb_root_path . 'db/mysql4.'.$phpEx); 

// Make the database connection.
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false);
if(!$db->db_connect_id)
{
    message_die(CRITICAL_ERROR, "Could not connect to the database");
}
?>


Поскольку db.php вызывается только из common.php, то с целью уменьшения обращений к дисковой системе, в common.php вместо строки
Код:
include($phpbb_root_path .'includes/db.'.$phpEx); 

ставим фрагмент из db.php

Код:
include($phpbb_root_path . 'db/mysql4.'.$phpEx); 
// Make the database connection.
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false);
if(!$db->db_connect_id)
{
    message_die(CRITICAL_ERROR, "Could not connect to the database");
}


Избавляемся от extension.inc
В корневом каталоге имеется файл extension.inc со следующим содержанием:
Код:
<?php
if ( !defined('IN_PHPBB') )
{
    die("Hacking attempt");
}

//
// Change this if your extension is not .php!
//
$phpEx = "php";
$starttime = 0;
?>

Exclamation Примечание:
Содержимое вашего extension.inc может быть и немного другим. Если вы ставили мод Page generation time, то там могут присутствовать строки
Код:
// Page generation time
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;


Он вызывается всякий раз при загрузке faq.php, groupcp.php, index.php, login.php, memberlist.php, modcp.php, posting.php, privmsg.php, profile.php, search.php, viewforum.php, viewonline.php, viewtopic.php.

Избавимся от лишних операций обращения к диску. Поскольку в каждом из этих файлов происходит вызов common.php, то после строк
Код:
if ( !defined('IN_PHPBB') ) 
{ 
    die("Hacking attempt"); 
}

ставим текст из extension.inc, кроме блока комментариев.

А в faq.php, groupcp.php, index.php, login.php, memberlist.php, modcp.php, posting.php, privmsg.php, profile.php, search.php, viewforum.php, viewonline.php, viewtopic.php удаляем строку
Код:
include($phpbb_root_path . 'extension.inc'); 

а следующую за этим строку
Код:
include($phpbb_root_path . 'common.'. $phpEx); 

заменяем на
Код:
include($phpbb_root_path . 'common.php');

поскольку переменная $phpEx определялась в extension.inc, а теперь в common.php.

-------------------------------------------------
Jovani писал:
Спасибо, главное не останавливайся.
Я вообще-то пошел по другому пути - изменяю некоторые SQL запросы, но в том, что ты пишешь, тоже есть смысл.

-------------------------------------------------
Профессор писал:
SQL запросами я тоже планирую заняться.
В принципе, то, что я делаю по уменьшению текста phpBB2, стоит воспринимать в качестве прикола. Мне интересно до какого придела движок можно будет ужать без потери функциональности.
Думаю, все согласятся с тем, что текст phpBB2 весьма рыхлый. Это не является упреком движку. Просто разработчики писали универсальный текст программы, который сможет использовать даже человек, далекий от програмирования.
Я не думаю, что текст IPB или vBulletun более компактен. Кстати, что по этому поводу скажут завсегдатаи форума?
Кстати, если кто-то захочет подобно мне избавиться от extension.inc, то его все равно необходимо оставить в корневом каталоге движка, потому, что он используется админкой

-------------------------------------------------
Meithar писал:
Цитата: Показать

Про кеширование слышал?

-------------------------------------------------
Jovani писал:
Кеширование очень хорошо для статических сайтов. Но вот для форумов, где выдаваемая страница уникальна для каждого запроса, часто используются запросы, cookies и POST, кеширование фактически невозможно.
Единственное, что пока удается скэшировать, это шаблоны, и то, особый прирост в скорости, это не дает.
Если ты подразумеваешь какое либо другое кеширование, обьясни, что именно.

-------------------------------------------------
Meithar писал:
Цитата: Показать

Другое, все эти файлы, которые подключаются через include - кешируются.

-------------------------------------------------
Профессор писал:
Но ведь для того, чтобы вытащить extension.inc из кэша, все равно будут посылаться запросы к файловой ситеме, а уж операционка сервера будет брать это из кэша. Но в любом случае зачем напрягать сервак кэшированием всякой лабуды и лишними обращениями к файловой системе. Как я уже говорил в других темах, я не утверждаю, что от подобных сокращений форум вылетит из монитора со скоростью реактивного самолета, но хуже от этого не будет.
Ведь выполнить команды
Код:
$phpEx = "php"; 
$mtime = microtime(); 
$mtime = explode(" ",$mtime); 
$mtime = $mtime[1] + $mtime[0]; 
$starttime = $mtime;

прямо в common.php для интерпретатора php будет гораздо проще, чем загружать этот фрагмент из extension.inc.
Тем более, раз я избавился от подавляющей части текста db.php, то зачем я буду ради такой ерунды:

Код:
include($phpbb_root_path . 'db/mysql4.'.$phpEx); 
// Make the database connection. 
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false); 
if(!$db->db_connect_id) 
{ 
message_die(CRITICAL_ERROR, "Could not connect to the database"); 
} 

держать файл db.php, учитывая, что он вызывается только из common.php.
Думаю, от подобных сокращений хуже не будет. А если их удасться сделать больше, то может какой-то прирост в скорости получится. В любом случае без этих постоянных бессмысленных проверок типа интерпретатора PHP на сервере, типа базы данных, наличия директории install и contrib и пр. ерунды, код программы выглядит гораздо красивее.
Я уже приводил пример двух склеротиков, которых так напоминают некоторые постоянные ненужные запросы phpBB.

-------------------------------------------------
Jovani писал:
Цитата: Показать

Согласен. Обычно файлы кешируются операционной системой, но, при обращении к файлу, даже находящемуся в ОЗУ, происходит проверка этого файла на диске, на предмет изменения (проверяется дата изменения файла). И если файл не изменился, то он берется из кеша. В любом случае лишние файловые операции не нужны.
ВверхНа форуме нет Профиль Сайт Имя в Skype
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Добавлю, что для уменьшения нагрузки на сервер и скорости загрузки index.php вы также можете воспользоваться статьёй Отключение списка модераторов на главной странице.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Dedof Пол:Муж.

Постоянный клиент


Зарегистрирован: 04.02.2009
Показать/Спрятать

Дайте пожалуйста саму статью, или ссылку где можно её прочитать - к сожелению на phpbbguru.net её видимо удалили
ВверхНа форуме нет Профиль Сайт
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Поиск в гугле прямо так и дал:
Отключение списка модераторов на главной странице phpBB 2.0.x

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Начиная с phpbb 2.0.20 в includes/prune.php появился sql запрос для удаления из базы записей о несуществующих сообщениях. Но делать этот запрос при каждом обращении к function prune совсем не обязательно. Можно его делать например 1 раз за 10 обращений.

Код:
открыть
includes/prune.php

найти
    // Before pruning, lets try to clean up the invalid topic entries
    $sql = 'SELECT topic_id FROM ' . TOPICS_TABLE . '
        WHERE topic_last_post_id = 0';
    if ( !($result = $db->sql_query($sql)) )
    {
        message_die(GENERAL_ERROR, 'Could not obtain lists of topics to sync', '', __LINE__, __FILE__, $sql);
    }

    while( $row = $db->sql_fetchrow($result) )
    {
        sync('topic', $row['topic_id']);
    }

    $db->sql_freeresult($result);

перед добавить
if (mt_rand(1,10) == 1)
{

после добавить
} 

число 10 в if (mt_rand(1,10) == 1) определяет как часто делать запрос.
ВверхНа форуме нет Профиль
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Написано что в таблицы на InnoDB быстрее записываются данные, а таблицы на MyISAM быстрее читаются. Правильно ли я понимаю, что таблицы в которые постоянно что-то пишется, например таблица сессий, надо делать на InnoDB, а остальные на MyISAM?
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

А надо ли? Поэкспериментируй, потом скажешь. Сначала посмотри, как сделано в последних версиях phpBB3. Думаю, есть смысл заморачиваться на форумах с большой нагрузкой.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Несколько таблиц перевел в InnoDB. Немного уменьшилось время открытия страниц, и немного увеличилось потребление оперативной памяти. Получается с точки зрения нагрузки на сервер MyISAM лучше. Хотя статистики мало, изменения маленькие, может быть это статистическая погрешность .
ВверхНа форуме нет Профиль
Показать сообщения:   

Общий рейтинг темы Избавляемся от extension.inc, db.php и проверок в index.php в phpBB2
Средний рейтинг: 0.00 :: Мин. рейтинг: 0 :: Макс. рейтинг: 0 :: Количество оценок: 0
Выберите вашу оценку: 1   2   3   4   5  

Похожие темы
Тема Автор Форум Ответов Посл. сообщение
Нет новых сообщений Last Forum Topic On Index
Вывод темы последнего сообщения в разделе
Название мода: Last Forum Topic On Index Автор: Xpert Описание мода: Добавляет в список форумов на главной странице название последней затронутой темы каждого форума. Версия мода: 1.2.0 (обновление 11.08.2004)
vlad77 Архив модов для phpBB 2.0.x 17 Пт 30 Янв, 2015 11:18 Посмотреть последнее сообщение
Sergey
Нет новых сообщений Recent topics for phpBB2
последние темы форума на сайте
Есть такой замечательный мод Recent topic, как сделать чтобы при клике темы, пользователя отсылало не на первое сообщение в теме, а на последнее? Код ?php
miba Поддержка и моды для phpBB2 6 Вт 02 Авг, 2011 08:31 Посмотреть последнее сообщение
miba
Нет новых сообщений Change Style on Index - проблемы
Такой несложный мод, а поставить не получается, выдаёт ошибку Fatal error: Call to undefined function style_select() in /home/forfri/public_html/test/forum/index.php on line 315 Как только не подставляю в index.php Код
Kontrochka Поддержка и моды для phpBB2 15 Ср 20 Янв, 2010 13:43 Посмотреть последнее сообщение
Dedof
Нет новых сообщений Мод Change language on index
смена языка форума по умолчанию
Описание мода: Этот мод позволяет пользователю изменить язык форума на главной странице форума. Версия мода: 1.0.0 Сложность установки: Легко Время установки: ~3 минут Примечание автора: Если пользователь - гость, то
Sergey Поддержка и моды для phpBB2 23 Ср 10 Июн, 2009 10:19 Посмотреть последнее сообщение
Sergey
Нет новых сообщений Мод Search Form in Index
поле быстрого поиска для каждой категории и форума в списке форумов на главной странице
Описание мода: Мод добавляет поле быстрого поиска для каждой категории и форума в списке форумов на главной странице в стиле IPB Версия мода: 1.0.3 Сложность установки: Легко Время установки: ~5-10 минут Примечание
Sergey Поддержка и моды для phpBB2 0 Пн 05 Сен, 2005 13:22 Посмотреть последнее сообщение
Sergey






Часовой пояс: UTC + 3 часа
Просматривают тему:
Зарегистрированные пользователи: Нет

Перейти:   
Версия для печати
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы
/a
Имя:

Пароль:

Запомнить
  Яндекс.Метрика
CrackerTracker © 2004 - 2017 CBACK.de