【问题标题】:.net/iis6 Limitations of the urlMappings in web.config for extensionless url rewriting.net/iis6 web.config 中 urlMappings 对无扩展 url 重写的限制
【发布时间】:2010-04-13 21:15:02
【问题描述】:

我正在研究 iis6 / net 2.0 网站的简单 url 重写设置。

我在 IIS 中添加了一个 . 通配符映射,它指向 .net 可执行文件。我还使用 web.config 中的 urlMappings 元素来添加一些重写的​​ url。我已将配置移到 web.config 之外,因此我可以在不强制应用程序重新启动的情况下更改列表,如下所示:

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

我想允许我们的内容管理向这个文件添加 url,这样我们就可以拥有无​​扩展名的友好 url。

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

这工作得很好,但我担心我可以在 urlMappings 配置中映射的条目数量的限制。我似乎找不到任何关于此的文档。有没有人发现任何限制?

谢谢。

【问题讨论】:

    标签: asp.net iis-6


    【解决方案1】:

    查看urlMapping 内部 我看到mappedUrl 存储在UrlMappingCollection 来自ConfigurationElementCollection 的虚拟没有限制。

    网址数。

    我认为虚拟可以加载的数量没有限制。

    加载时间

    加载延迟仅在声明 web 时,然后保持静态值,并且仅在您更改 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 映射 = 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 映射存在问题。

    现实生活中

    最近我为数据库调用优化了类似的代码。我在一个类似的循环中将速度从 500ms 降低到 150ms-200ms,该循环在几秒钟内被称为 20.000-50.000 次。

    在您的情况下,我认为此路由不会在页面调用中调用超过 100-200 次。 (我说 100 是因为您将所有调用重定向到 asp.net,甚至是图像)

    所以我认为这真的取决于你赢得网络的速度有多快超级但我认为你的用户并没有注意到不同,在这一点上,您只会更快获得 10-20-30 毫秒 - 只有当您拥有大量 url(可能超过 1500 个 url)时,我们才会说话。

    还调用了包含内容的第一个页面,然后从此循环中搜索,返回页面,然后是图像,因此用户只会在页面的前 1-5 次调用延迟和不明白图像上的小延迟。

    这里的优化只是在程序上衡量的,不会被用户理解。

    这里的时间来自我在(慢速)计算机上的经验,并且仅给出我的经验感。

    多说几句

    我认为 urlMapping 是一个随时可用的解决方案,可以帮助任何人开始使用,但如果有些人有时间知识和资源值得修复他自己的 url 映射,那么在他的需要和超快速如果他喜欢。开始时有 urlMapping 很好,但如果您需要一些更高级的想法,那么您可以稍后在项目变得更大时更新它。

    我是速度的粉丝,在电脑上等待的每一秒都是我们生命中的一秒。 无论如何,如果您使用 urlMapping 很容易,只需做到这一点,使网站可以运行,然后在几个月后再次检查它。

    【讨论】:

    • 是的,该集合可能能够容纳无限数量的项目,但如果出现(主要)性能问题,我在实际层面上很好奇
    • @ScottE 我输入了更多信息。
    • 感谢您如此深入地研究这个问题,Aristos。您是否有使用 urlMappings 处理大量 url 的经验?比如说,在 500 - 1000 范围内?
    • @ScottE 是的,我不仅对 url,而且对许多类似的循环都有很多经验。速度上的差异很难注意到,只有在我优化了太多点的所有代码后,我才能看到不同之处。不仅有一个点需要快速,几乎所有点都必须非常快。此外,我在很多地方都使用了小型缓存例程来加快思考速度。
    • @ScottE 我不知道你的程序,我不知道你要调用多少次 500-1000 循环,在用户看到之前,但我认为至少在开始时你这部分没有问题。
    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    相关资源
    最近更新 更多