JavaScript 是如何让互联网变慢的(及对策)
作者:佚名 文章来源:网络 更新时间
:2008-7-20 10:15:36
仅仅一行 JavaScript 代码就能给现今的许多网络日志[1]技术提供动力 -- JavaScript 小应用[2]、共享工具、访问者跟踪、广告客户。在很多时候,一个网志作者所需要的仅仅是一行 JavaScript 代码,用来给自己的网志增加一个新的技术。现在的问题是,假如许多这样的代码累积起来,事情会变成怎样的呢?
物理学上有一个著名的现象叫做 ”非线性“:大量不同的个体相互作用将产生难以预知的结果。在这一点上,软件也一样 -- 当许多组件被放在一起,就无法知道接下来会发生什么。这是因为,各个组件工作时都当其他组件不存在,实际上,它们正在争夺实实在在的资源和人们的关注。事实是:这场战争伤害了所有的人 -- 读者、网志作者,以及网络服务本身。每个人都体会到了挫折感。
在这个帖子里,我们将了解是什么使得页面因为过多的 JavaScript 语句而迟滞,以及对此应该采取什么对策。
在网志作者这里存在下来的是新的单调的、微块化[3]的内容。网志作者热爱在他们的网址上展示个性和喜爱的内容。这也是为什么人们急着要安装新的 JavaScript 小应用(例如:来自于del.icio.us,Flickr,Twitter,AddThis,Sphere的 JavaScript 小应用)的原因 -- 因为它们确实有用,而且对于它们有着旺盛的需求。
使用Twitter JavaScript 小应用所要求插入的一段 HTML 代码
如果你熟悉 HTML 和你所使用的网志平台的话,安装 JavaScript 小应用是一项相当容易的工作。你所要做的只是将代表 JavaScript 小应用的 HTML 代码粘贴到你想要放置它的位置。有的时候需要把代码放到 HTML 文档的头部(header),这样做也并不困难。如果你对技术有一定的了解,你就可以这样做,或者通过一个类似于 Widgetbox 的平台自动安装所需的 JavaScript 小应用。
不是所有网页小应用都生而相同
现在有两种实现网页小应用的主要技术:Flash 和 JavaScript。Flash 小应用有它们自己的问题:太重量级、不能改变大小、不能操纵 DOM(文档对象模型)。然而,问题通常却并不是 Flash 小应用带来的,而是 JavaScript 小应用。
具有讽刺意味的是,JavaScript 一开始就被想象和设计成客户端的一种支持最小交互性和能够快速操纵 DOM 的轻量级语言。但我们的技术带领我们走上了一条扭曲的发展道路,结果是 JavaScript 逐渐成长为一种网络编程语言。 从 Ajax 到 JavaScript 小应用,JavaScript 如今被用于许多前沿项目。但事实是:JavaScript 有自己的问题。接下来让我们看一下都有那些...
对于任何一个老练的技术人员来说,也许最令人震惊的真相是:JavaScript 是一个单线程语言。这译为着 JavaScript 代码是顺序而不是并行执行(除了 Ajax 调用的例外情况)。当一段 JavaScript 代码正在被加载和求值时,其他所有代码都必须等待。

JavaScript 代码被顺序执行
上一篇文章: 让浏览者自动转向你的网站的最速分站 下一篇文章: 超级实用且不花哨的js代码大全
物理学上有一个著名的现象叫做 ”非线性“:大量不同的个体相互作用将产生难以预知的结果。在这一点上,软件也一样 -- 当许多组件被放在一起,就无法知道接下来会发生什么。这是因为,各个组件工作时都当其他组件不存在,实际上,它们正在争夺实实在在的资源和人们的关注。事实是:这场战争伤害了所有的人 -- 读者、网志作者,以及网络服务本身。每个人都体会到了挫折感。
在这个帖子里,我们将了解是什么使得页面因为过多的 JavaScript 语句而迟滞,以及对此应该采取什么对策。
网志作者 - 意料之外的受害者
在网志作者这里存在下来的是新的单调的、微块化[3]的内容。网志作者热爱在他们的网址上展示个性和喜爱的内容。这也是为什么人们急着要安装新的 JavaScript 小应用(例如:来自于del.icio.us,Flickr,Twitter,AddThis,Sphere的 JavaScript 小应用)的原因 -- 因为它们确实有用,而且对于它们有着旺盛的需求。

