JavaScript 的替代品

目前,浏览器中唯一完全支持的语言和事实上的 DOM 树操作标准是 JavaScript。它看起来有很深的设计问题,使它成为新手的漏洞和安全漏洞的雷区。

您是否知道有任何现有的或计划中的举措,在下一代浏览器中为 DOM 树操作和 HTTP 请求引入一种更好的(重新设计的)语言(不仅仅是 javascript) ?如果是的话,它集成到 Firefox 的路线图是什么,如果不是,出于什么原因(除了互操作性) JavaScript 应该是浏览器平台上唯一支持的语言?

我已经用过 jQuery,也读过“ javascript: 好的部分”。的确,这些建议是好的,但是我不能理解的是: 为什么只有 javascript?在服务器端(您最喜欢的 OS 平台) ,我们可以使用每种语言操作 DOM 树,甚至 fortran。为什么客户端(浏览器平台)只支持 javascript?

64223 次浏览

就客户端而言,Javascript 是操作 DOM 的唯一方法。就服务器端而言,有多种方式。

Javascript 的问题不在于语言本身——它是一种非常好的原型和动态语言。如果你来自面向对象的背景,你会有一些学习曲线,但这不是语言的错误。

大多数人认为 Javascript 像 Java 是因为它有相似的语法和相似的名字,但实际上它更像 lisp。它实际上非常适合 DOM 操作。

真正的问题是它是由浏览器编译的,这意味着它的工作方式因客户端而异。

实际的 DOM 不仅因浏览器而异,而且在性能和布局上也有很大的不同。


在有问题的澄清之后进行编辑

假设支持多种解释语言-您仍然有相同的问题。各种浏览器仍然存在 bug,并且有不同的 DOM。

此外,您还必须在浏览器中内置一个解释器,或者以某种方式将其安装为每种语言的插件(在提供页面之前可以检查这个插件)。让 Javascript 保持一致花了很长时间。

你不能以同样的方式使用编译语言——那么你就是在引入一个不容易被仔细检查的可执行文件。很多用户会选择不让它运行。

那么,为编译后的代码设置一个沙箱怎么样?听起来像是 Java Applet。或者 Flash 中的 ActionScript。或者 Silverlight 的 C # 。

那么某种 IL 标准呢?更有潜力。使用任何语言进行开发,然后将其编译为 IL,然后由浏览器进行 JIT。

除了 Javascript 已经是 IL 了,看看 GWT就知道了。它允许您用 Java 编写程序,但是以 HTML 和 JS 的形式分发它们。


编辑后进一步澄清问题

Javascript 不是,或者说不是,浏览器支持的唯一语言,回到那个 Internet Explorer 的黑暗时代,你可以在 Javascript 和 vbScript 之间选择在 IE 中运行。技术上 IE 甚至没有运行 Javascript ——它运行的是 JScript(主要是为了避免向 Sun 支付 爪哇咖啡这个词,Oracle 仍然拥有 Javascript这个名字)。

问题是 VBScript 是微软的专利,但是它也不是很好。虽然 Javascript 在其他浏览器中增加了功能并获得了最高级别的调试工具(比如 FireBug) ,但是 VBScript 仍然只支持 IE,而且几乎不可调试(IE4/5/6中没有开发工具)。与此同时,VBScript 也扩展成为操作系统中一个相当强大的脚本工具,但是这些特性在浏览器中都不可用(当它们成为大规模的安全漏洞时)。

仍然有一些公司内部应用程序使用 VBScript (有些依赖于这些安全漏洞) ,它们仍然在运行 IE7(他们只是停止了 IE6,因为微软最终终止了它)。

让 Javascript 恢复到当前的状态是一场噩梦,已经花了20年的时间。它仍然没有得到一致的支持,一些浏览器仍然缺少语言特性(在1999年指定) ,需要大量垫片。

