使用缓存文件还是一个以上的 HTTP 请求?

2024-03-01

在所有“加速你的网站”网站和书籍上,他们总是告诉我们不惜一切代价尽量减少 HTTP 请求。这很好,但如果这意味着在每个页面上你都必须一次又一次地重新加载 120kb,因为用户缓存是空的怎么办?

如果我在网站的每个页面上使用 5 个 js 文件,那么将它们放在一个文件中并在每个页面上加载此文件,而不是将它们与所有其他变量文件放在一个大文件中并保存一个 HTTP 请求不是更好吗?从哪个点或文件大小可以“缓存”文件并进行另一个 HTTP 请求?

我给你举了一个 3 页的例子,当我对每页一个 minifed JS 文件只使用一个 HTTP 请求时:

  1. jquery、jquery ui、thickbox、lavalamp 菜单 => 一起压缩在一个文件中 = 300kb
  2. jquery、jquery ui、cycle 插件 => 一起压缩在一个文件中 => 200kb
  3. jquery、jquery ui、galleria 插件 => 一起压缩在一个文件中 => 250kb

现在另一种可能性总是有 2 个 HTTP 请求:一个包含 jquery 和 jquery ui => 150kb 的文件,我们暂时将其称为“jui.js”

  1. jui.js、thickbox、lavalamp = 开头又是 300kb,但现在 jui.js 已缓存其他 2 个页面
  2. (jui.js 现在已缓存,因此未加载),只有 Cycle 插件 => 仅加载 50kb,但当我分别加载 jui.js 和 Cycle 插件时,又会产生一个 HTTP 请求。
  3. (jui.js 已缓存),仅加载 galleria 插件 => 仅加载 100kb,但又是 2 个 HTTP 请求,其中一个请求已缓存

那么在什么时候或 Kb 大小可以在正常的“响应式”Web 服务器上发出另一个 HTTP 请求呢?

有没有人有任何最佳实践,或者只是“不惜一切代价最小化 HTTP 请求!”?

(我希望我说清楚了:)一旦我有一些观点,我就会投票给人们!)

EDIT:

这基本上是一个更简单的问题: 缓存的 js 文件需要多长时间的额外 HTTP 往返?如果http请求比我需要在每个页面上下载额外的非缓存部分的时间慢,那么我会将所有内容放入每个页面上的1个大文件中(每个页面上1个不同的大文件)。

如果对缓存的 js 文件的 HTTP 请求几乎没有,那么我会将每个页面需要的部分拆分到一个额外的 js 文件中(当然是缩小的),并将每个页面的动态部分包含在不同的(再次缩小的)js 文件中。

因此,如果在大多数页面上我需要 100kb 的额外空间(动态部分),我该如何测试缓存的 HTTP 请求的时间?有没有任何数字,有人已经测试过类似的东西了吗?

感谢您的精彩回答!


这是一个大而复杂的主题。他们写了关于这个主题的整本书;)

对于资源(javascript、css 等),有时最好单独下载它们。浏览器将并行下载它们。如果a页面需要资源x y z,而b页面只需要x和z,那么将它们分开是一件好事。其他时候,每个页面都需要的资源可能最好一次性下载。这取决于。

但是使用 javascript,浏览器会在渲染页面之前先下载 JS(如果 script 标签位于 head 部分),因此如果添加 defer 属性,或者包含在页面底部并触发,您会看到更好的性能你的 javascript 带有 body=onload。

还要记住,您可以在资源上设置缓存标头,以便浏览器将它们缓存在内存或磁盘中。这在很多情况下都会产生巨大的差异。

实际上没有硬性规定,只有一些指导方针。最好的选择就是进行测试!与拨号相比效果更好的方法在宽带上效果不佳。

Fiddler 是一个很好的程序,例如,如果您使用调制解调器,它会向您显示加载时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用缓存文件还是一个以上的 HTTP 请求? 的相关文章

  • 将 OoXml 插入单词抛出错误:未知

    我一直在尝试通过office js将OOXML插入到word文档的正文内容中insertOoXML 方法 我什至尝试过最简单的实现 认为我在尝试替换 XML 本身中的 fieldCodes 时做了一些不正确的事情 所有结果都是这样Error
  • 不和谐机器人 |不和谐.js |类型错误:无法读取未定义的属性“长度”

    我正在制作一个 Discord 机器人 并且正在使用 CodeLyon 的视频作为参考 该错误位于我的 message js 文件中 该文件包含以下内容 require dotenv config create cooldowns map
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中

随机推荐