0

因此,为了加快加载时间,我们设置了一堆 CDN 主机名来提供图像和资产。为同一资产始终使用同一主机的最佳方式是什么?例如 button.gif 总是从http://assets-15.ourserver.com获取。

我正在考虑提出一些规则,其中文件名的 md5 哈希以某种方式映射到服务器(不能使用文件名本身,因为很多相似:“button-home.gif”,“button-about. gif”等)。我不确定这是否是最有效的方法,但似乎它会起作用。

有没有人有这种事情的经验?我需要一个与语言无关的解决方案,因为这将被几种不同的语言使用。

编辑:雅虎关于如何加快速度的解释:http: //developer.yahoo.com/performance/rules.html#split

4

2 回答 2

1

内容交付网络 (CDN) 的重点是从离用户最近的服务器加载资产。

从显式服务器加载给定资产违背了 CDN 的目的。我的猜测是它不受支持。如果您需要从明确的位置加载资产,请不要将其放在 CDN 上,而是将其放在中央服务器上。

于 2010-08-11T16:42:13.030 回答
1

当我做这样的事情时,所有相关资源都有id号,所以我只是以此为基础。尽管如此,扩展到非数字并不难。

您使用的主机名数量是平衡的,过多的主机查找开销超过了多个主机名的优势,因此在外部您可能有大约 12 个,可能更少。

这本身意味着一个简单的散列很可能很容易地在给定的范围内拆分,而无需特别聪明。

缺少编码问题令人困惑,因为您的应用程序要么完全处理 IURI(在这种情况下 utf-8 处理已经是你处理过的问题),要么没有,在这种情况下 URI 中的每个字符都转义了路径的形式(即实际 URI 中使用的名称)将在 ASCII 范围内。

没有必要通过加密安全或类似的东西,因为猜测使用的服务器不是安全风险。如果一两页稍微偏向一台服务器而不是另一台服务器,这不会是世界末日(随机性无论如何都会发生在完美的服务器上)。

因此,只需遍历图像 URI 的绝对路径中的字符(从第一个 / 开始的主机之后的所有内容),将它们的整数值彼此相加,然后使用主机名部分的模数。

如果您想限制因速度问题而处理的字符数,请从最后开始执行,因为这将有最大的变化。

“button-home.gif”与“button-about.gif”相似不是问题,因为从这样的过程的角度来看,它们根本不是很相似。

如果您曾经增加使用的主机名数量,请尝试将其作为之前数量的倍数,因为这会导致尽可能多的资源保留其旧 URI。

于 2010-08-11T18:15:35.180 回答