我正在调查iis6 / net 2.0网站的简单网址重写设置。
我在IIS中添加了一个指向.net可执行文件的。通配符映射。我还使用web.config中的urlMappings元素添加一些重写的URL。我已将配置移到web.config之外,这样我就可以对列表进行更改而不强制重启应用程序,如下所示:
<urlMappings configSource="config\urlMappings.config">
</urlMappings>
我想允许我们的内容管理将网址添加到此文件中,以便我们可以使用无扩展名的友好网址。
<add url="~/someurl" mappedUrl="index.aspx?page=123" />
这很好用,但是我担心我可以在urlMappings配置中映射的条目数量有限。我似乎无法找到任何关于此的文档。有没有人发现任何限制?
感谢。
答案 0 :(得分:2)
查看urlMapping内部 我看到了mappedUrl 存储在UrlMappingCollection 来自ConfigurationElementCollection的虚拟无限制。
我认为虚拟对你可以加载的数量没有限制。
加载延迟仅在说明Web时,然后保持静态值,并且仅在更改web.config或重新启动应用程序时重新加载。
您有一个静态集合,其中包含在每个请求开始时调用的所有数据。取决于您将在web.config上加载多少数据。
搜索时间,来自我的研究未完成使用任何哈希方法,但他们将字符串逐个比较,所以这里也许我们有一个小问题。
这是大量搜索每个网址的代码
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;
}
我需要再检查一下,但我认为搜索网址映射存在问题。
最近我为数据库调用优化了类似的代码。我在类似的循环上将速度从500ms降低到150ms-200ms,在几秒钟内称为20.000-50.000次。
在您的情况下,我不认为此路由会在页面调用中调用超过100-200次。 (我说100,因为你将所有调用重定向到asp.net,甚至是图像)
所以我认为这真的取决于超级如何快速赢得您的网络,但是您的用户我不认为他们注意到不同的,在这一点上,你只能获得10-20-30ms的速度 - 而且只有当你有大量的网址(可能超过1500个网址)时我们才会说话。
此外,调用内容的第一页,然后从此循环搜索,返回页面,然后跟随图像,因此用户将只看到页面的前1-5个呼叫延迟的不同不明白图像的小延迟。
此处的优化仅在程序上进行衡量,用户无法理解。
这里的时间来自我对我(慢)电脑的体验,只是给我的经验感。
我认为urlMapping是一个可以帮助任何人开始使用的随时可用的解决方案,但是如果有些人有时间知识和资源值得修复他自己的url映射,那么就可以满足他的需求并且超快他喜欢。对于开始是很好的有urlMapping但是如果你需要更高级的思考,那么你可以在项目变大后更新它。
我喜欢速度,在电脑上等待的每一秒都是我们生命中的第二秒。 如果您使用urlMapping很容易,只需这样做,使网站可行,然后在几个月后再次检查。