我想知道您将所有需要下载的css脚本和内容放在一个文件中会赢多少?
我知道你会通过使用精灵赢得很多,但在某些时候这样做可能会受到伤害。
例如,我的网站使用了很多小图标,大多数页面在将所有这些图标组合在一起后有不同的图标,总共可能超过500kb,但如果我每页制作一个精灵,则减少到近50kb /页面,这很酷。
但是脚本js/css
怎么样才能通过为每个超过100行的页面制作一个脚本来赢得多少?或者也许我根本不会获胜?
问题,基本上我想知道单个请求下载文件的成本是多少,并且使用现代浏览器和高速连接获得许多脚本/图像文件真的很糟糕
修改
谢谢大家的答案,很难只选择一个,因为每个答案都回答了我的问题,我选择奖励那个我认为最直接回答我关于请求费用的问题的答案,我不会接受任何答案。回答是正确的,因为每个人都是。
答案 0 :(得分:8)
多个请求意味着更多延迟,因此通常会产生影响。究竟如何代价取决于响应的大小,服务器的性能,托管的世界,它是否被缓存等等。要获得真实的测量结果,你应该试验你的真实世界的例子。
我经常使用PageSpeed,并且通常遵循记录的最佳做法:https://developers.google.com/speed/docs/insights/about。
要尝试直接回答您的最终问题:其他请求的费用会更高。它不一定非常糟糕"有很多文件,但是如果可以的话,将内容组合成一个文件通常是一个好主意。
答案 1 :(得分:6)
您的问题不是以真正的通用方式回答。
组合脚本和样式表有几个原因。
使用HTTP / 1.1的浏览器将打开多个连接,每个主机通常为2-4个。由于几乎每个站点都有实际的HTML文件和至少一个其他资源(如样式表,脚本或图像),因此在加载index.html
等初始URL时会立即创建这些连接。
也就是说,您可以跨多个主机分割文件(例如额外的static.example.com
),这会增加主机/连接的数量,并可以加快下载速度。另一方面,由于更多连接和额外的DNS查找,这会带来额外的开销。
另一方面,有正当理由将文件拆分。
最重要的是HTTP / 2。 HTTP / 2仅使用单个连接,并通过该连接多路复用所有文件下载。网上有多个演示证明了这一点,例如: http://www.http2demo.io/
如果您将文件拆分,它们也可以单独缓存。如果只更改了小部件,浏览器可以重新加载更改的文件,而其他所有文件将使用304 Not Modified
进行回答。当然,你应该有适当的缓存标题。
也就是说,如果你有资源,你可以使用HTTP / 2分别为支持它的客户端提供所有文件。如果您有许多较旧的客户端,那么当他们使用HTTP / 1.1发出请求时,您可以回退到它们的组合文件。
答案 2 :(得分:5)
棘手的问题:)
当然,平凡的答案是更多的请求需要更多的时间,但这不一定很简单。
所以把它放在一起:
请确保您未动态提供静态内容。即尝试将图像加载到Web浏览器,打开网络流量视图,使用F5重新加载并看到您从服务器获得304 Not modified,而不是200 OK和实际流量。 最大的性能优化是您不会从服务器中提取任何内容,如果使用得当,它就会开箱即用:)
答案 3 :(得分:3)
我认为@DigitalDan有最好的答案。
但问题掩盖了真实问题,如何让我的页面加载更快?或者至少,APPEAR加载速度更快......
我会添加一些关于“首屏”的内容:基本上你想要内联尽可能让你的页面在第一次往返时呈现主要的可见内容,因为这是用户认为最快的内容,并确保页面上没有任何其他内容阻止......
Archibald解释得很好:
答案 4 :(得分:3)
如果您使用任何这些类型,您获胜多少可能会因您的具体需求而有所不同,但我会谈谈我的情况:在我的网络应用程序中,我们不会合并所有文件,而是有两种类型的文件,公共文件和每页文件,我们有应用程序全局需要的公共文件,以及仅用于其案例的其他文件,这就是原因。
以上是我的网络应用程序的图表请求分析,您需要考虑的是这个
在此之后缓存DNS查找只发生一次,但是,DNS名称可能已缓存,然后。
根据我们的每个请求:
request start + initial connection + SSL negotiation+ time to first byte + content download
在大多数情况下占用大部分请求时间的主要因素是内容下载大小,因此如果我有多个文件需要在所有页面中使用它们,我会将它们合并到一个文件中,这样我就可以另一方面,如果我需要在特定页面中使用文件,请保存TCP堆栈时间,我会将其分开,以便将内容下载时间保存在其他页面中。
答案 5 :(得分:2)
许多Web开发人员面临的非常相关的问题(主题)。
我还要在这个问题的其他贡献者中添加我的答案。
高性能网站取决于不同的因素,这里有一些考虑因素:
通过定义您的需求,您可能能够找到合适的策略。
对您的网站有何看法。我建议你在他的书高性能网站中查看Steve Souders 14的建议。
Steve Souders 14建议:
因此,如果我们考虑以下js/css
将会有很多帮助:
page1
,page2
,page3
和page4
。 Page1
和page2
使用js1
和js2
Page3
仅使用js3
Page4
使用所有js1
,js2
和js3
所以在3个文件中使用JavaScript是个好主意。你不想把你不拥有的所有东西都包括在内。结论
我很确定有更多细节要写。并非所有建议都是必要的,但重要的是要了解这些建议。正如我之前提到的,我建议你阅读这本小书,它会给你更多细节。最后,没有完美的最终解决方案。你需要开始一些地方,尽力而为并改进它。没有什么是永恒的。
祝你好运。答案 6 :(得分:1)
你的问题的答案实际上取决于它。
页面加载优化的最终目标是让您的用户感觉您的页面加载速度很快。
一些建议:
不要合并常见的库js css文件,例如jquery coz,当你访问其他网站时,他们可能已经被浏览器缓存,所以你甚至不需要下载它们;
合并资源,但至少单独的第一个屏幕需要资源,其他人因为早期用户可以看到一些有意义的东西,他们对页面的感觉越快;
如果您的多个页面共享了一些资源,请将共享资源和页面特定资源的合并文件分开,这样当您访问第二页时,共享的页面可能已被浏览器缓存,因此页面加载更快;
用户可能正在使用速度缓慢或不一致的手机3g / 4g网络,所以即使是50k的数据或2个以上的请求也会让他们感觉不同;
答案 7 :(得分:1)
拥有很多100行文件真的很糟糕,而且只有一两个大文件也很糟糕,不过每种类型都有css / js / markup。
桌面主要是高速连接,移动设备也具有高延迟。
考虑到有关该主题的所有理论,我认为从统计角度来看,最佳方法应更实用,更不准确,并且基于实际连接速度和设备类型。
例如,我认为这是今天最好的方式:
1)将显示第一页/功能所需的所有内容放在用户的一个文件中,应该在100KB以下 - 这绝对是一项要求。
2)之后,拆分或分组文件的大小,以便延迟不再与下载时间一起显着。
为了简单和具体,如果我们假设:第一个字节的时间大约是200毫秒,每个文件的大小应该在~120KB到~200 KB之间,这对于今天的大多数连接来说是平均的。