• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

[хак] Готовим ДЛЕ под сайт с большим количеством новостей

Статус
В этой теме нельзя размещать новые ответы.

bumer3

Постоялец
Регистрация
10 Янв 2008
Сообщения
291
Реакции
155
Иногда начинаются проблемы со скоростью работы движка при выходе количества новостей за несколько тысяч.

Многие говорят что ДЛЕ не годен под такие большие сайты. Но по своему опыту могу посоветовать сделать одну штуку которая конкретно увеличит скорость работы с БД.

У меня это проблема началась тогда когда я сделал вывод новостей по всем суб-категориям. Категорий было очень много. Проработало один день. Хотя сайт стоял на выделенном серве мне написал админ и сказал что я ему бд положил.

Проблема оказалась вот в чем. При выводе новостей за категорию в запросе используется такой синтаксис category regexp '[[:<:]](4)[[:>:]]' , где 4 ИД категории. Это связано с мульти категориями в ДЛЕ. И это очень сильно тормозит БД при большом количестве новостей.

Если планируется сайт под много новостей то мой совет отключить мульти категории и сделать нормальный запрос.

Что делаем если решили вырубить мульти категории.
1. Открываем файл /engine/inc/addnews.php
2. Находим
<select name="category[]" id="category" class="cat_select" onchange="onCategoryChange(this.value)" multiple>
{$categories_list}
</select>
меняем на
<select name="category[]" id="category" class="cat_select" onchange="onCategoryChange(this.value)" style="height:16px">
{$categories_list}
</select>

3. Открываем файл /engine/inc/editnews.php
4. Находим
<select name="category[]" id="category" class="cat_select" onchange="onCategoryChange(this.value)" multiple>
{$categories_list}
</select>
Заменяем на
<select name="category[]" id="category" class="cat_select" onchange="onCategoryChange(this.value)" style="height:16px">
{$categories_list}
</select>
5 Теперь в этом же файле ближе к верху.
Находим
if(!$user_group[$member_db[1]]['allow_all_edit'] AND $member_db[1] != 1) $author = $member_db[2];

if (strlen ($search_field) > 2)
и потом смотрим ниже идут запросы.
Там есть
category regexp '[[:<:]]($search_cat)[[:>:]]'
Заменяем на
ищем
// End prelisting
if (strlen ($search_field) > 2)
Ниже идут запросы
делаем аналогичную операцию

6. Открываем файл /engine/engine.php
Там находим
// ################ Вывод отдельной категории #################

Чучуть ниже есть
$sql_select = "SELECT id, autor, date, short_story, full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read FROM " . PREFIX . "_post where category regexp '[[:<:]]($get_cats)[[:>:]]' AND approve = '1'".$where_date." ORDER BY fixed desc, ".$config['news_sort']." ".$config['news_msort']." LIMIT ".$cstart.",".$config['news_number'];
меняем соответственно на
$sql_select = "SELECT id, autor, date, short_story, full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read FROM " . PREFIX . "_post where category=$get_cats AND approve = '1'".$where_date." ORDER BY fixed desc, ".$config['news_sort']." ".$config['news_msort']." LIMIT ".$cstart.",".$config['news_number'];
и также
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post where category regexp '[[:<:]]($get_cats)[[:>:]]' AND approve = '1'".$where_date;
на
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post where category=$get_cats AND approve = '1'".$where_date;

Вот и все вроде это были все файлы где встречается такие запросы. Вроде совсем маленькие изменения но при большом количестве новостей это сможет очень сильно разгрузить БД.

(с) By Bumer3 / nulled.ws
 
так мультикатегории в админке отключаются . :nezn:
 
Они то отключаются, но запросы от этого не меняются :)

Добавлено через 22 секунды
И всеравно тормозфт БД
 
мульти категории при использовании хака отключаются. Но если ты мульти категории оставиш и будеш использовать то посмотри что будет с работой скрипта при количестве новостей 10к
 
етот вариант для 7.5 подаидёт? кто ставил есть смисл? :confused:
 
Так объяснили же.. В настройках можешь и сменить, да вот regexp в селекте от этого никуда не денется - а тормоза именно из-за долгого селекта, а не из-за того что там реально какая-то новость в две категории попала.

У меня другой вопрос - можно ли заставить DLE скидывать куда-нибудь в папку сгенеренные ею html? Ну типа для джумлы это выглядит так: прописываем в htaccess ссылку на свой index.php для всех несуществующих файлов, а старый джумловский оставляем только если запрос идет с локалхоста (через rewrite_cond). И потом в своем index.php мы ловим REQUEST_URI, берем его через file_get_contents(Для просмотра ссылки Войди или Зарегистрируйся...) - т.е. сами у себя, дергая таким образом через сервер джумлу (двойная нагрузка!) и складываем полученный файлик в папку, чтобы в следующий раз апач взял его прямо оттуда, не вызывая php вообще (ни наш, ни джумловский). Папку периодически чистим от старых файлов.

Так вот вопрос - можно ли такое же "типо кеширование" замутить в DLE? Для большого количества новостей это самый идеальных выход. Про модули кеширования знаю, это не совсем то.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху