大多数文章都认为使用域分片会损害性能,但实际上并非完全如此。在某些条件下,单个连接可以重用于不同的域:
https://tools.ietf.org/html/rfc7540#section-9.1.1
对吗?有人在用吗?
那CDN呢?我可以保证他们将用户引导到同一服务器(IP)吗?
答案 0 :(得分:1)
是的,这是HTTP / 2的优点之一,从理论上讲,您可以保留对HTTP / 1.1用户的分片,并自动对HTTP / 2用户进行分片。
现实总是比以前复杂一些-主要是由于实现问题以及服务器在您声明的状态下解析为不同的IP地址。这篇博客文章已有数年历史,但描述了一些问题:https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/。此后也许有所改善,但可以想象问题仍然存在。此外,ORIGIN frame之类的新功能应该会有所帮助,但尚未得到广泛支持。
但是,我认为值得重新考虑分片实际上对HTTP / 1.1有用的假设。设置新连接(DNS查找,TCP设置,TLS握手,然后实际发送HTTP消息)的成本并不是无关紧要的,研究表明,使用6连接浏览器限制确实很实用,不用担心通过分片增加更多的连接。串联,拼接和内联通常是更好的选择,并且仍然可以用于HTTP / 2。在您的网站上尝试一下,衡量是确保这一点的最佳方法!
出于这些原因(和安全性),我不太热衷于使用CDN中的公共库(例如jquery,bootstrap等),而不是在本地托管。我认为,已经对用户已经缓存了您的网站使用的版本的用户的性能好处已经被夸大了。
有了这些,HTTP / 1.1仍然可以在没有分片域的情况下工作。 (可能)速度较慢,但不会中断。但是大多数用户are likely on HTTP/2真的值得为少数用户增加复杂性吗?这是否不是一种逐步为现代浏览器上的用户增强您的网站的方式(并鼓励那些不愿意升级的人)?对于较大的网站(例如Google,Facebook等),少数人仍然可以代表大量的用户,而对于我们其他人来说,复杂性是值得的(他们有资源和专业知识来应对)建议不要分片,而要在新协议普遍使用时(例如现在!)升级到HTTP / 2之类的新协议,否则要降低复杂性。