在浏览器中添加一种替代的翻译语言面临两个主要问题:

  • 让所有的浏览器厂商实现新的语言标准——这是他们20年来都没有为 Javascript 做过的事情。

  • 第二种语言可能会稀释你已经拥有的支持,允许(例如) IE 拥有二流的 Javascript 支持,但是 VBScript (又一次)很棒。我真的不想为不同的浏览器用不同的语言编写代码。

值得注意的是,Javascript 还没有“完成”——它还在不断进化,以便在新的浏览器中变得更好。最新版本比浏览器的实现早了很多年,他们正在研究下一个。

的确,Javascript 曾经一度是出了名的难以处理,但是 Web 开发社区已经走过了漫长的道路。相反,我建议您看一看 JQuery。它很简单,能把各种各样的问题抽象出来。

而且真的没有其他可以全面运作的选择。闪光出现在脑海中,但这也是 ECMA 脚本,它可能是过度杀死大多数事情。

没有。JavaScript 就是它,但它会进化。下一个版本是“ JavaScript Harmony”,如果你在谷歌上搜索的话,你可以学到更多。

不时有人建议在浏览器中加入字节码解释器和 JavaScript。可能不会发生,至少暂时不会。

我碰巧喜欢 JavaScript。但还有其他解决方案,包括将 Java 编译成 JavaScript 的 GWT 和将 C # 编译成 JavaScript 的 Script # 。

Internet Explorer 支持可插入的脚本语言,尽管 IE 除了 jScript 之外,唯一可靠的脚本语言是 vbScript。

据我所知,浏览器中似乎普遍存在着对动态语言的偏好,而 JavaScript 似乎足以满足这种需求,以至于网络效应使得其他任何语言都不适合使用。这种语言实际上非常强大,尽管它在浏览器中的实现还有很多不足之处。

如果你认为 JavaScript 有深层次的问题,我推荐 Doug Crocford 的书 JavaScript: 好的部分。(或者在谷歌上搜索“ Crocford JavaScript”,找到他做过的几个视频演示。)克罗克福德概述了一个安全的子集和一组实践,并特别列出了语言中需要避免的部分。

我不知道有计划取代 JavaScript 作为操纵 DOM 的 事实上手段。所以最好学会安全有效地使用它。

短期内,我会使用 jQuery 之类的东西来隐藏浏览器的不兼容性。从长远来看,Silverlight 或 Adobe AIR 等技术可能会在未来成为一个非常不同的雷区(但仍然是一个雷区)。

我不认为 Javascript 会很快被替换掉。对于一种完全不同的富客户端方法,您可能想要研究 Flex,这是一种基于 Flash 的技术。

Doug Crocford 给谷歌做了个演讲详细介绍了 JavaScript 的优缺点及其未来。事实上,自1999年以来,它并没有发生太大的变化——这可以说是一件好事(只要你意识到它们的局限性,几乎所有的浏览器都可以运行相同的代码) ,Doug 展示了哪些好的部分最终被证明是非常强大的误解。

对于 DOM 操作,可以将 JQuery 看作是一个客户端库,它用操作取代了大多数糟糕的 DOM API,这些操作很难编写成相当优雅的代码,而且更容易编写。

也许像 haxe (见 haxe.org)这样的东西可以帮助你。它是一种比 JavaScript 更简洁的语言,可以编译成 JavaScript,因此可以在浏览器中运行。

我知道这不是对你问题的直接回答,但是我觉得你可能会感兴趣,尽管如此。

Jquery (仍然是 javascript,但是)它真的可以帮助你他们支持几乎所有的浏览器,而且学起来也不是那么难:)

如果您愿意将客户/访问者限制在特定的浏览器上,并且可能愿意要求他们安装插件,那么您可以查看 银光女士—— 维基百科上有一个可读的概述。使用 Silverlight 2,你可以运行用 C # 、 IronPython、 IronRuby、 VB.NET 等编写的代码,客户端; 免费的 月光版本的 Silverlight,来自 Mono 项目,承诺给 Linux 带来相同的功能。

