基于文本的浏览器会减少网络流量吗?

Pau*_*ulb 27 networking browser terminal gui user-interface

基于文本的浏览器(例如lynxlinkselinks )是否比基于 GUI 的浏览器(即 Firefox、Chrome 等)消耗的带宽更少?

流量不会减少。
理由:我认为基于文本的浏览器会下载服务器提供的整个页面。页面小部件的任何精简或减少都是在本地完成的。

也许流量会有所减少,因为大多数基于文本的浏览器不会执行可能会导致更多流量的页面脚本或 SWF。

gro*_*taj 53

Web 服务器不会发送“整个网站”,而是发送浏览器请求的文档。

例如,当您访问https://www.google.com/ 时,浏览器会向服务器查询文档https://www.google.com/。服务器处理请求并发回一些 HTML 代码。

然后浏览器检查服务器发送了什么。在这种情况下,它是 HTML 网页,因此它会解析文档并查找引用的脚本、样式表、图像、字体等。

在这个阶段,浏览器已经完成了该文档的下载,但仍然没有下载引用的文档。它可以选择这样做或跳过它们。常规浏览器会尝试下载所有参考文档以获得最佳观看体验。如果您有广告拦截器(如 Adblock)或隐私插件(Ghostery、NoScript),它也可能会拦截某些资源。

然后浏览器逐个下载引用的文档,每次都明确地向服务器询问单个资源。在我们的 Google 示例中,浏览器将找到以下引用,仅举几例:

(实际文件对于不同的用户、浏览器和会话可能会有所不同,并且可能会随着时间的推移而变化)

基于文本的浏览器不下载图像、Flash 文件、HTML5 视频等,因此它们下载的数据较少。


@NathanOsman 在评论中提出了一个很好的观点:有时小图像直接嵌入在 HTML 文档中,在这些情况下无法避免下载它们。这是用于减少请求数量的另一个技巧。但是它们非常小,否则在 base64 中编码二进制文件的开销太大。Google.com 上很少有这样的图片:(base64 编码大小/解码大小

  • 19×11 键盘图标 (106 B / 76 B)
  • 28×38 麦克风图标 (334 B / 248 B)
  • 1×1 px 透明 GIF (62 B / 43 B) 显示在 Chrome Dev Tools Resources选项卡中,但我在源代码中找不到它 - 可能是稍后用 JavaScript 添加的
  • 1×1 像素损坏的 GIF 文件出现两次 (34 B / 23 B)。它的目的对我来说是个谜。

  • @prateek61 所有主要网站都使用它;它实际上是一种从电子游戏中借用的技术。:) 事实上,许多 Web 开发人员甚至称它为“[CSS sprites](http://css-tricks.com/css-sprites/)”或类似的(在 [Amazon](http://g-ecx.images -amazon.com/images/G/01/gno/sprites/global-sprite-32-v1._V349056651_.png)它被称为“精灵”,但我不知道这种变化有多普遍)。 (12认同)
  • 嗯,几乎 - 可以使用数据 URI 方案(`data:`)直接在 HTML 中嵌入图像。 (3认同)

pra*_*k61 25

我怀疑他们会这样做。我不相信基于文本的浏览器(默认情况下)甚至会下载诸如图像或外部实体之类的资源,例如字体(如果需要)、脚本等。

我使用 tcpdump 进行了一些基本测试,尝试使用 lynx 和 wget获取此 IANA 页面(http://www.iana.org/domains/reserved),这是我的结果(仅 HTTP 命令,我可以提供其余部分)如果需要的话)。

lynx http://www.iana.org/domains/reserved

  4   0.072774 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /domains/reserved HTTP/1.0
 10   0.146971   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (text/html)
Run Code Online (Sandbox Code Playgroud)

wget -p http://www.iana.org/domains/reserved

  4   0.072139 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /domains/reserved HTTP/1.0
 22   0.145905   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (text/html)
 28   0.219381 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /robots.txt HTTP/1.0
 30   0.291877   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (text/plain)
 32   0.292550 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2013.1/screen.css HTTP/1.0
 94   0.440388   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (text/css)
100   0.514652 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2013.1/print.css HTTP/1.0
132   0.660071   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (text/css)
138   0.733546 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_img/bookmark_icon.ico HTTP/1.0
154   0.878227   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
160   0.950713 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_js/2013.1/jquery.js HTTP/1.0
277   1.172095   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/x-javascript)
283   1.244571 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_js/2013.1/iana.js HTTP/1.0
285   1.317059   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK
287   1.317609 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_img/2013.1/iana-logo-header.svg HTTP/1.0
332   1.464356   192.0.32.8 -> xx.xx.xx.xx HTTP/XML HTTP/1.1 200 OK
337   1.536749 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_img/2013.1/icann-logo.svg HTTP/1.0
348   1.610449   192.0.32.8 -> xx.xx.xx.xx HTTP/XML HTTP/1.1 200 OK
353   1.682727 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2013.1/fonts/OpenSans-Light.ttf HTTP/1.0
658   2.552776   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
663   2.625015 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2013.1/fonts/OpenSans-Regular.ttf HTTP/1.0
926   3.063537   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
932   3.135931 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2013.1/fonts/OpenSans-Semibold.ttf HTTP/1.0
1216   3.573481   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
1222   3.645984 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2013.1/fonts/OpenSans-Bold.ttf HTTP/1.0
1500   4.012966   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
1506   4.085693 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2013.1/fonts/Inconsolata.otf HTTP/1.0
1584   4.304016   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
1589   4.376612 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_img/2011.1/icons/icon_alert.png HTTP/1.0
1592   4.449311   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (PNG)
1594   4.449930 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_img/2013.1/iana-logo-homepage.png HTTP/1.0
1627   4.596125   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (PNG)
1633   4.668596 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_img/2013.1/iana-logo-homepage@2x.png HTTP/1.0
1704   4.895581   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (PNG)
1710   4.968097 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2011.1/fonts/OpenSans-Light.ttf HTTP/1.0
1982   5.364584   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
1988   5.438091 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2011.1/fonts/OpenSans-Regular.ttf HTTP/1.0
2243   5.830353   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
2249   5.902861 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2011.1/fonts/OpenSans-SemiBold.ttf HTTP/1.0
2259   5.976674   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 404 NOT FOUND  (text/html)
2263   6.047876 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2011.1/fonts/OpenSans-Bold.ttf HTTP/1.0
2533   6.415590   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
2539   6.487909 xx.xx.xx.xx -> 192.0.32.8   HTTP GET /_css/2011.1/fonts/Inconsolata.otf HTTP/1.0
2616   6.720477   192.0.32.8 -> xx.xx.xx.xx HTTP HTTP/1.1 200 OK  (application/octet-stream)
Run Code Online (Sandbox Code Playgroud)

所以我意识到这不是一个很好的测试,因为wget可能会下载浏览器可能无法下载的资源,但我认为这个例子仍然存在 - 在 GUI 浏览器上呈现内容需要更多的请求。因此,它的 GUI 浏览器通常会比基于文本的浏览器产生更多的网络流量。

  • 我也喜欢这个答案。wget 检查很有趣。 (3认同)