Web 数据如何在 Web 浏览器中显示?

How is web data displayed in a web browser?

提问人:Bail3y 提问时间:4/23/2017 更新时间:4/23/2017 访问量:113

问:

我之前从Mozilla的网站上读到过这篇文章,我有一个关于客户端代码如何工作的问题。

您可能还听说过服务器端和客户端代码这两个术语,尤其是在 Web 开发的上下文中。客户端代码是在用户计算机上运行的代码 - 当查看网页时,将下载页面的客户端代码,然后由浏览器运行和显示。在这个 JavaScript 模块中,我们明确地讨论客户端 JavaScript。

当代码被“下载”并由浏览器运行和显示时,它被下载到哪里?它是临时下载或存储在用户计算机上,还是永久的?

JavaScript HTML CSS 浏览器 客户端

评论


答:

0赞 Pablo Escobar 4/23/2017 #1

文件被下载并存储在缓存中并显示。这些文件是html,css,JS,图像等。 服务器端是php等,这些不是下载的,它们仅在服务器上执行

0赞 Patrick Hund 4/23/2017 #2

所有浏览器在本地文件系统上的某个地方都有一个目录,用于存储下载的脚本、样式表、图像等。这些是暂时的,用户可以通过浏览器的相应功能删除,例如在谷歌浏览器上“清除浏览数据”。

本页介绍了 Chrome 在各种系统上下载的临时文件的位置

评论

0赞 Bail3y 4/23/2017
谢谢。只是为了扩展一点,如果你要去“YouTube”并观看视频。然后视频是否也临时下载?
0赞 Patrick Hund 4/23/2017
不,据我所知,这些视频是流式传输的,它们不会在本地系统上留下临时文件
0赞 phihag 4/23/2017
并非所有浏览器在文件系统上都有目录。例如,elinks 没有任何缓存。此外,可以配置现代浏览器,以便永久禁用缓存。此外,它们通常不会在隐身/隐私浏览模式下缓存(至少不在磁盘上)。
0赞 phihag 4/23/2017 #3

在客户端上,HTML、CSS 和 JavaScript 代码以及图像和视频等资产将位于某种内存中,通常是主 RAM。此内存通常在关闭选项卡或选项卡变为非活动状态后立即回收。

解码图像等资产后,可以将它们复制到 GPU 内存中,以便更快地渲染它们。3D 代码也可以转换为显卡指令并暂时驻留在显卡上。

如果内存紧张,操作系统可能会将其换到磁盘。有关更多详细信息,请阅读虚拟内存

浏览器在磁盘上确实有缓存。这在第一次渲染期间通常不会使用(因为这样您必须在磁盘上等待才能渲染页面),但可以加快未来的请求速度。作为程序员,您可以设置 HTTP Cache-Control 和其他标头。由浏览器决定何时删除缓存文件。通常,当它们变得陈旧、陈旧、达到最大缓存大小限制或用户手动删除它们时,它们将被删除。由浏览器和用户配置缓存,决定是否以及如何准确执行缓存。

代理服务器也可以缓存。一些大型组织使用它们来减少和控制 Internet 流量。在这种情况下,代码从服务器下载到代理一次,然后从代理下载到每个客户端。

HTML5 脱机 Web 应用程序通常在磁盘上存储较长时间。与浏览器缓存相比,离线 Web 应用程序不应该被浏览器删除,但当然实际浏览器的行为可能会有所不同。当用户输入脱机 Web 应用程序的 URL 时,会在发送新版本请求之前从磁盘加载该 URL。相反,使用普通浏览器缓存时,资源要么存在于磁盘上(如果 HTTP 标头不正确,则过时)或已下载。

网站也可以安装 Service Worker 来拦截 HTTP 请求,就像离线 Web 应用程序一样。他们可以在磁盘上存储和加载带有 localStorage 的代码/资产。


总之,代码的存储位置取决于很多因素。根据当前计算架构的性质,代码将在某个时候出现在主内存中。幸运的是,您的 Web 应用程序很少需要关心代码的实际位置 - 浏览器会自动为您提供它。尽管如此,通过配置缓存标头和使用脱机 Web 应用程序或 Service Worker,您可以获得性能提升,并确保即使没有 Internet 也能使用您的网站。

如果您想知道在实际网站中缓存了哪些资源(至少在您的设置中),您可以使用 Web 浏览器的开发人员工具(可在许多系统上访问)。例如,这是在Chrome上加载了启用缓存的页面:F12

Chrome developer tools: Network view

请注意“大小”列,该列表示文件来自哪个缓存(Chrome 中有一个,一个在磁盘上)。

评论

0赞 Bail3y 4/23/2017
谢谢,假设您启用了浏览器缓存。浏览器是否缓存所有 html、css、js 等文件?还是它更具选择性,只缓存某些文件而不是其他文件?举个例子,假设你在FaceBook上,每个状态帖子都动态加载到页面中。它们是下载到 RAM 中还是缓存,还是两者兼而有之?
0赞 phihag 4/23/2017
@Bail3y 首先,所有内容都下载到网卡中。从那时起,它被解密。在当前的计算架构中,这发生在RAM中,但没有理由不能直接发生在CPU、专用加密卡或未来的网卡上(理论上)。然后,某些资源被缓存,而其他资源则不缓存。这取决于 HTTP 标头以及浏览器配置。请点击此答案中的链接 - 例如,HTTP Cache-Control 标头以获取更多技术详细信息。