Optimization 为静态内容使用多个子域的后勤方面

Optimization 为静态内容使用多个子域的后勤方面,optimization,performance,Optimization,Performance,通常认为,为来自不同子域(images1.domain.com、images2.domain.com等)的静态内容(如图像和css)提供服务是最佳做法。我已经在中详细讨论了这一点,但是我担心在可维护性方面的一般后勤问题 我们的网站有数千页,将所有对静态内容的引用从相对链接更改为指向不同子域的绝对链接听起来像是一场噩梦,实现这一点的一般方法是什么?是否有任何方法可以自动化此操作,可能是使用位于web服务器前面的服务器,重写传入的请求以指向不同的子域?有没有考虑到这一点而构建的框架?性能增益是否值得

通常认为,为来自不同子域(images1.domain.com、images2.domain.com等)的静态内容(如图像和css)提供服务是最佳做法。我已经在中详细讨论了这一点,但是我担心在可维护性方面的一般后勤问题

我们的网站有数千页,将所有对静态内容的引用从相对链接更改为指向不同子域的绝对链接听起来像是一场噩梦,实现这一点的一般方法是什么?是否有任何方法可以自动化此操作,可能是使用位于web服务器前面的服务器,重写传入的请求以指向不同的子域?有没有考虑到这一点而构建的框架?性能增益是否值得增加复杂性和维护成本


编辑:我们的环境是IIS 7上的ASP.NET 3.5 SP1。

我曾经使用mod_rewrite(例如,一个Google链接:)在小规模上这样做过一次

我选择此选项的原因是因为我有一些文件扩展名,它们都在单独的服务器上。具有该扩展名的任何内容都会直接移动到子域上的相同文件结构。可能和你的情况不一样


这是一个小规模的解决方案,不确定数千人这样做对性能的影响。为此,我可能会尝试一个文本搜索/替换脚本。

我曾经使用mod_rewrite(例如,一个谷歌链接:)在小规模上这样做过一次

我选择此选项的原因是因为我有一些文件扩展名,它们都在单独的服务器上。具有该扩展名的任何内容都会直接移动到子域上的相同文件结构。可能和你的情况不一样


这是一个小规模的解决方案,不确定数千人这样做对性能的影响。为此,我可能会尝试一个文本搜索/替换脚本。

一种可能的方法可能是使用客户端Javascript(jQuery?)检查所有相关链接,并将它们更改为指向静态位置


由于您希望在不破坏浏览器缓存的情况下使用多个域,因此我会对文件名使用一些哈希,以确保名称始终指向同一子域…

一种可能的方法是使用客户端Javascript(jQuery?)检查所有相关链接,并将其更改为指向静态位置


由于您希望在不破坏浏览器缓存的情况下使用多个域,因此我会对文件名进行一些哈希运算,以确保文件名始终指向同一子域…

eww!!对我来说,这听起来是非常不成熟的优化。除非你仔细地进行基准测试,否则我会把这个“改进”放在待办事项清单的最后

如果您真的想这样做,您应该在生成HTML时添加一个额外的间接层(下面是伪JSP语法)。而不是:

<img src="http://images.mysite.com/image/image1.gif"/>


并有图片:url生成一个随机的虚拟主机或什么的;您可以在以后重新定义image:url的工作方式


如果这是不可能的,我相信伊兰·坎普夫的答案是正确的;用Java的说法,您将使用ServletFilter。

EWW!!对我来说,这听起来是非常不成熟的优化。除非你仔细地进行基准测试,否则我会把这个“改进”放在待办事项清单的最后

如果您真的想这样做,您应该在生成HTML时添加一个额外的间接层(下面是伪JSP语法)。而不是:

<img src="http://images.mysite.com/image/image1.gif"/>


并有图片:url生成一个随机的虚拟主机或什么的;您可以在以后重新定义image:url的工作方式


如果这是不可能的,我相信伊兰·坎普夫的答案是正确的;用Java的说法,你可以使用ServletFilter。

我做过一次,但幸运的是,我之前的人没有使用relativel链接,他们使用的是常量文件(大部分情况下),所以这相对简单


我认为这是一个好主意,它将打开您的可伸缩性选项。也许可以在代码库中搜索.jpg和.gif,然后创建一个宏,将子域附加到路径的根。请确保创建一个返回子域的函数,这样您就可以在一个中心位置放置要选择的子域的逻辑。

我曾经这样做过一次,但幸运的是,在我之前的人没有使用relativel链接,他们使用了一个常量文件(大部分情况下),因此相对容易


我认为这是一个好主意,它将打开您的可伸缩性选项。也许可以在代码库中搜索.jpg和.gif,然后创建一个宏,将子域附加到路径的根。请确保创建一个返回子域的函数,这样您就可以在一个中心位置放置要选择的子域的逻辑。

我可以看到这对于一个子域是如何工作的,但理想情况下我们需要2-4个子域。我们可以随机选择一个子域,但这会破坏浏览器cache.Ack。是的,我认为这里的规模很小——超出我的能力范围。每隔一段时间,你就会遇到这样的问题,这会让你说“鲤鱼!除了艰难的道路,没有办法做到这一点!”我真的希望比我聪明的人能让你不必这么说。我可以看到这对一个子域是如何起作用的,但理想情况下我们需要2-4个子域。我们可以随机选择一个子域,但这会破坏浏览器cache.Ack。是的,我认为这里的规模很小——超出我的能力范围。每隔一段时间,你就会遇到这样的问题,导致你说“鲤鱼!除了艰难的道路之外,没有其他方法可以做到这一点!”我真的希望比我聪明的人能阻止你这么说。不太可能奏效:你必须确保在浏览器看到URL并开始加载文件之前更改URL。我唯一能想到的其他方法是在服务器上执行同样的操作。使用一些可以在发送到客户端之前处理HTML的模块。很像a组的人