使用Twitter JavaScript 小应用所要求插入的一段 HTML 代码
这样作很容易,因此人们正在往他们的网志里塞入越来越多的 JavaScript 小应用;就是从这时起,一切开始变得让人不那么愉快 -- 例如:载入网志页面所需的时间越来越长。
不是所有网页小应用都生而相同
现在有两种实现网页小应用的主要技术:Flash 和 JavaScript。Flash 小应用有它们自己的问题:太重量级、不能改变大小、不能操纵 DOM(文档对象模型)。然而,问题通常却并不是 Flash 小应用带来的,而是 JavaScript 小应用。
具有讽刺意味的是,JavaScript 一开始就被想象和设计成客户端的一种支持最小交互性和能够快速操纵 DOM 的轻量级语言。但我们的技术带领我们走上了一条扭曲的发展道路,结果是 JavaScript 逐渐成长为一种网络编程语言。 从 Ajax 到 JavaScript 小应用,JavaScript 如今被用于许多前沿项目。但事实是:JavaScript 有自己的问题。接下来让我们看一下都有那些...
浏览器如何处理 JavaScript 代码
对于任何一个老练的技术人员来说,也许最令人震惊的真相是:JavaScript 是一个单线程语言。这译为着 JavaScript 代码是顺序而不是并行执行(除了 Ajax 调用的例外情况)。当一段 JavaScript 代码正在被加载和求值时,其他所有代码都必须等待。

JavaScript 代码被顺序执行
这同时也意味着,一段执行速度很慢的 JavaScript 代码会使整个网志的加载速度变慢。这就是正在网志世界里发生的事情。那么,怎么解决这个问题呢?
很不幸,对于这个问题不存在什么万试万灵的解决办法。也就是说不存在一种单一的技巧或技术能够解决这个问题。虽然企业能够通过组合一些方法去减轻使用其他 JavaScript 小应用造成的影响,最终 -- 如果使用的 JavaScript 小应用足够多的话 -- 问题还是必定出现。当我们作为一个行业在仔细考虑能够做些什么的时候,JavaScript 提供者应该思考以下一些指导性原则:
一个经常被提到的问题是,所有 JavaScript 代码都应该在页面载入时立即执行,但实际上可以不这样做。假如一段代码不需要在页面载入时修改页面内容,那么这段代码应该被推迟到页面载入后执行(使用 script 标签的 defer 属性)。这样做,页面的内容就会先显示出来。不走运的是,不是所有的浏览器都会遵守这个延迟的命令。
在页面载入的同时执行的代码,无一例外都会延缓页面的载入。这种情况下需要运行的代码越少越好。另一个有关的问题是遍历整个页面寻找某些特定的东西。这是一个应该绝对避免的做法,因为这样做会导致浏览器弹出 ”脚本停止响应
【相关文章:】
JavaScript日期大全-农历时间显示
实现一个年、月、季度联动SELECT的javascript代码
JavaScript的方法和技巧
JavaScript 图片切换展示效果
非常清凉简洁的图片演示风格->>JavaScript实现
用JSP+JavaScript打造二级级联下拉菜单
改变全球互联网15人
javascript图片浏览器的核心——图片预加载
中国互联网 灰黑色的哀悼
网络风云榜开榜 互联网正从娱乐转身经济
【发表评论】【打印此文】【关闭窗口】【点击数: 】
JavaScript 小应用能做到更好更快吗?
很不幸,对于这个问题不存在什么万试万灵的解决办法。也就是说不存在一种单一的技巧或技术能够解决这个问题。虽然企业能够通过组合一些方法去减轻使用其他 JavaScript 小应用造成的影响,最终 -- 如果使用的 JavaScript 小应用足够多的话 -- 问题还是必定出现。当我们作为一个行业在仔细考虑能够做些什么的时候,JavaScript 提供者应该思考以下一些指导性原则:
1. 推迟 JavaScript 代码的执行
一个经常被提到的问题是,所有 JavaScript 代码都应该在页面载入时立即执行,但实际上可以不这样做。假如一段代码不需要在页面载入时修改页面内容,那么这段代码应该被推迟到页面载入后执行(使用 script 标签的 defer 属性)。这样做,页面的内容就会先显示出来。不走运的是,不是所有的浏览器都会遵守这个延迟的命令。
2. 尽量减少页面载入时需要执行的代码总量
在页面载入的同时执行的代码,无一例外都会延缓页面的载入。这种情况下需要运行的代码越少越好。另一个有关的问题是遍历整个页面寻找某些特定的东西。这是一个应该绝对避免的做法,因为这样做会导致浏览器弹出 ”脚本停止响应
【相关文章:】
JavaScript日期大全-农历时间显示
实现一个年、月、季度联动SELECT的javascript代码
JavaScript的方法和技巧
JavaScript 图片切换展示效果
非常清凉简洁的图片演示风格->>JavaScript实现
用JSP+JavaScript打造二级级联下拉菜单
改变全球互联网15人
javascript图片浏览器的核心——图片预加载
中国互联网 灰黑色的哀悼
网络风云榜开榜 互联网正从娱乐转身经济
【发表评论】【打印此文】【关闭窗口】【点击数: 】
网友评论:
