【问题标题】:Cost of http request vs file size, rule of thumb?http请求的成本与文件大小,经验法则?
【发布时间】:2014-03-15 19:05:18
【问题描述】:

HTTP Requests vs File Size? 之前已经提出过此类问题,但我希望得到更好的答案。在那个链接的问题中,回答者似乎用延迟 + 传输时间的漂亮公式回答了这个问题,估计延迟为 80 毫秒,传输速度为 5Mb/s。但它似乎至少在一个方面存在缺陷。在正常的浏览体验中,多个请求和传输不会同时发生吗?这就是我在 Chrome 中检查“网络”选项卡时的样子。这是否意味着请求延迟并不是一件可怕的事情?

还有其他需要考虑的事情吗?显然延迟和带宽会有所不同,但 80ms 和 5Mb/s 是一个好的经验法则吗?我想到了一个比喻,我想知道它是否正确。想象一个只有一条进出一条轨道的火车站(或者两者都有一条)。 Http 请求就像发送一个引擎在另一个车站获得一堆汽车。他们拉着一长列火车返回,代表正在下载的请求文件。所以你可以把一个引擎送出去,让它带回一个巨大的负载。或者你可以派出多个引擎,它们每个都可以带回较小的负载,当然他们都必须等待轮到他们回到车站。有些引擎在其他引擎进来之前无法发出。这是一个有缺陷的类比吗?

我想最大的问题是如何预测 http 请求中会有多少重叠,以便您知道,例如,通常是否值得在您的页面上放置两个大 PNG 文件,或者改为webp 图像,以及用于不兼容浏览器的 Webpjs js 和 swf 文件。这使请求数量增加了一倍,但总文件大小减少了一半以上(例如节省了 200kB)。

【问题讨论】:

    标签: optimization web httprequest latency


    【解决方案1】:

    你的比喻一般来说还不错。显然,如果您想在各个方面都做到精确,有些事情会过于简单化或不正确(但几乎所有类比都会发生这种情况)。

    您对 80ms 和 5mb/s 的估计可能听起来合乎逻辑,但即使我们大多数人喜欢理论,您也应该以另一种方式处理此类问题。

    为了做出良好的估计,您应该衡量以获取一些数据并进行分析。 每个估计都取决于某些上下文,您不应忽略它

    想想对于 3G 连接、日本的 ADSL 连接或技术欠发达国家的 ADSL 连接,估计延迟和带宽是不同的。客户是从世界的另一端访问还是在同一个国家?就像您对客户端上同时连接的良好观察一样,有数百万个可能的问题要问自己,而如果不采取一些措施,则几乎没有高质量的答案。

    我知道我没有完全回答你的问题,因为我认为如果没有关于域的这么多细节(加上限制和巨大等),这是无法回答的。

    您似乎对如何设计解决方案有一些想法。我最好的建议是实施其中的每一项并对其进行分析。进行测量,尝试确定您的瓶颈是什么,看看您是否可以控制它们。

    一些问题中,这类问题可能有最优解,但最优和次优之间的差异在实践中可以忽略不计

    【讨论】:

    • 一些优点,谢谢。但是,是的,没有完全回答我的问题。我建立小型网站,所以我没有时间对所有内容进行性能测试。我只是想了解一下哪里最好专注于优化,并确保我的逻辑是正确的。
    【解决方案2】:

    这就是我正在寻找的答案。我做了一些简单的测试,以了解许多小文件与一个大文件的速度。

    我创建了 html 页面,这些页面从 placekitten.com 加载了一堆随机大小的图像。我将它们加载到 Chrome 中并打开了“网络”标签。

    以下是一些结果:

    # of imgs     Total Size (KB)   Time (ms)
    1             465               4000, 550
    1             307               3000, 800, 350, 550, 400
    
    30            192               1200, 900, 800, 900
    30            529               7000, 5000, 6500, 7500
    

    所以要注意的一件主要事情是单个文件在加载一次后会变得更快。 (逗号分隔的时间列表是页面重新加载)。我进行了正常刷新以及清空缓存和硬重新加载。奇怪的是,我刷新的方式似乎没有太大区别。

    我的连接有大约 120 到 130 毫秒的延迟或返回时间,我的下载速度在 4 到 8Mbps 之间变化。 Chrome 似乎一次处理大约 6 个请求。

    从这几个测试看来,至少在这个文件大小范围内,当文件大小相等时请求更少显然更好,但如果你可以将文件大小减半,即使在将 http 请求的数量增加 30 个,这是值得的,至少对于新的页面加载而言。

    任何 cmets 或更好的答案将不胜感激。

    【讨论】:

    • 嗯,最后你做了一些测试。 ;)。如果以前加载过,不仅图像加载速度更快,.css 和其他资源也加载得更快。浏览器缓存几乎总是在浏览器中启用。
    • 问一个问题的原因当然是不必做测试。看看有没有人有经验。显然不是很多人这样做。
    • 这在很大程度上取决于您使用的连接类型,例如在移动网络上,一些延迟可能会更糟——更像是 200 毫秒:developers.google.com/speed/docs/insights/…
    • 此外,大多数浏览器会为每个主机名加载大约 8 个并发请求,但某些请求(如 javascript 和 css)会阻止进一步的请求,直到它们完成:developers.google.com/speed/docs/insights/BlockingJS
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2012-10-05
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多