提问人:Bail3y 提问时间:4/23/2017 更新时间:4/23/2017 访问量:113
Web 数据如何在 Web 浏览器中显示?
How is web data displayed in a web browser?
问:
我之前从Mozilla的网站上读到过这篇文章,我有一个关于客户端代码如何工作的问题。
您可能还听说过服务器端和客户端代码这两个术语,尤其是在 Web 开发的上下文中。客户端代码是在用户计算机上运行的代码 - 当查看网页时,将下载页面的客户端代码,然后由浏览器运行和显示。在这个 JavaScript 模块中,我们明确地讨论客户端 JavaScript。
当代码被“下载”并由浏览器运行和显示时,它被下载到哪里?它是临时下载或存储在用户计算机上,还是永久的?
答:
文件被下载并存储在缓存中并显示。这些文件是html,css,JS,图像等。 服务器端是php等,这些不是下载的,它们仅在服务器上执行
所有浏览器在本地文件系统上的某个地方都有一个目录,用于存储下载的脚本、样式表、图像等。这些是暂时的,用户可以通过浏览器的相应功能删除,例如在谷歌浏览器上“清除浏览数据”。
本页介绍了 Chrome 在各种系统上下载的临时文件的位置。
评论
在客户端上,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 中有一个,一个在磁盘上)。
评论
Cache-Control
标头以获取更多技术详细信息。
评论