Что лучше - Кэширование вывода 6 дочерних действий или 6 запросов к БД с использованием RenderPartial?

Я пытаюсь разработать систему CMS, которая будет использовать теги для отображения аналогичного контента. Например, под разделом новостей будут статьи, блоги, новости и вопросы форума, которые имеют одинаковые теги. В каждом списке будет не более 5 предметов.

Я рассматриваю 2 варианта отображения этого связанного контента, и мне интересно, рекомендуют ли разработчики с большим опытом, чем я, один из них?

Скорость является основной целью, потому что у нас есть одинаково поддерживаемые способы выполнения обоих вариантов.

Вариант 1 - Кэширование результатов RenderAction Results

Для каждого раздела "похожий контент" визуализируйте дочернее действие на соответствующем контроллере и кэшируйте выходные данные. Это чувствует себя больше в духе MVC, и будет легко на вызовы БД. Но с 5 списками "аналогичного контента" это будет равняться 6 полным циклам MVC для каждого запроса страницы.

Я читал, что RenderAction все еще может быть дорогим, хотя он и улучшился за последние пару лет.

Вариант 2 - RenderPartials с запросами к БД для каждого

В качестве альтернативы, для каждого раздела "похожий контент" мы можем запросить базу данных и использовать RenderPartial для отображения вывода. Хотя для этого потребуется небольшой запрос к базе данных для каждого раздела (не более 5 элементов), мне интересно, как это можно сравнить с производительностью, сохраненной при НЕ вызове RenderAction.

Я часто читал, насколько быстрее RenderPartial по сравнению с RenderAction.

1 ответ

Решение

По сути, ваш выбор сводится к тому, что быстрее: RenderAction с уже кешированным результатом или 5 запросов к БД?

Когда вы смотрите на это таким образом, вы действительно говорите об одном решении без задержки в сети и одном решении с задержкой в ​​сети (отправка запроса в базу данных и получение ответа). Любое решение, которое устраняет сетевую задержку, де-факто быстрее, чем альтернатива с сетевой задержкой.

Кроме того, имейте в виду, что пуристам нравится говорить о том, что то или иное "медленно" по сравнению с другим. Да, дочерние действия всегда будут медленнее, чем частичные, потому что дочерние действия проходят через всю инфраструктуру маршрутизации, а затем, наконец, в механизм шаблонов Razor, тогда как частичные действия просто идут непосредственно в механизм шаблонов Razor. Но мы говорим о высоко оптимизированном, скомпилированном коде, работающем в памяти. "Медленнее" измеряется в миллисекундах или даже наносекундах. Конечно, со временем это может сложиться, и если вы сделали что-то сумасшедшее, например, отобразить 50 дочерних действий в одном представлении, вы можете увидеть заметное снижение производительности, но это, как правило, не стоит беспокоить в 99,9999% случаев.

Просто спроектируйте свое приложение так, чтобы оно было наиболее подходящим для вашего приложения, и перестаньте беспокоиться о миллисекунде здесь или там.

Другие вопросы по тегам