.net / iis6 Ограничения urlMappings в web.config для перезаписи URL без расширения - PullRequest
1 голос
/ 14 апреля 2010

Я изучаю простую настройку перезаписи URL для сайтов iis6 / net 2.0.

Я добавил в IIS шаблон подстановки . , который указывает на исполняемый файл .net. Я также использую элемент urlMappings в web.config, чтобы добавить некоторые переписанные URL-адреса. Я переместил конфигурацию за пределы web.config, чтобы я мог вносить изменения в список без принудительного перезапуска приложения, например:

  <urlMappings configSource="config\urlMappings.config">
  </urlMappings>

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

<add url="~/someurl" mappedUrl="index.aspx?page=123" />

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

Спасибо.

1 Ответ

2 голосов
/ 01 мая 2010

Взгляд внутрь urlMapping Я вижу, что mappedUrl хранятся на UrlMappingCollection которые исходят из ConfigurationElementCollection , которые виртуальные не имеют ограничений.

Количество URL.

Я думаю, что у виртуальных нет предела тому, сколько вы можете загрузить.

Время загрузки

Задержка загрузки зависит только от состояния сети, затем она остается на статическом значении и перезагружается только при изменении web.config или перезапуске приложения.

Память

Ну, у вас есть статическая коллекция со всеми этими данными, вызываемыми в начале каждого запроса. Зависит от того, сколько данных вы собираетесь загрузить на web.config.

Время поиска

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

Это код с интенсивным поиском для каждого URL

internal string HttpResolveMapping(string path)
{
    string mappedUrl = null;
    string str2 = UrlPath.MakeVirtualPathAppRelative(path);
    UrlMapping mapping = this.UrlMappings[str2];
    if (mapping != null)
    {
        mappedUrl = mapping.MappedUrl;
    }
    return mappedUrl;
}

здесь UrlMapping mapping = this.UrlMappings [str2]; вызывает

protected internal ConfigurationElement BaseGet(object key)
{
    foreach (Entry entry in this._items)
    {
        if ((entry._entryType != EntryType.Removed) && this.CompareKeys(key, entry.GetKey(this)))
        {
            return entry._value;
        }
    }
    return null;
}

Мне нужно проверить это немного больше, но я думаю, что есть проблема с поиском отображения URL.

В реальной жизни

В последнее время я оптимизирую подобный код для вызова базы данных. Я снизил скорость с 500 мс до 150 мс-200 мс в аналогичном цикле, который вызывается 20 000-50 000 раз за несколько секунд.

В вашем случае я не думаю, что эта маршрутизация будет вызываться более 100-200 раз при вызове страницы . (и я говорю 100, потому что вы перенаправляете все вызовы на asp.net, даже изображения)

Так что я думаю, что это действительно зависит от того, насколько быстро супер вы выиграли свою сеть, но ваши пользователи, я не думаю, что они замечают разные и в этот момент вы наберете на 10-20-30 мс быстрее, а мы говорим только в том случае, если у вас огромное количество URL (может быть, более 1500 URL).

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

Оптимизация здесь будет измеряться только программами и не будет понятна пользователям.

Время здесь основано на моем опыте работы на моих (медленных) компьютерах и дает только смысл моего опыта.

Еще несколько слов

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

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

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