Я начинаю писать, что может вырасти в крупный коммерческий сайт.Бизнес имеет несколько аспектов, поэтому я рассматриваю пользовательский интерфейс на основе «виджетов», не отличающийся от домашней страницы BBC (http://www.bbc.co.uk).
Я пишу систему управления контентом, которая позволила бы администратору создавать страницы с использованиемвыбор предопределенных виджетов (например, текстовый виджет, виджет продукта, виджет заголовков новостей и т. д.) Я пишу приложение с использованием ASP.NET MVC.
Наценка для каждого типа виджета будетбыть инкапсулированным в пользовательский элемент управления (ascx). Я рассматриваю два подхода для рендеринга виджетов (которые я могу смешать):
Использование RenderPartial для создания страницы на сервере (очень похоже на образец Kona с сайта ASP.NET MVC)
Визуализация заполнителей виджетов на обслуживаемой странице, а затем получение клиентом запроса на каждый заполнитель (используяjquery для вызова стандартных действий MVC, возвращающих HTML).
Второй подход привлекателен по двум причинам:
Он позволяет страницебыть ретВызывается без необходимости ждать медленных рендеров виджетов (например, виджета комментариев).
Это позволяет мне контролировать кэширование на уровне виджета (а не на уровне страницы)).Я могу использовать встроенные атрибуты OutputCache для индивидуального управления типом кэширования для каждого типа виджетов.
Вот вопрос:
Если часть содержимого страницы обрабатывается только по HTTP-запросам HTTP, инициированным javascript (т.е. не включается в первоначальный ответ), будет ли это содержимое включено в оценку / индексацию страницы Google?
Предположим, что запросы javascript запускаются на документе. Уже
Для тех, кто любит код, мой прототип реализует второй подход с использованием этого кода на сервере:
[OutputCache(Duration = 30, VaryByParam = "widgetUniqueKey")]
public ActionResult RenderWidget(int widgetId)
{
var cmsService = new CmsService();
var widget = cmsService.GetWidget(widgetId);
string viewName = widget.Accept(new ViewNameWidgetVisitor());
object viewData = widget.Accept(new ViewDataWidgetVisitor());
return View(viewName, viewData);
}
с этим кодом на клиенте (начальная страница GET возвратила div-метки-заполнители)
$('.widgetPlaceholder').each(function() { renderWidget(this) });
function renderWidget(source) {
var placeholder = $(source);
var widgetId = placeholder.attr('id').replace("widget", "");
var widgetUniqueKey = placeholder.children('div.uniqueId').text();
$.get('/home/RenderWidget', {
widgetId: widgetId,
widgetUniqueKey: widgetUniqueKey
},
function(data) {
placeholder.replaceWith(data);
}, "html"
);
}
Параметр widgetUniqueKey зависит от типа виджета: это может быть идентификатор продукта для виджета продукта;идентификатор пользователя для виджета рекомендаций;и т.д.
Большое спасибо