мой текущий вопрос тесно связан с этим , но гораздо более конкретен. Мы должны спланировать стратегию проектирования для цели, описанной в этом вопросе.
Мы хотим сделать это путем переписывания HTML в веб-формах ASP.NET. Мой вопрос: какая стратегия является лучшей в соответствии с параметрами осуществимость , влияние на производительность и усилия по внедрению в унаследованных приложениях .
Что я должен сделать
предназначен для получения HTML-вывода веб-формы, его синтаксического анализа и замены определенных URL-адресов в соответствии с определенными пользователем правилами. В этом примере я бы переписал весь статический контент в URL CDN, но его можно легко распространить на методы перезаписи URL. Я нашел лотов (и я действительно имею в виду лотов ) статей о перезаписи URL с точки зрения того, что URL-адреса, подобные http://myblog.com/2092
, интерпретируются как http://myblog.com/Default.aspx?post=2092
, но я не нашел ни одного, показывающего мне, как разумно форматирует URL-адреса старого стиля в более короткий формат прямо из HTML-кода (чтобы страница отображала краткий URL-адрес напрямую) [править] без глубокого вмешательства в код.
Стратегия 1
Как предложено в ответе на вышеупомянутый вопрос, напишите модуль HTTP, который перехватывает HTML и переписывает его. На самом деле, я оглянулся и увидел, что могу установить потоковый объект Response.Filter
, который выполняет фильтрацию HTML.
- Плюсы: я могу внедрить модуль HTTP в унаследованное приложение, настроить правила перезаписи через XML и заставить самое старое приложение CRM / электронной коммерции загружать статический контент из CDN, не касаясь его кода вообще .
- Минусы: я подозревал, что (и комментарий здесь подтверждает моих подозреваемых) необходимость переопределить метод
Stream
Write
, который в общем случае работает с частичным буфером, может привести к в плохих заменах. Предположим, что метод Write сначала вызывается с чанком, подобным ttp://mydomain.com/static/ima
(где, как я полагаю, <img src="h
уже был написан ранее), а затем ge.png" />
(так что предположите окончательный URL-адрес :-P) с правилом перезаписи, в котором регулярное выражение http://mydomain.com/static/[^"]*
в http://cdn.com/path/$1
, замена не сделана. Чтобы обойти это, я мог бы использовать MemoryStream или что-то подобное для буферизировать полный набор данных и затем выполнять замены, но это может вызвать проблемы на высоконагруженных серверах
Стратегия 2
Переопределение Page
Render
метода таким образом, как описано здесь
- Плюсы: не испытывает проблемы с разбивкой
- Минусы: требует определения базового класса для всех страниц. Реализуется в новых приложениях, не уверен в поддержке устаревших приложений. Кажется, есть проблема, поскольку вы не можете создать экземпляр HttpTextWriter напрямую
Очевидно, что для новых веб-приложений, которые нам предстоит разработать, я бы выбрал стратегию 2, но мне действительно нравится использовать динамические компоненты , так как их можно легко подключить, когда приложение требует их ( поэтому, если наше новое приложение будет установлено без CDN, функция будет отключена).
Вкратце, мои вопросы
Как бы вы исправили минусы обеих стратегий (особенно 1-й)? И, конечно же, у вас есть другие стратегии, чтобы предложить достичь этой цели?
Спасибо.