- 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/
我正在学习构建单页应用程序 (SPA) 所需的所有技术。总而言之,我想将我的应用程序实现为单独的层,其中前端仅使用 API Web 服务(json 通过 socket.io)与后端通信。前端基本上是
当我看到存储在我的数据库中的日期时。 这是 正常 。日期和时间就是这样。 但是当我运行 get 请求来获取数据时。 此格式与存储在数据库 中的格式不同。为什么会发生这种情况? 最佳答案 我认为您可以将
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试使用backbone.js 实现一些代码 和 hogan.js (http://twitter.github.com/hogan.js/) Hogan.js was developed ag
我正在使用 Backbone.js、Node.js 和 Express.js 制作一个 Web 应用程序,并且想要添加用户功能(登录、注销、配置文件、显示内容与该用户相关)。我打算使用 Passpor
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我尝试在 NodeJS 中加载数据,然后将其传递给 ExpressJS 以在浏览器中呈现 d3 图表。 我知道我可以通过这种方式加载数据 - https://github.com/mbostock/q
在 node.js 中,我似乎遇到了相同的 3 个文件名来描述应用程序的主要入口点: 使用 express-generator 包时,会创建一个 app.js 文件作为生成应用的主要入口点。 通过 n
最近,我有机会观看了 john papa 关于构建单页应用程序的精彩类(class)。我会喜欢的。它涉及服务器端和客户端应用程序的方方面面。 我更喜欢客户端。在他的实现过程中,papa先生在客户端有类
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一个图形新手,需要帮助了解各种 javascript 2D 库的功能。 . . 我从 Pixi.js 中得到了什么,而我没有从 Konva 等基于 Canvas 的库中得到什么? 我从 Konva
我正在尝试将一些 LESS 代码(通过 ember-cli-less)构建到 CSS 文件中。 1) https://almsaeedstudio.com/ AdminLTE LESS 文件2) Bo
尝试查看 Express Passport 中所有登录用户的所有 session ,并希望能够查看当前登录的用户。最好和最快的方法是什么? 我在想也许我可以在登录时执行此操作并将用户模型数据库“在线”
我有一个 React 应用程序,但我需要在组件加载完成后运行一些客户端 js。一旦渲染函数完成并加载,运行与 DOM 交互的 js 的最佳方式是什么,例如 $('div').mixItUp() 。对
请告诉我如何使用bodyparser.raw()将文件上传到express.js服务器 客户端 // ... onFilePicked(file) { const url = 'upload/a
我正在尝试从 Grunt 迁移到 Gulp。这个项目在 Grunt 下运行得很好,所以我一定是在 Gulp 中做错了什么。 除脚本外,所有其他任务均有效。我现在厌倦了添加和注释部分。 我不断收到与意外
我正在尝试更改我的网站名称。找不到可以设置标题或应用程序名称的位置。 最佳答案 您可以在 config/ 目录中创建任何文件,例如 config/app.js 包含如下内容: module.expor
经过多年的服务器端 PHP/MySQL 开发,我正在尝试探索用于构建现代 Web 应用程序的新技术。 我正在尝试对所有 JavaScript 内容进行排序,如果我理解得很好,一个有效的解决方案可以是服
我是 Nodejs 的新手。我在 route 目录中有一个 app.js 和一个 index.js。我有一个 app.use(multer....)。我还定义了 app.post('filter-re
我正在使用 angular-seed用于构建我的应用程序的模板。最初,我将所有 JavaScript 代码放入一个文件 main.js。该文件包含我的模块声明、 Controller 、指令、过滤器和
我是一名优秀的程序员,十分优秀!