写点什么

《JavaScript 语言精粹》作者 Douglas 谈 Web 开发、jQuery 和 WebKit

  • 2013-02-17
  • 本文字数:2725 字

    阅读完需:约 9 分钟

JavaScript 在如今的 Web 领域正发挥着无与伦比的重要作用。但它又是一门饱受误解与非议的语言。这其中很大程度的误解来源于它奇怪的历史,和它的命名 —— 国内常有人戏称,Java 和 JavaScript 的区别,就像雷锋和雷峰塔的区别。而 Douglas Crockford,做为 JavaScript 语言的泰斗,同时也是 QCon 北京 2013 大会确认参会的国际嘉宾,在去年年底,接受了《German-language PHP Magazin》编辑Wießeckel 的采访,发表了他对 JavaScript、jQuery 、CoffeeScript、Dart 语言、Web 的历史,以及移动互联网等内容的真知灼见。

编者后注: 2 月 13 日,Opera 宣布将使用 WebKit 作为自己浏览器的新内核,在网络上掀起不小的波澜,而 Douglas 在这篇去年的访谈里就已经很有预见性的谈到了 WebKit 的胜利,同时还肯定了 jQuery 等框架的工作,实在令人折服。

关于 Opera 切换到 WebKit 引擎的决定,InfoQ 做了系列报道,请见:

下面是 Douglas 的采访内容:

作为《JavaScript 语言精粹》 (《JavaScript:The Good Parts》) 的作者,在谈及它的“bad parts”,甚至是“worst parts”时,Douglas 表示:

最坏的部分是 JavaScript 的依赖关系和全局变量。我们在浏览器中看到的各种安全问题全是这两个部分引起的。

对于 CoffeeScript,Douglas 这么看:

CoffeeScript 是一种可被编译成 JavaScript 的新语言,它把 JavaScript 当作一种可执行语言。CoffeeScript 的语法简洁优雅,非常可爱。我希望 JavaScript 可以像 CoffeeScript 一样。不过我并不推荐 CoffeeScript,因为它仍然处于实验阶段,而我不想在生产环境中冒险。但是对于自己感兴趣的小项目,用 CoffeeScript 是挺不错的选择。但是需要注意,CoffeeScript 的唯一优势只是语法,它的语意和 JavaScript 完全一样,没有什么你能用 CoffeeScript 能行而 JavaScript 不行的事。只是在很多时候 CoffeeScript 写法会更加方便。

谈到 jQuery 的时候,Douglas 表示了非常肯定的态度:

jQuery 非常棒。它运行在 DOM 的顶层,直接调用浏览器为 JavaScript 提供的 API。DOM 本身非常糟糕,是我见过的最烂的 API。而 JavaScript 是一门强大的语言 —— 只需要一个相对小体积的 JS 库就可以将 DOM 变得非常有用,jQuery 实现了这一点。Yahoo!的 YUI 从这方面看来并没有做的更好。我会建议所有人使用一种 JS 库来操纵 DOM,而不要使用原生 API,因为那的确非常痛苦。库的使用不但会让事情变得愉悦,也会提高工作效率。

对不同的 JavaScript 引擎,比如 V8、JaegerMonkey,Douglas 表示:

其实这都没什么关系。JavaScript 是一项有超强移植性的语言,在不同的 JavaScript 引擎表现的并没有太多差别,这些引擎其实都挺不错。Microsoft 的引擎(Trident)表现的也挺好。这是 JavaScript 的优点之一。值得一提的是,Microsoft 还花了不少功夫让 Web 工程师可以在 Windows8 的桌面端创建 WebApp,这看上去也还不错。

对 Google 发布的用于取代 JavaScript 的 Dart 语言,Douglas 肯定了尝试新语言的行为,但是对这门语言本身,他持保留的看法:

JavaScript 的确有很多问题,但 JavaScript 不会是最后一门编程语言。我鼓励大家在新编程语言上的实验。因为对于程序员来说,编程语言是最重要的创作工具。但其实我们很明显还没有把 JavaScript 了解透彻,而 JavaScript 自己也并没有表现的足够好。所以我们需要继续新编程语言的实验。我也很高兴看到这些新语言的尝试。但对于 Google Dart 来说,问题在于他们甚至还未完成语言的设计工作,就已经宣称胜利了。Dart 对我没有意义。Google 应当为尝试新语言的行为获得表扬,但是取代 JavaScript 看上去更像是一个阴谋,但看起来又不太可能。

对 JavaScript 过去多年的恶劣名声,以及最近一些年的迅速崛起,Douglas 回顾了整件事情的历史:

这都是因为 Ajax。在 2001 年的时候,Gartner 预测 Web 将像 WAIS 和 Gopher 那样死去,Web 将会被 Ex-Internet 取代,包括 Microsoft 在内的许多人相信这种说法。所以 Microsoft 扩张了 IE 团队,并开始着手研究下一代英特网。

在 2005 年,Jesse James Garrett 发表的关于 Ajax 的论文所有人大吃一惊。Microsoft 突然间又被 Web 打了个措手不及。可能因为浏览器在安全问题上表现的还不错,用户在面对 Web 应用的时候不至于总面对恐怖的,不知所以然的权限提示对话框,加之 Ajax 的能力,Web 开始发挥起它的威力。它比其他任何平台都更容易的将应用传递到客户端。由此,Web 开始腾飞。

