Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как выводить больше 1000 новостей через custom на одной странице?

Как выводить больше 1000 новостей через custom на одной странице?


     23.09.2020    custom    Все вопросы » Общие вопросы    1095

вопрос
В fullstory установлен custom с параметрами


{custom id="[xfvalue_X]" template="template" available="showfull" limit="3000" order="id_as_list" sort="asc" cache="yes"}


В поле X указываются список ID через запятую.
В каждой новости количество ID всегда разное.
Всё работало до того момента, пока я вчера не добавил новость в которой было 1005 штук ID.

В результате при открытии новости открывается просто белая страница, даже исходных код в браузере пустой.
Начал удалять по одному ID, и на количестве 997 новость открылась нормально.
С новостями всё в поряке, проверял удалением ID с обоих сторон, тут дело именно в количество новостей в одном custom.

Почему может быть так что больше 1000 новостей не тянет?)

В шаблоне custom указано минимум информации:
Title
Тег newsid
1 поле содержащее номер(цифры)
1 поле содержащее мультирейтинг от сандера
Родной DLE рейтинг
Закладки
Около 5-6 полей с проверкой на заполнений [xfgiven_x] [xfvalue_x] [/xfgiven_x]
Около 3 полей с проверкой [ifxfvalue tagname="tagvalue"] Текст [/ifxfvalue]
И есть проверка на [group=5] и [not-group=5]

Это всё сильно нагружает custom?

Ответа пока нет


21 комментарий

dj-avtosh
PHP-developer

dj-avtosh - 23 сентября 2020 13:37 -

Здравствуйте, а что говорят логи сервера?

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Snake
Юзер

Snake - 23 сентября 2020 13:49 -

Ничего такого там нет, там сейчас только вот такие ошибки есть, но что они значат я не понимаю, и они не связаны с той новостью в которой располагается custom.


[Wed Sep 23 11:06:23.289350 2020] [access_compat:error] [pid 12351] [client 162.158.106.82:46652] AH01797: client denied by server configuration: /var/www/admin/data/www/site.ru/public_html/xfsearch
[Wed Sep 23 13:43:05.364690 2020] [access_compat:error] [pid 29876] [client 162.158.159.40:12882] AH01797: client denied by server configuration: /var/www/admin/data/www/site.ru/public_html/readcomics
[Wed Sep 23 13:46:04.158756 2020] [access_compat:error] [pid 31260] [client 162.158.159.136:12446] AH01797: client denied by server configuration: /var/www/admin/data/www/site.ru/public_html/readcomics

dj-avtosh
PHP-developer

dj-avtosh - 23 сентября 2020 14:15 -

в функции custom_print за это отвечает переменная $custom_limit, она же ничем не ограничивается. Однако, почему я у Вас прошу лог, потому что может быть ограничение php на разбер буффера.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 23 сентября 2020 14:17 -

Настройка в php должна называться output_buffering.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Snake
Юзер

Snake - 23 сентября 2020 14:24 -

В php info показывает output_buffering 4096

dj-avtosh
PHP-developer

dj-avtosh - 23 сентября 2020 14:24 -

экспериментируйте

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 23 сентября 2020 14:18 -

Второй вариант развития событий: не хватает оперативной памяти. Включайте вывод ошибок - и смотрите. Если vds - смотрите htop во время выполнения скрипта.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Snake
Юзер

Snake - 23 сентября 2020 14:27 -

Спасибо за совет, у меня VPS, сейчас попробую htop.

Второй вариант развития событий: не хватает оперативной памяти.
У меня 4 гб оперативки.
В конфиге мэмкэш я указал 2 гб оперативки под мэмкэш, может много отдал, или наоборот мало?)

dj-avtosh
PHP-developer

dj-avtosh - 23 сентября 2020 14:29 -

htop сможет подробно ответить на ваши вопросы.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Sander
PHP-developer

Sander - 23 сентября 2020 18:33 -

Чему равен параметр memory_limit ?
Возможно в настройках php отключен display_errors, поэтому и белая страница. Опция в php ini_set('display_errors' в определенных случаях может не работать и игнорироваться.
Мне в таких помогает строка в htaccess
php_flag display_errors on


PS. Проверил у себя на БД с >100к записями. 2к записей вывело без проблем. Разве что браузер скушал 3гб оперативы на вкладку :)
Да и на сайте использование памяти 30+ Мб.


PPS. Не знаю что скажут сеошники, но вроде такое количество ссылок на странице - не хорошо.
Думаю лучше выводить 50-100 записей с AJAX подгрузкой.

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Snake
Юзер

Snake - 24 сентября 2020 09:44 -


Чему равен параметр memory_limit ?
128M
Попробовал увеличить до 1024M, не помогло.
Выше этого параметра увидел ещё вот такую настройку max_input_vars 1000, попробовал увеличить до 2000, тоже не помогло.

