- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我们都听说将javascript和css打包成尽可能少的文件是很好的。当然是,但在我看来故事太简单了。
看看我的逻辑是否合理。
显然,更少的http请求意味着更少的往返,因此更好。然而,我对裸http知之甚少,http响应不是分块发送的吗?如果一个文件大于这些块中的一个,就不必下载为多个(可能是同步的?)往返旅行?与此相反,由于现代web浏览器并行下载javascripts等资源,对小于分块大小的文件的多个请求将更快地到达。
即使分块不是一个问题,似乎也会有一些最大的建议大小,这仅仅是因为可能存在数据包丢失,因为捆绑文件必须等到完全下载后才能执行,而不是脚本必须按顺序执行的更宽松的本机规则。
显然,也有一些浏览器缓存和代码波动的问题要考虑,但有人能证实这一点或解释为什么我离开基地?有人要给它打电话吗?
最佳答案
我找不到这个数字的参考,但我在过去从一个可靠的来源读到,有人(我认为google或fb)在构建cdn时对围绕请求并发性的效率问题做了大量研究,发现2-3个并发传输是最佳的,当包丢失时,考虑到运输层管理费用等因素。这适用于与单个服务器通信的单个客户机,通过从多个服务器分发内容可以发现一个小而显著的效率增益,这是使用分布式cdn的另一个优势。
从下到上-http,在tcp上运行不可避免地涉及到许多次低级别的往返,因为在发送下一个tcp psh之前必须确认每个tcp psh。考虑到以太网mtu是1500(实际上,考虑到dsl和其他基于atm的连接的丰富性,通常是1492),将tcp最大负载大小设置得更大是没有意义的,因为这实际上会降低效率。由于网页使用的许多(如果不是全部)资源都大于~1.4kb,它们将不可避免地在传输层被“分块”(碎片),愚蠢的tcp负载大小设置也将导致网络层的碎片。如前所述,这些传输片段中的每一个都必须在下一个被发送之前由接收者进行确认,这样至少会产生一些往返行程。
在应用层,http本身也支持“分块”,这与传输层的碎片问题略有不同。Chunked Transfer Encoding的设计考虑到了持久性的概念,同时也为服务器和客户端提供了内存消耗的好处。虽然它会使响应稍微大一点,但不太可能导致明显更多的往返(如果正确实现的话),而且任何额外的往返都只是TCP PSH/ACK对,而不是一个全新的HTTP请求。分块传输编码的思想是将主体拆分为同一流中的块,而不是拆分为将在多个流上交换的块。当然,问题的措辞表明所有http消息都是分块传输的,而事实并非如此。如果服务器配置合理,则只有动态内容和动态压缩的内容才会被分块,即使如此,也不会对所有内容都进行分块。大多数http服务器将尽最大努力将响应放入尽可能少的tcp包中。
至于推荐的最大尺寸,我不能给出权威的答案,但我会告诉你我对这件事的看法。考虑到在上述参数范围内可能出现的已经无限的变化,最有效的方法在很大程度上取决于您到底在服务什么以及如何服务它。
如果您提供的是一堆静态内容,可能单个传输的内容越大,整体效果越好,但要注意:假设我们提供的是一个包含大量客户端动态内容(即js驱动的内容)的web页面,我们希望该页面能够尽快加载。但我们首先需要发送的是呈现显示初始状态所需的内容——基本HTML显然是我们需要发送的第一件事,但基本上是这样的。下一步,我们将需要提供页面初始布局的样式表,以及所需的任何图像-因此所有内容看起来都好像已经加载。接下来我们需要将所有基本客户端代码附加到页面的javascript——这实际上可能非常小。只有当所有这些都被加载时,我们才需要获得更大的资源体,因此不需要将所有对它的引用放在html头中,在html头中,您几乎无法控制加载资源的顺序(nb:loaded not executed),而是从基本javascript文件动态加载它们。这允许您创建一个页面,看起来好像它已经尽可能快地加载了,但实际上是加载了不太常用的资源或资源,这些资源或资源只有在以后的几个用户操作之后才需要。
如果您正在动态地提供所有内容—在这里通过php/perl/asp/insert服务器端语言传递所有内容—那么您还需要考虑服务器端的执行时间,但同样的原则也适用。生成标记/样式/脚本/图像/任何使页面看起来像是尽快加载的内容,任何需要很长时间才能生成的内容都可以稍后通过js加载。
回过头来看,我不确定这对你有多大用处,也不知道它是否能回答你的问题,但希望它能给你带来一些乐趣。阅读。
关于http - 由于分块或数据包丢失,在绑定(bind)/合并js文件时是否有建议的最大大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919542/
今天我在一个 Java 应用程序中看到了几种不同的加载文件的方法。 文件:/ 文件:// 文件:/// 这三个 URL 开头有什么区别?使用它们的首选方式是什么? 非常感谢 斯特凡 最佳答案 file
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个 javascript 文件,并且在该方法中有一个“测试”方法,我喜欢调用 C# 函数。 c# 函数与 javascript 文件不在同一文件中。 它位于 .cs 文件中。那么我该如何管理 j
需要检查我使用的文件/目录的权限 //filePath = path of file/directory access denied by user ( in windows ) File fil
我在一个目录中有很多 java 文件,我想在我的 Intellij 项目中使用它。但是我不想每次开始一个新项目时都将 java 文件复制到我的项目中。 我知道我可以在 Visual Studio 和
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有 3 个组件的 Twig 文件: 文件 1: {# content-here #} 文件 2: {{ title-here }} {# content-here #}
我得到了 mod_ldap.c 和 mod_authnz_ldap.c 文件。我需要使用 Linux 命令的 mod_ldap.so 和 mod_authnz_ldap.so 文件。 最佳答案 从 c
我想使用PIE在我的项目中使用 IE7。 但是我不明白的是,我只能在网络服务器上使用 .htc 文件吗? 我可以在没有网络服务器的情况下通过浏览器加载的本地页面中使用它吗? 我在 PIE 的文档中看到
我在 CI 管道中考虑这一点,我应该首先构建和测试我的应用程序,结果应该是一个 docker 镜像。 我想知道使用构建环境在构建服务器上构建然后运行测试是否更常见。也许为此使用构建脚本。最后只需将 j
using namespace std; struct WebSites { string siteName; int rank; string getSiteName() {
我是 Linux 新手,目前正在尝试使用 ginkgo USB-CAN 接口(interface) 的 API 编程功能。为了使用 C++ 对 API 进行编程,他们提供了库文件,其中包含三个带有 .
我刚学C语言,在实现一个程序时遇到了问题将 test.txt 文件作为程序的输入。 test.txt 文件的内容是: 1 30 30 40 50 60 2 40 30 50 60 60 3 30 20
如何连接两个tcpdump文件,使一个流量在文件中出现一个接一个?具体来说,我想“乘以”一个 tcpdump 文件,这样所有的 session 将一个接一个地按顺序重复几次。 最佳答案 mergeca
我有一个名为 input.MP4 的文件,它已损坏。它来自闭路电视摄像机。我什么都试过了,ffmpeg , VLC 转换,没有运气。但是,我使用了 mediainfo和 exiftool并提取以下信息
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
给定一个 gzip 文件 Z,如果我将其解压缩为 Z',有什么办法可以重新压缩它以恢复完全相同的 gzip 文件 Z?在粗略阅读了 DEFLATE 格式后,我猜不会,因为任何给定的文件都可能在 DEF
我必须从数据库向我的邮件 ID 发送一封带有附件的邮件。 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Adventure Works Admin
我有一个大的 M4B 文件和一个 CUE 文件。我想将其拆分为多个 M4B 文件,或将其拆分为多个 MP3 文件(以前首选)。 我想在命令行中执行此操作(OS X,但如果需要可以使用 Linux),而
快速提问。我有一个没有实现文件的类的项目。 然后在 AppDelegate 我有: #import "AppDelegate.h" #import "SomeClass.h" @interface A
我是一名优秀的程序员,十分优秀!