`
solorez
  • 浏览: 245233 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类

JavaScript 是怎样让互联网变慢的(及对策)

阅读更多

原文作者:Alex Iskold
原文链接:How JavaScript is Slowing Down the Web (And What To Do About It)
译者:摩多


仅仅一行 JavaScript 代码就能给现今的许多网络日志[1]技术提供动力 -- JavaScript 小应用[2]、共享工具、访问者跟踪、广告客户。在很多时候,一个网志作者所需要的仅仅是一行 JavaScript 代码,用来给自己的网志增加一个新的技术。现在的问题是,假如许多这样的代码累积起来,事情会变成怎样的呢?

物理学上有一个著名的现象叫做 ”非线性“:大量不同的个体相互作用将产生难以预知的结果。在这一点上,软件也一样 -- 当许多组件被放在一起,就无法知道接下来会发生什么。这是因为,各个组件工作时都当其他组件不存在,实际上,它们正在争夺实实在在的资源和人们的关注。事实是:这场战争伤害了所有的人 -- 读者、网志作者,以及网络服务本身。每个人都体会到了挫折感。

在这个帖子里,我们将了解是什么使得页面因为过多的 JavaScript 语句而迟滞,以及对此应该采取什么对策。

网志作者 - 意料之外的受害者


在网志作者这里存在下来的是新的单调的、微块化[3]的内容。网志作者热爱在他们的网址上展示个性和喜爱的内容。这也是为什么人们急着要安装新的 JavaScript 小应用(例如:来自于del.icio.us,Flickr,Twitter,AddThis,Sphere的 JavaScript 小应用)的原因 -- 因为它们确实有用,而且对于它们有着旺盛的需求。
p1.png
使用Twitter JavaScript 小应用所要求插入的一段 HTML 代码

如果你熟悉 HTML 和你所使用的网志平台的话,安装 JavaScript 小应用是一项相当容易的工作。你所要做的只是将代表 JavaScript 小应用的 HTML 代码粘贴到你想要放置它的位置。有的时候需要把代码放到 HTML 文档的头部(header),这样做也并不困难。如果你对技术有一定的了解,你就可以这样做,或者通过一个类似于 Widgetbox 的平台自动安装所需的 JavaScript 小应用。

这样作很容易,因此人们正在往他们的网志里塞入越来越多的 JavaScript 小应用;就是从这时起,一切开始变得让人不那么愉快 -- 例如:载入网志页面所需的时间越来越长。


不是所有网页小应用都生而相同


现在有两种实现网页小应用的主要技术:Flash 和 JavaScript。Flash 小应用有它们自己的问题:太重量级、不能改变大小、不能操纵 DOM(文档对象模型)。然而,问题通常却并不是 Flash 小应用带来的,而是 JavaScript 小应用。

具有讽刺意味的是,JavaScript 一开始就被想象和设计成客户端的一种支持最小交互性和能够迅速操纵 DOM 的轻量级语言。但我们的技术带领我们走上了一条扭曲的发展道路,结果是 JavaScript 逐渐成长为一种网络编程语言。 从 Ajax 到 JavaScript 小应用,JavaScript 如今被用于许多前沿项目。但事实是:JavaScript 有自己的问题。接下来让我们看一下都有那些...

浏览器如何处理 JavaScript 代码


对于任何一个老练的技术人员来说,也许最令人震惊的真相是:JavaScript 是一个单线程语言。这译为着 JavaScript 代码是顺序而不是并行执行(除了 Ajax 调用的例外情况)。当一段 JavaScript 代码正在被加载和求值时,其他所有代码都必须等待。


p2.jpg

JavaScript 代码被顺序执行

这同时也意味着,一段执行速度很慢的 JavaScript 代码会使整个网志的加载速度变慢。这就是正在网志世界里发生的事情。那么,怎么解决这个问题呢?

JavaScript 小应用能做到更好更快吗?


很不幸,对于这个问题不存在什么万试万灵的解决办法。也就是说不存在一种单一的技巧或技术能够解决这个问题。虽然企业能够通过组合一些方法去减轻使用其他 JavaScript 小应用造成的影响,最终 -- 如果使用的 JavaScript 小应用足够多的话 -- 问题还是必定出现。当我们作为一个行业在仔细考虑能够做些什么的时候,JavaScript 提供者应该思考以下一些指导性原则:

1. 推迟 JavaScript 代码的执行


一个经常被提到的问题是,所哟iud JavaScript 代码都应该在页面载入时立即执行,但实际可以不这样做。假如一段代码不需要在页面载入时修改页面内容,那么这段代码应该被推迟到页面载入后执行(使用 script 标签的 defer 属性)。这样做,页面的内容就会先显示出来。不走运的是,不是所有的浏览器都会遵守这个延迟的命令。

2. 尽量减少页面载入时需要执行的代码总量


在页面载入的同时执行的代码,无一例外都会延缓页面的载入。这种情况下需要运行的代码越少越好。另一个有关的问题是遍历整个页面寻找某些特定的东西。这是一个应该绝对避免的做法,因为这样做会导致浏览器弹出 ”脚本停止响应“ 的对话框。一般来说,运行时间超过一定时间(通常是5秒钟)的 JavaScript 代码会产生这个问题。一个适当(也很痛苦)的解决方案是:使用定时机制来分割一个较长的执行过程。


3. 通过生成不同的 URL 对请求做负载均衡


大多数 JavaScript 代码只提供同一个 URL,例如:www.mycoolwidget.com。这样做不利于系统伸缩(scale)。JavaScript 小应用使用得越广泛,同一个服务器接受到的并发请求的数目就越多。一个更好的尝试是使用不同的 URL,例如像这样:server1.mycoolwidget.com,server2.mycoolwidget.com,等等。当前可以暂时把所有这些 URL 指向同一个域,作为未来分流流量的一个可以选择的后备方案。

4. 使用标准库


因为编写 JavaScript 代码容易出错,所以重复发明轮子(reinventing the wheel)的尝试可能是最糟糕的一种做法。JavaScript 与 Java 不同,没有所谓的标准库,但某些库(比如:prototype)正在变成事实上的标准。这些库由富有经验、了解系统特性的开发者编写,重用他们的代码是一个理想的选择。


5. 最要重要的是要考虑到别人


要认识到在最终用户的网站上还运行着其他的 JavaScript 代码,这是最要紧的事情。脑袋里有了 “我是一个系统的一部分” 的想法,开发者就能够在最大程度上避免破坏其他 JavaScript 小应用的正常运行,从而带来全面、流畅的用户体验。

从现在起能做些什么?


做一个良好 JavaScript 公民是受到鼓励的行为,然而,开发者还可以做得更多。作为开发者,你不能预测你的 JavaScript 小应用会在哪里、会被怎样使用,以及除了你的 JavaScript 小应用之外还安装了什么东西。不了解这些,就无法对代码做进一步的性能调整。而不好的结果却要让网志作者和网志读者来承担。那么我们要怎么做呢?

如果我们将目光投向 Java 社区,就会看到这个问题已经被解决了许多次。Applet、Servlet 甚至 EJB 在概念上和 JavaScript 小应用都没有什么本质的不同。最主要的差别在于Applet、Servlet 、EJB都被容器管理。

容器是一种寄存环境,提供传送基础设施和通信界面。容器处理载入、卸载、回调、点击、消息等等所有这些工程师热爱而非技术人士害怕听到的东西。简而言之,我们需要 JavaScript 的容器,从而给混乱的组件带来秩序。

结论


JavaScript 小应用和 JavaScript 工具看起来确实很酷,也很有用,但现在还没有合适的基础设施能够保证让它们好好工作。网志载入越来越慢的初始症状现在已经出现,随着更多的 JavaScript 小应用和 JavaScript 代码进入网志的世界,情况会变得更糟。而要求网志作者去理解组合使用 JavaScript 小应用带来的复杂性、相互依赖性等问题显然并不合适。

我们需要自动化、标准化的方法传送 JavaScript 小应用。我们应该在观念上学习软件行业中已经成功的做法。Java 社区已经取得了巨大的成功,充分利用他们取得的经验对于刚起步的 JavaScript 小应用开发企业来说有着重要的意义。

和往常一样,请告诉我们你的想法。如果你是一个 JavaScript 小应用开发者,我们很想知道你如何优化你的代码使之对环境更友好、运行得更快。



  1. Blog 统一译为 网络日志/网志。
  2. Widget 统一译为 JavaScript 小应用。
  3. 微块化(microchunking)就是把原来不可分割、浑然一体的产品,区分成通用的模块和特殊的模块,或者可以自由组合的模块,最后根据需求的不同,进行不同的排列组合。


添加评论

相关文章:

  2006 年互联网技术发展趋势

  2007互联网技术发展预测

  Top Web Apps in China--中国互联网发展概况

分享到:
评论

相关推荐

    揭秘一线互联网企业 前端JavaScript高级面试(全)

    揭秘一线互联网企业 前端JavaScript高级面试(全) 揭秘一线互联网企业 前端JavaScript高级面试(全)

    JavaScript标准参考教程

    它诞生于互联网早期,最初被称为LiveScript,之后改名为JavaScript,并随着Netscape Navigator的发布而问世。JavaScript逐步标准化并得到了各大浏览器的支持,成为Web开发的核心技术之一。JavaScript的历史还包括了...

    JavaScript语言精粹.修订版 Javascript:The Good Parts 中英 pdf

    JavaScript,作为一种广泛应用于Web开发的脚本语言,已经成为现代互联网技术不可或缺的一部分。"JavaScript语言精粹.修订版",即《Javascript: The Good Parts》,是由知名的计算机科学家Douglas Crockford所著,这...

    javascript混淆,javascript压缩,javascript加密软件

    然而,随着互联网安全问题日益凸显,保护JavaScript代码变得越来越重要。"javascript混淆"、"javascript压缩"和"javascript加密"就是针对这一需求的三个关键概念。 **JavaScript混淆**: 混淆JavaScript代码的主要...

    JavaScript内核系列 pdf

    JavaScript内核系列是一份深入探讨JavaScript编程语言及其内核的宝贵资源,对于正在学习或从事JavaScript开发的学生和程序员来说,它提供了丰富的知识和技术指导。这份资料详细阐述了JavaScript的各个方面,包括语法...

    JAVASCRIPT教案及案例

    本教案及案例旨在深入浅出地讲解JavaScript的基础知识和实战技巧,帮助学习者全面理解和掌握这一强大的工具。 一、JavaScript基础 1. 变量与数据类型:JavaScript支持多种数据类型,包括基本类型(Number、String...

    JavaScript入门篇,JavaScript基础知识

    几乎所有的网页都会使用JavaScript,它能让网页变得生动有趣,如动态样式、动画效果,以及对用户行为的即时响应。作为Web开发者,掌握JavaScript是提升用户体验的基础。 JavaScript的学习首先从理解其语法和基本...

    JavaScript学习帮助文档_JavaScript学习帮助文档_javascript_

    ES6(ECMAScript 2015)及后续版本带来了许多新特性,如模板字符串、解构赋值、Promise(用于异步编程)、模块系统(import和export)、生成器(generator)等,极大地提升了JavaScript的开发效率和代码质量。...

    深入理解JavaScript系列

    本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法...

    ArcGIS API For JavaScript无法加载ArcGIS Server地图服务的原因及对策.pdf

    ArcGIS API For JavaScript无法加载ArcGIS Server地图服务的原因及对策 在使用ArcGIS API For JavaScript加载ArcGIS Server地图服务时,经常会出现浏览器端不能显示地图的问题。本文针对该问题进行了深入分析和研究...

    揭秘一线互联网企业 前端JavaScript高级面试视频课程

    在前端开发领域,JavaScript是不可或缺的核心技术之一,尤其在一线互联网企业中,对JavaScript的掌握程度往往是衡量开发者技能水平的重要标准。本课程“揭秘一线互联网企业 前端JavaScript高级面试视频课程”聚焦于...

    JavaScript文档

    本资源包包含了多个关于JavaScript的重要参考资料,包括“JavaScript权威指南(英文版).chm”、“javascript5.5.chm”、“css2gb.chm”以及“JavaScript对象与数组参考大全 .chm”。 首先,我们来看“JavaScript权威...

    javascript

    JavaScript,又被称为JS,是一种广泛应用于网页和网络应用的编程语言,主要负责实现客户端的动态效果和交互功能。它是Web开发中的三大核心技术之一,与HTML和CSS共同构建了互联网的基石。安博090701班的JavaScript...

    2018 年 JavaScript 的未来及远方

    “The Future of Javascript 2018 and Beyond,” offers our future-looking analysis and predictions about the latest in JavaScript. We also look back at all the JavaScript craziness from 2017 and neatly ...

    JavaScript学习指南 高清 PDF

    7. **ES6及后续版本新特性**:ECMAScript(ES)是JavaScript的标准,每年都会发布新特性。例如,ES6引入了类、箭头函数、模板字符串、let/const、解构赋值等;ES7增加了async/await;ES8引入了Object.values()和...

    Javascript压缩工具,JsMinGUI

    然而,未经优化的JavaScript代码可能会导致页面加载速度变慢,影响用户体验。这就引出了JavaScript压缩的必要性。"JsMinGUI"是一款专为此目的设计的工具,它帮助开发者有效地压缩JavaScript代码,减少文件大小,提高...

    JavaScript讲义完整版.docx

    随着互联网的发展,JavaScript逐渐演变成一门广泛应用于增强Web互动性和用户体验的客户端脚本语言。本讲义将带你深入理解和学习JavaScript的核心概念、特点及其历史演变。 1. JavaScript概述: - JavaScript是一种...

    JavaScript 语言参考_javascript_js_

    JavaScript,作为一种广泛应用于Web开发的脚本语言,是互联网上实现动态交互的重要工具。它主要在客户端运行,赋予网页活力,使用户与网页之间能够进行实时互动。"JavaScript 语言参考" 是一本全面涵盖JavaScript...

    javascript控件

    二是性能优化,过多的JavaScript交互可能导致页面加载速度变慢,合理使用事件委托、异步加载和DOM操作可以提高性能。三是可访问性,确保我们的控件对屏幕阅读器和其他辅助技术友好,符合无障碍网页标准(WCAG)。 ...

    javaScript经典实例

    JavaScript,作为全球最广泛使用的编程语言之一,是创建交互式网页和动态应用的关键技术。它是一种轻量级的脚本语言,主要运行在浏览器环境中,但也适用于服务器端(如Node.js)和其他平台。"JavaScript经典实例"这...

Global site tag (gtag.js) - Google Analytics