Web 火热发展的另一个原因,是除 Web 以外的其他尝试都失败了。过去曾有很多试图取代 Web 的尝试。Adobe 尝试了很多次,Microsoft 也是。Google 如今仍在努力。但迄今为止他们都失败了。Java 曾被认为最可能去统治 Web,但 Java 失败了。之后 Java 又去尝试接管消费电子设备和其他场景,但是也都不怎么成功。在移动电话终端上,他们几乎试遍了所有的方法。他们试过专利,试过开源,但他们都没能成功。

现在人们正努力将 JavaScript 运行在移动平台,看起来好像挺不错。这并不是任何人希望或预言的,但事情就这么发生了。JavaScript 正在胜利,因为它凑效了。同时,JavsScript 的流行让其它只能勉强运行的方式显得又傻又非主流。

对于移动互联网的应用入口之争,和将 Web 构建为 OS 平台的 FirefoxOS,以及 WebKit 的话题,Douglas 认为:

Web 看起来正在占领移动互联网,但是一切并未尘埃落定。这是一场比赛:各种 App Store 正在试图取代 Web,他们在用垄断的方式控制所有应用的入口。但 Web 的哲学之一是“人人平等”。垄断的方式会胜利吗?我认为最终开放一定会赢得胜利,因为大家可以从每个人都自由交付应用的系统中获得更多好处。但是总有一股力量在试图封闭它,比如 DRM,所以让我们关注事情将会如何发展,并一起希望 Web 的开放性会保持下去。

FirefoxOS 并不会成为一个大事件,因为看上去移动平台上 Web 的胜者会是 WebKit。Mozilla 曾做过不错的东西,而 WebKit 做的更好。但我希望市场可以保持一种竞争环境,而不要有一个绝对的胜利者出现。所以我希望 Mozilla 可以更强大。

Web 的困境之一在于它从不属于任何一家单独的公司:它不源自 Adobe,也不源自 Microsoft,也不是 Sun 或者 Oracle。开发者必须处理 Web 平台上各种不同的因素,而这些不同的因素不但没有消减,还越来越多。同时,W3C 标准也还非常不充分。这让开发者们的日子很不好过。但我并不想为此走另一条路,说“好吧,有个统一平台就好了”这样的话。因为相比之下,平台的多样化是整个生态系统健康的表现,如果失去这样的多样性,那必然会是一件坏事。

2013-02-17 21:335310
用户头像

发布了 91 篇内容, 共 39.4 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

惠及百万用户 医保“上云”有了新思路

云计算

面试进阶齐飞!霸榜GitHub的 Java 全栈笔记太香了!

Java 编程 程序员 IT 计算机

“助力金九银十”25 大Java后端面试指南,3000道面试题解析

Java 编程 程序员 面试 IT

Spring Boot 实战派,让开发像喝水一样简单!

Java 程序员 架构 面试 IT

C++ Vector

若尘

c++ vector 8月日更

收获颇丰!这份阿里架构师纯手敲JDK源码全彩小册可以打满分

Java架构追梦

Java 阿里巴巴 架构 面试 jdk源码

MySQL中的DEFINER(定义者)是什么

Simon

MySQL

为什么安全性在托管中变得越来越重要

九河云安全

这波性能优化,太炸裂了!

why技术

Java 性能优化 JVM

2021 斩获 90K 月薪的 Spring 全家桶:文档 + 面试题 + 学习笔记 + 思维导图

编程 架构 微服务 IT 计算机

Tensor:Pytorch神经网络界的Numpy

华为云开发者联盟

神经网络 数组 PyTorch Numpy Tenso

你真的懂语音特征吗?

华为云开发者联盟

语音 音频 声学 时域图 时域

如何用Camtasia添加视频水印?

淋雨

视频剪辑 Camtasia 录屏软件

Java测试框架九大法宝

FunTester

自动化测试 JUnit 测试框架 selenium testNG

使用Micronaut框架构建一个微服务网络.

Java 编程 架构 面试 程序人生

Python代码阅读(第7篇):列表分组计数

Felix

Python 编程 Code Programing 阅读代码

我看 JAVA 之 并发编程【三】java.util.concurrent.atomic

awen

Java 并发编程 Atomic 原子操作

高频面试题-请把Java垃圾回收器说清楚

Java 编程 架构 面试 JVM

经验分享:我是如何拿下微软、滴滴、百度等 20家大厂的 Offer?

Java 程序员 架构 面试 IT

万字长文讲透低代码

百度开发者中心

最佳实践 开发者 方法论 低代码 语言 & 开发

Apache之道在腾讯的探索与实践

腾源会

Apache 开源 腾源会 腾讯开源

xposed 入门之修改手机 IMEI

Qunar技术沙龙

android 程序员 App 经验分享 安卓

台达AS228T_CanOpen_VFD_X

林建

台达 AS228T Canopen 功能块 E变址

Java 程序性能优化“学习日记”

Java 编程 面试 IT 计算机

spring cloud 在国内中小型公司能用起微服务来吗?

Java 程序员 架构 面试 IT

算法有救了!GitHub 上神仙项目手把手带你刷算法,Star 数已破500k

Java 编程 程序员 面试 算法

从技术到文案,还回技术么?

escray

学习 极客时间 朱赟的技术管理课 8月日更

Compose 编程思想

Changing Lin

8月日更

孩子排斥写作业 VS 员工不接活儿——项目管理来帮忙

Ian哥

接口返回值一定不允许使用枚举类型吗?

skow

Java 面试 后端 开发规范

毕业六年本科,去年疫情期间备战二个月,阿里巴巴四面成功!定级 P7

Java 程序员 架构 面试 IT

《JavaScript语言精粹》作者Douglas谈Web开发、jQuery和WebKit_JavaScript_彭超_InfoQ精选文章