Опция в php ini_set('display_errors' в определенных случаях может не работать и игнорироваться.
Мне в таких помогает строка в htaccess

Вообще в настройках php стоит
display_errors On
display_startup_errors On

По идее этого достаточно, но сейчас попробую и в htaccess добавить.

Пробовал даже на страницу добавить php код, всё равно белая страница.
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('error_reporting', E_ALL);



Разве что браузер скушал 3гб оперативы на вкладку :)
Ну у меня там простой шаблон, без постеров и прочего, одна новость = ссылка + закладка + рейтинг
Выглядит вот так:
Смотрите скрин

Такой шаблон вроде не много жрёт оперативы, на странице с 500+ новостями модуль показывает:

Первое открытие:
Скрипт выполнен за: 6.52003с
Шаблон создан за: 6.08468с
Запросы: 19
Выполнены за: 0.19777с
Расход оперативы 7.3Мб

Открытие с кэшэм:
Скрипт выполнен за: 0.56589с
Шаблон создан за: 0.21603с
Запросы: 14
Выполнены за: 0.06068с
Расход оперативы 6.88Мб

PPS. Не знаю что скажут сеошники, но вроде такое количество ссылок на странице - не хорошо.
Думаю лучше выводить 50-100 записей с AJAX подгрузкой.

Ну люди ленивые, не хотят грузить главы по 100 штук, хотят чтобы сразу полный список глав был в их поле зрения.
Например человек пришел прочитать 995 главу, это ему придётся 9 раз подгружать по 100 глав чтобы открыть 995 главу.
Поэтому я вывожу все главы сразу.

Sander
PHP-developer

Sander - 24 сентября 2020 10:19 -

Попробуйте так. В корне сайта создайте файл test.php с кодом
<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', true);

define('DATALIFEENGINE', true);
define('ROOT_DIR', __DIR__);
define('ENGINE_DIR', ROOT_DIR . '/engine');

@include (ENGINE_DIR . '/data/config.php');
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
header('Content-type: text/plain; charset=' . $config['charset']);



=== Эту строку убрать после первого запуска. Нужно проверить, отображаются ли ошибки на странице.



//Сюда список ID через запятую, 1-2 тыс.
$id_list = '1,2,3,4,5';




$db->query("SELECT p.*, e.*
	FROM dle_post p
	LEFT JOIN dle_post_extras e
		ON p.id = e.news_id
	WHERE approve AND p.id IN ($id_list)
	ORDER BY FIND_IN_SET(p.id, '$id_list')
");
while ($row = $db->get_row()) {
	echo $row['id'] . ' - ' . $row['title'] . PHP_EOL;
}

echo (memory_get_peak_usage() / 1024 / 1024) . ' Mb' . PHP_EOL;

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Snake
Юзер

Snake - 24 сентября 2020 10:50 -


При первом запуске выдало
Parse error: syntax error, unexpected '===' (T_IS_IDENTICAL), expecting end of file in /var/www/admin/data/www/site.ru/public_html/testnews.php on line 16


После удаления строки уже выдало страницу с исходным кодом, я сохранил в html и запустил в браузере, вот что показало: смотрите скрин.

Sander
PHP-developer

Sander - 24 сентября 2020 10:56 -

WHERE approve AND p.id IN ($id_list);

тут в конце точка с запятой лишние.

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Snake
Юзер

Snake - 24 сентября 2020 11:06 -

Исправил, вот что выдало:

Тут комментарии ограничены по длине, только концовка:

24941 - One Piece
24942 - One Piece
24943 - One Piece
24944 - One Piece
3.0486907958984 Mb

А до этого просто полный список всех id
Вот ссылка на txt файл https://dropmefiles.com/Z9iy3

Sander
PHP-developer

Sander - 24 сентября 2020 11:10 -

Содержимое файла не важно. Важен сам факт, что страница успешно формируется и отображается.
2к записей успешно выводит?
Если да, то усложним.
echo $row['id'] . ' - ' . $row['title'] . PHP_EOL;

Заменить на
var_export($row);

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Snake
Юзер

Snake - 24 сентября 2020 11:18 -

"2к записей успешно выводит?"
Да, моментально.

"Если да, то усложним."
Сделал, тоже всё вывело моментально.

P.S. Тут что-то с bb панелью, она то работает, то не работает.

Sander
PHP-developer

Sander - 24 сентября 2020 12:15 -

Таким образом мы выяснили, что с запросом все ок и памяти достаточно.
Значит есть что-то не учтенное в самом движке или сторонних модулях.
И все это можно выяснить только по месту проведя анализ.

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Snake
Юзер

Snake - 24 сентября 2020 13:00 -

Понял, спасибо, буду поочерёдно выключать модули и смотреть на результат.

dj-avtosh
PHP-developer

dj-avtosh - 24 сентября 2020 14:46 -

а исходный код страницы тоже пустой?

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Snake
Юзер

Snake - 24 сентября 2020 15:04 -

Если в браузере нажать на показать исходный код, то да, там пусто.

А если зайти в инспектор, то там только это:
<html><head></head><body></body></html>

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх