Language agnostic 为什么人们总是鼓励网站使用单一js?

Language agnostic 为什么人们总是鼓励网站使用单一js?,language-agnostic,Language Agnostic,我在网上读了一些网站开发资料,每次有人要求组织一个网站的js、css、html和php文件时,人们都会建议整个网站使用单一的js。争论的焦点是速度 我清楚地理解,请求越少,页面的响应速度就越快。但我从来都不理解js的单一论点。假设您有10个网页,每个网页都需要一个js函数来操作其上的dom对象。将10个函数放在一个js中,让js在每个网页上执行,10个函数中有9个做了无用的工作。搜索不存在的dom对象会浪费CPU时间 我知道,与单个服务器机器上的带宽相比,单个客户端机器上的CPU时间非常少。我不

我在网上读了一些网站开发资料,每次有人要求组织一个网站的js、css、html和php文件时,人们都会建议整个网站使用单一的js。争论的焦点是速度

我清楚地理解,请求越少,页面的响应速度就越快。但我从来都不理解js的单一论点。假设您有10个网页,每个网页都需要一个js函数来操作其上的dom对象。将10个函数放在一个js中,让js在每个网页上执行,10个函数中有9个做了无用的工作。搜索不存在的dom对象会浪费CPU时间

我知道,与单个服务器机器上的带宽相比,单个客户端机器上的CPU时间非常少。我不是说你应该在一个网页上有很多js文件。但如果每个网页都引用1到3个js文件,并且这些js文件被缓存在客户端机器中,我看不出任何问题。有很多很好的方法可以进行缓存。例如,您可以使用expiredate,也可以在js文件名中包含版本号。相比于在一个大的js文件中为一个网站的许多网页的所有需求提供混乱的功能,我更喜欢将js代码拆分成更小的文件


对我的论点有任何批评/同意吗?我错了吗?谢谢你的建议

Javascript的设计应确保额外的函数不会执行,除非需要它们


例如,您可以在脚本中定义一组函数,但只能在页面本身的内联
块中(非常短)调用它们。

我可以想到两个原因:

减少网络延迟。每个.js都需要对下载它的服务器进行另一个请求/响应


线路上有更多字节和更多内存。如果它是一个文件,您可以去掉不必要的字符并缩小整个文件。

除非调用函数,否则0可以工作。所以9个空函数都是零功,只有一点精确的空间


一个客户端只需发出一个请求就可以下载一个大的JS文件,然后每隔一次页面加载就缓存一次。比起在每一页上提出一个小小的要求,工作量要少。

我的想法是你的要求要少。当您在页面标题中发出请求时,它会暂停页面其余部分的输出。在获取javascript文件之前,用户代理无法呈现页面的其余部分。javascript文件也是同步下载的,它们排队而不是一次拉(至少理论上是这样)。

我会给你一个我一直给你的答案:这要看情况而定

将所有内容合并到一个文件中有很多好处,包括:

  • 更少的网络流量-您可能正在检索一个文件,但您正在发送/接收多个数据包,并且每个事务都有一系列通过TCP发送的SYN、SYN-ACK和ACK消息。大部分传输时间都在建立会话,并且在数据包头中存在大量开销

  • 一个位置/可管理性-虽然您可能只有几个文件,但函数(和类对象)很容易在版本之间增长。当您使用多文件方法时,有时一个文件中的函数调用另一个文件中的函数/对象(例如,一个文件中的ajax,然后是另一个文件中的算术函数-您的算术函数可能需要调用ajax并返回某个变量类型)。最终的结果是,您的文件集需要被视为一个版本,而不是每个文件都是它自己的版本。如果没有良好的管理,事情就会变得棘手,而且很容易与Javascript文件脱节,因为Javascript文件总是在变化。拥有一个文件可以轻松管理(1到多个)网站中每个页面之间的版本

  • 其他需要考虑的议题:

  • 休眠代码-您可能会认为未调用的函数可能会占用内存空间,从而降低性能,您是对的,但是这种性能非常微小,无关紧要。函数在内存中编制索引,虽然索引表可能会增加,但在处理小型项目时,这是非常简单的,特别是考虑到当今的硬件

  • 内存泄漏-这可能是您不想合并所有代码的最大原因,但是考虑到当今系统中的内存量以及更好的垃圾收集浏览器,这是一个很小的问题。同样,作为一个程序员,这是你有能力控制的。质量代码可以减少这样的问题

  • 为什么要视情况而定

    虽然很容易说把所有代码都放到一个文件中,但这是错误的。这取决于代码的大小、函数的数量、维护者等。当然,您不会将本地编写的函数打包到JQuery包中,而且可能会有不同的程序员维护不同的代码块,这取决于您的设置

    它还取决于大小。一些程序员将编码图像作为ASCII码嵌入到他们的文件中,以减少发送的文件数量。这些文件可能会膨胀。当然,您不想将所有内容都打包到150MB的文件中。尤其是当页面需要加载核心函数时


    因此,为了结束我的回答,我们需要更多关于您的设置的信息,因为这取决于您的设置。当然,3个文件是可以接受的,无论大小,结合您认为合适的地方。这可能不会真正影响网络流量,但50个文件更不合理。我使用手动规则(不超过5个),但您肯定会看到将这5个1KB文件合并成1个5KB文件的好处。

    可能重复的只是为了回避问题。。。您确定要使用用户可以使用的客户端技术吗1)