实际上,大多数网络应用程序和网站的开发者更愿意接触到比 Silverlight (最终是 Moonlight)目前所能提供的更广泛的受众——这意味着坚持使用 Javascript,或者可能是 Flash (使用类似的编程语言 Actionscript)。

因此,即使是拥有大量工程师和市场预算的微软,想要获得大量的人气、采用和吸引力也是一场艰苦的战斗。 abc0是一个自由软件项目(可能是为了缓解对厂商锁定的担忧)——这可能有助于解释为什么几乎没有兴趣,例如,对于 Mozilla基金会来说,推动这样一个目标。“除了互操作性”,你说: 但是很明显,互操作性的问题是这里的大问题,考虑到我们观察 wrt Silverlight 的进展..。

如前所述,你有 Flash (ActionScript,是从 Javascript 派生出来的语言)和 Silverlight/Moonlight (IronPython,IronRuby,JScript,VBScript,C #) ,它们可以通过插件在浏览器中运行(第一个插件更加普遍)。

如果你喜欢 Ruby 还有另外一个选择: HotRuby,它是一个 javascript 中的 Ruby 实现,可以在浏览器中运行。它还不是很成熟,但你可以看一看。

有一件事我没有提到(哦,我看到 Alcides 在我写作的时候提到了 HotRuby,而 Nosredna 提到了 GWT 和 Script #) ,我想说的是有一些[插入语言]-on-JavaScript 的实现(例如,翻译器允许你在客户端或部署之前将 露比巨蟒C # 爪哇咖啡Obj-J/Cappuccino[类似于 Obj-C/Cocoa ]或 正在处理[用于 Canvas ]转换为 JavaScript [其中一些还具有各种抽象库])。当然,如果在客户机上进行翻译,会有性能开销,但是如果您对另一种语言感到更舒适,那么它将允许您具有一定的灵活性。

但就我个人而言,我建议学会热爱 JavaScript。这是一种非常优秀、强大的语言,一旦你了解它,就会发现它非常优雅。我正面临着相反的困境,迫切希望有一个能够满足我所有需求的服务器端 JavaScript/DOM 解决方案。/主动提出的意见

很多人都明白 Javascript 并不是有史以来最好、最漂亮的语言。然而,目前浏览器支持它,因此很难引入一种不同的语言。我们根本不需要另一场浏览器大战。

这解释了为什么我不知道切换到不同的客户端语言的计划。

但是如果你开始考虑 DOM 模型以及如何使用它,我认为 Javascript 并没有那么糟糕。JS 中许多混乱的东西都是 DOM 模型工作方式的结果。

JavaScript 应该是浏览器平台上唯一支持的语言吗?

是也不是。Google 有一个叫做 Dart 的替代品,它可以编译成 JavaScript,就像 jQuery 一样,它试图让 DOM 操作变得更容易一些。试验一下可能会很有趣。

参见

编译到 Javascript

就目前而言,使用编译成 Javascript 的语言似乎是在编写更智能代码的同时达到所有平台的唯一现实途径,而且这种情况可能会持续很长一段时间。对于任何新产品,总会有一个或多个供应商不急于发货的原因。

(但我真的不认为这是个问题。到目前为止,Javascript 已经得到了很好的优化。如果是手工编写,机器代码也是不安全的,但是作为编译目标和执行语言可以很好地工作。)

太多选择了

编译成 Javascript 的语言越来越多。这里有一个相当全面的清单:

值得关注

我将提到一些我认为值得注意的事项(当然,我忽略了一些我不知道的宝石) :

  • 蜘蛛出现在2016年。它声称采用了 Go、 Swift、 Python、 C # 和 CoffeeScript 的最佳创意。它不是类型安全的,但它确实有一些小的 安全装置

  • Elm : Haskell 可能是其中的 最聪明的语言,而 Elm 是 Haskell for Javascript 的变体。它具有高度的类型感知和简洁性,并且提供了 函数式反应型编程作为反应性模板或 MVC 意大利面的一个简洁替代品。但它可能相当 对程序员的冲击

  • Google 的 去吧旨在简洁、简单和安全。 Go 代码可以通过 GopherJS编译成 Javascript。

  • Dart 是 Google 后来取代 Javascript 的尝试。它通过类似 C/Java 的语法和可选类型提供接口和抽象类。

  • Hax 类似于 Flash 的 ActionScript,但是它可以 以多种语言为目标,所以你的代码可以在 Java、 C、 Flash、 PHP 和 Javascript 程序中重用。它提供了类型安全和动态对象。

  • Opalang 为 Javascript 添加了语法糖,以提供 直接数据库访问、智能延续、类型检查和协助客户机/服务器分离。(绑定到 NodeJS 和 MongoDB。)

  • GorillaScript “一种编译到 JavaScript 的语言,旨在增强用户的能力,同时试图防止一些常见错误。”类似于 Coffeescript,但是更加全面,提供了一系列额外的特性来提高安全性并减少重复的样板模式。

  • LiteScript 介于 Coffeescript 和 GorillaScript 之间,它为“内联”回调提供异步/收益语法,并检查可变的输入错误。

  • 微软的 打字机是 Javascript 的一个小超集,它允许您对函数参数放置类型限制,这可能会捕获一些 bug。类似地,更好的 JS允许应用限制,但是在纯 Javascript 中,可以通过添加额外的调用或在 JSDoc 注释中指定类型。现在 Facebook 提供了 流动,它还可以进行类型推断。

  • LiveScript 是 Coffeescript 的衍生产品,因其简洁而受欢迎,但在我看来不是很好读。可能对团队来说不是最好的选择。

如何选择?

选择成为另一种语言时,有一些 需要考虑的因素:

  • 如果将来有其他开发人员加入您的项目,他们需要多长时间来加快速度并学习这种语言,或者他们已经知道这种语言的可能性有多大?

  • 这种语言的特性是太少(代码仍然充满样板)还是太多(掌握它需要很长时间,在此之前有些有效的代码可能无法破译) ?

  • 它有你的项目所需要的特性吗?(您的项目是否需要类型检查和接口?是否需要智能延续来避免嵌套回调地狱?有很多反应吗?未来是否需要将目标对准其他环境?)

未来..。

Jeff Walker 已经写了很多关于“ Javascript 问题”的博客文章,包括为什么他认为 打字机飞镖咖啡稿都不能提供足够的解决方案。他为改进 结论语言提出了一些令人满意的特性。

JavaScript 是网络的英语语言。英国的历史传播是因为它有一支强大的海军征服了许多国家。这可以与那些用 JavaScript 征服互联网的大公司相提并论。这是一种由多种欧洲语言(希腊语、拉丁语、日耳曼语族、法语甚至一些中国和印度词汇)拼凑而成的语言。多年来,JavaScript 从其他语言(结构化、面向对象、函数化)借鉴了许多概念。英语在不同的地方说,方言和口音有细微的差别,这会使理解变得困难。就像 JavaScript 有不同的浏览器解释它有点不同。

尽管英语一开始很容易学,但是它的发音非常不一致,而且比规则有更多的例外。就像 JavaScript 一样,它总是提供惊喜。

尽管有不同的口音,JavaScript 仍然是网络的通用语言。就像你可能不是英国人,在这里用英语写作一样,每个网页浏览器都有一定程度的英语理解能力。IE6就像一个人在简历上说他很流利,但是只上了两周的英语作为外语的课程。

有人试图取代英语成为世界主要语言,例如世界语。但是他们都失败了,因为地球上的大多数人都会说一些英语。同样,也很难引入更好的 JavaScript 替代品。