Чтение онлайн

на главную - закладки

Жанры

Шрифт:

using System.Web.Routing;

namespace MvcApplicationl {

public class MvcApplication : System.Web.HttpApplication

{

public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(

"Default",

"{controller}.mvc/{action}/{id}",

new { action = "Index", id = "" }

);

routes.MapRoute(

"Root",

"",

new { controller = "Home", action = "Index", id = "" }

);

}

protected void Application_Start

{

RegisterRoutes(RouteTable.Routes);

}

}

}

Обратите

внимание на выделенные участки кода листинга П1.1. Вместо создаваемого по умолчанию маршрута с шаблоном {controller}/{action}/{id}, для IIS6 необходимо создать маршрут с шаблоном {controller}.mvc/{action}/{id}. Плюс, для обработки запросов к корню приложения необходимо создать еще один маршрут с именем Root и пустым шаблоном маршрута.

После таких изменений каждый запрос к вашему приложению должен иметь вид {controller}.mvc/{action}/{id}, т. е. каждая строка имени контроллера должна заканчиваться с расширением mvc. Например: запрос /product.mvc/details/1 вызовет контроллер-действие Details в контроллере Product и передаст в параметр id значение 1.

В случае, когда вы не имеете доступа к конфигурированию сервера IIS и не можете задать сопоставление расширения и ISAPI-обработчика, то решением может стать использование вместо расширения mvc другого расширения, зарегистрированного в системе: axd, aspx, ashx. В таком случае описанный в листинге код должен быть модифицирован следующим образом:

routes.MapRoute(

"Default",

"{controller}.aspx/{action}/{id}",

new { action = "Index", id = "" }

);

Это означает, что все ваши запросы должны представлять собой подобие запроса /product.aspx/details/1 с расширением aspx для имени контроллера.

Ограничение IIS6 приводит к тому, что маршрутизация и строки URL-запросов к вашему приложению не будут выглядеть так же красиво, как в приложениях, работающих на базе IIS7. Кроме того, вам будет необходимо генерировать совместимые ссылки с определенными маршрутами и используемыми в них расширениями (mvc или aspx). Однако в настоящее время использование серверов IIS6 в компаниях, которые предлагают услуги хостинга, стремится к нулю, и все крупные хостеры уже предлагают хостинг на базе IIS7 или даже IIS7.5. Поэтому, перед тем как сделать выбор хостера, уточните, предлагает ли он сервер на базе IIS7, и если обнаружится, что он по какой-то причине до сих пор этого не делает, то, возможно, вам следует поискать другого, более современного хостера.

ПРИЛОЖЕНИЕ 2

Оптимизация производительности

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

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

Кэширование данных

Одним из базовых инструментов повышения производительности является

кэширование сгенерированных данных, в основном, веб-страниц. В ASP.NET существует базовый инструмент кэширования данных с помощью директивы @outputcache, параметры которой позволяют управлять временем кэширования страницы и задавать условия, при которых кэширование происходит.

В ASP.NET MVC для кэширования результатов выполнения действий в контроллерах предлагается использовать специальный атрибут outputcacheAttribute, который представляет собой аналог директивы @outputcache. Например, далее представлен код, который позволяет кэшировать все результаты контроллера на 30 минут:

[OutputCache(Duration = 1800, VaryByParam = "none")]

public class AdminController : Controller

Подробнее параметры этого атрибута рассмотрены в главе 4.

С помощью атрибута OutputCacheAttribute вы можете решить проблему загруженного запросами сервера. Кэшированный результат запроса имеет определенный срок жизни, в течение которого вместо вторичного получения результата в ответ на запрос возвращается кэшированное значение. Иными словами, кэширование позволяет нам снизить нагрузку на ресурсы сервера путем возвращения одного и того же результата на разные запросы клиентов. Более того, механизм кэширования работает так, что браузер пользователя также кэширует результат и будет брать информацию о странице при повторном обращении из своего локального кэша, а не путем отправки запроса на сервер.

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

Сжатие данных

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

Сервер IIS, на котором работают приложения ASP.NET MVC, предлагает комплексный механизм, позволяющий на лету сжимать исходящие данные из сервера и принимать сжатые данные от клиента. Для включения этого механизма в IIS7 можно воспользоваться опцией Compression, в которой можно включить сжатие как статического (скрипты, CSS-стили), так и динамического контента.

В случае, если включение динамического сжатия недоступно, следует включить его поддержку через панель добавления инструментов Windows (рис. П2.1).

Сжатие данных, передаваемых между клиентом и сервером, работает следующим образом:

1. Клиент отправляет запрос серверу, в заголовке которого может передать информацию о том, что он поддерживает сжатие данных. Этот заголовок передается следующим образом: Accept-Encoding: gzip, deflate.

2. IIS-сервер, получив такой заголовок, уверен, что клиент может обрабатывать сжатые данные, поэтому, если разработчик настроил сервер на сжатие данных, результат запроса будет сжат с помощью алгоритма GZip или Deflate и отправлен клиенту со следующим опознавательным заголовком: Content-Encoding: gzip.

Поделиться:
Популярные книги

Большая Советская Энциклопедия (СО)

Большая Советская Энциклопедия
Справочная литература:
энциклопедии
5.00
рейтинг книги
Большая Советская Энциклопедия (СО)

Эффект Этоса

Модезитт Лиланд Экстон
2. Подобно Войне за Веру
Фантастика:
боевая фантастика
5.00
рейтинг книги
Эффект Этоса

Гоголь

Степанов Николай Леонидович
324. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Гоголь

Берсеркер

Саберхаген Фред
1. Берсеркер
Фантастика:
научная фантастика
7.56
рейтинг книги
Берсеркер

Король звезды

keller nora
Проект «Поттер-Фанфикшн»
Фантастика:
фэнтези
5.00
рейтинг книги
Король звезды

Инквизитор. Омнибус. Пенталогия

Абнетт Дэн
6. Цикл книг про инквизиторов Эйзенхорна и Рейвенора
Фантастика:
боевая фантастика
5.00
рейтинг книги
Инквизитор. Омнибус. Пенталогия

Карл Ругер. Боец

Мах Макс
1. Карл Ругер
Фантастика:
фэнтези
6.50
рейтинг книги
Карл Ругер. Боец

Точка Бифуркации III

Смит Дейлор
3. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации III

Статьи

Переслегин Сергей Борисович
Документальная литература:
публицистика
5.00
рейтинг книги
Статьи

Мир философии

Гуревич Павел Семенович
Научно-образовательная:
философия
5.00
рейтинг книги
Мир философии

Сердце Единорога. Стихотворения и поэмы

Клюев Николай Алексеевич
Поэзия:
поэзия
6.25
рейтинг книги
Сердце Единорога. Стихотворения и поэмы

Будем жить!

Сердюк Алексей
2. Повезло
Фантастика:
боевая фантастика
5.00
рейтинг книги
Будем жить!

Неучтенный элемент. Том 8

NikL
8. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 8

Сравнительные жизнеописания

Плутарх
Документальная литература:
биографии и мемуары
8.85
рейтинг книги
Сравнительные жизнеописания