为什么人们总是鼓励网站单j?

时间:2010-07-15 01:31:07

标签: language-agnostic

我在网上阅读了一些网站开发资料,每当一个人要求组织网站的js,css,html和php文件时,人们会建议整个网站使用单个j。而论证就是速度。

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

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

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

5 个答案:

答案 0 :(得分:4)

除非被调用,否则函数会起作用。所以9个空函数是0工作,只是一个小的确切空间。

客户端只需要发出1个下载1个大型JS文件的请求,然后在每个其他页面加载时进行缓存。比在每个页面上发出小请求更少的工作。

答案 1 :(得分:2)

我会给你我总是给出的答案:这取决于。

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

  1. 减少网络流量 - 您可能正在检索一个文件,但您正在发送/接收多个数据包,并且每个事务都发送了一系列SYN,SYN-ACK和ACK消息跨TCP。大部分传输时间都是建立会话,并且数据包标头中有很多开销。

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

  3. 需要考虑的其他主题:

    1. 休眠代码 - 您可能会认为未调用的函数可能通过占用内存中的空间来降低性能并且您是正确的,但是这种性能如此微不足道,没关系。函数在内存中编入索引,而索引表可能会增加,在处理小项目时非常简单,特别是考虑到今天的硬件。

    2. 内存泄漏 - 这可能是您不希望将所有代码组合在一起的最大原因,但考虑到当前系统中的内存量,这是一个很小的问题。更好的垃​​圾收集浏览器。此外,作为程序员,您可以控制这一点。质量代码可以减少这类问题。

    3. 为什么要依赖?

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

      这也取决于尺寸。一些程序员将编码图像作为ASCII嵌入其文件中,以减少发送的文件数量。这些可以膨胀文件。当然你不想把所有东西打包成1个50MB的文件。特别是如果页面需要加载核心功能。

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

答案 2 :(得分:1)

我能想到的两个原因:

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

线上有更多字节,内存更多。如果它是单个文件,你可以删除不必要的字符并缩小整个内容。

答案 3 :(得分:0)

应该设计Javascript,以便除非需要,否则额外的功能根本不会执行。

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

答案 4 :(得分:0)

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