Как ускорить навигацию по большой категории веб -сайтов?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как ускорить навигацию по большой категории веб -сайтов?

Сообщение Anonymous »

У меня есть меню категории на веб -сайте, которое имеет глубину четыре уровня. Есть несколько тысяч ссылок. Моя текущая реализация просто проходит через каждый уровень, чтобы добавить элементы верхнего уровня, а затем любые дочерние предметы. Это, по -видимому, вызывает довольно большое замедление на участке (даже с кэшированием). Я пробовал рекурсивный подход, но, если что-то, что казалось медленным.$menu = Cache::remember('menu', 60*60, function() {
$toplevelCategories = Category::select('id', 'name', 'position', 'enabled')->where('path', '')->orWhereNull('path')->where('menu', 1)->where('enabled', 1)->get();

$menu = (new FrontendMenu());

foreach ($toplevelCategories as $category) {
$menuItem = new FrontendItem(null, $category->name, $category->getUrl(), $category->enabled, $category->position);

$allSubCategories = Category::select('id', 'name', 'path', 'position', 'enabled')
->whereIn('path', [$category->id])
->where('menu', 1)
->where('enabled', 1)
->get();

$secondLevelCategories = $allSubCategories->filter(function($val) {
if (count(explode('/', $val->path)) == 1) {
return $val;
}
});

foreach ($secondLevelCategories as $categoryChild) {
$secondaryMenuItems = new FrontendItem($menuItem, $categoryChild->name, $categoryChild->getUrl(), $categoryChild->enabled, $categoryChild->position);

$thirdLevelCategories = $allSubCategories->filter(function($val) use ($categoryChild) {
if (count(explode('/', $val->path)) == 2 && str_contains($val->path, $categoryChild->id)) {
return $val->path;
}
});

foreach ($thirdLevelCategories as $categoryChild) {
new FrontendItem($secondaryMenuItems, $categoryChild->name, $categoryChild->getUrl(), $categoryChild->enabled, $categoryChild->position);
}
}

$menu->addItem($menuItem);
}

return $menu;
});

< /code>
Это работает и достигает желаемого результата, однако он чрезвычайно медленный. Я также попробовал рекурсивный подход только с функцией, которая бы вызвала себя и построил бы меню, но это казалось медленнее, если что -нибудь.

Подробнее здесь: https://stackoverflow.com/questions/755 ... navigation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»