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

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

我已经使用过 jQuery,并且还阅读了“javascript:好的部分”。确实这些建议很好,但我无法理解的是:为什么只有JavaScript?在服务器端(您最喜欢的操作系统平台),我们可以使用每种语言(甚至 Fortran)操作 DOM 树。为什么客户端(浏览器平台)只支持javascript?

有帮助吗?

解决方案

JavaScript 的问题不在于语言本身——它是一种完美的原型化和动态语言。如果您有面向对象的背景,那么学习过程中会有一些困难,但这不是语言的错。

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

真正的问题是它是由浏览器编译的,这意味着它根据客户端以非常不同的方式工作。

不仅实际的 DOM 因浏览器而异,而且性能和布局也存在巨大差异。


编辑以下有问题的澄清

假设支持多种解释语言 - 您仍然遇到相同的问题。不同的浏览器仍然存在缺陷并且具有不同的 DOM。

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

您不能以同样的方式使用编译语言 - 那么您将引入一个无法轻松检查其功能的可执行文件。许多用户会选择不让它运行。

好的,那么为编译后的代码提供某种沙箱怎么样?对我来说听起来像 Java Applet。或者 Flash 中的 ActionScript。或者 Silverlight 中的 C#。

某种 IL 标准怎么样?那更有潜力。使用您想要的任何语言进行开发,然后将其编译为 IL,然后浏览器对其进行 JIT。

除此之外,Javascript 已经是 IL 了 - 只要看看 总吨位. 。它允许您用 Java 编写程序,但将它们作为 HTML 和 JS 分发。


编辑以下有问题的进一步说明

Javascript 不是,或者说不是,浏览器支持的唯一语言:回到 Internet Explorer 的黑暗时代,您可以选择在 IE 中运行 Javascript 或 VBScript。从技术上讲,IE 甚至没有运行 Javascript——它运行了 J脚本 (主要是为了避免向 Sun 支付这个词的费用 爪哇, Oracle 仍拥有该名称 JavaScript).

问题是 VBScript 是 Microsoft 专有的,但它也不是很好。虽然 Javascript 在其他浏览器(如 FireBug)中添加了功能并获得了顶级的调试工具,但 VBScript 仍然仅适用于 IE,并且几乎不可调试(IE4/5/6 中的开发工具不存在)。与此同时,VBScript 也扩展成为操作系统中非常强大的脚本工具,但这些功能在浏览器中均不可用(当它们可用时,它们会成为巨大的安全漏洞)。

仍然有一些公司内部应用程序使用 VBScript(其中一些依赖于这些安全漏洞),并且它们仍在运行 IE7(它们只是停止了 IE6,因为 MS 最终将其杀死)。

让 Javascript 达到目前的状态是一场噩梦,花了 20 年时间。它仍然没有一致的支持,一些浏览器仍然缺少语言功能(1999 年指定),并且需要大量的垫片。

在浏览器中添加替代语言进行解释面临两个主要问题:

  • 让所有浏览器供应商实施新的语言标准 - 20 年来他们仍然没有为 Javascript 做到这一点。

  • 第二种语言可能会削弱您已有的支持,例如,允许 IE 拥有二流的 Javascript 支持,但(再次)拥有出色的 VBScript 支持。我真的不想为不同的浏览器用不同的语言编写代码。

应该指出的是,Javascript 还没有“完成”——它仍在不断发展,以便在新的浏览器中变得更好。这 最新版本 比浏览器的实现提前了好几年,他们正在开发下一个。

其他提示

编译为 JavaScript

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

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

这么多选择

编译为 Javascript 的语言数量不断增加。可以在这里找到一个相当全面的列表:

值得注意的

我会提到一些我认为值得注意的(尽管毫无疑问忽略了一些我不知道的宝石):

  • 蜘蛛 出现于2016年。它声称吸收了 Go、Swift、Python、C# 和 CoffeeScript 的最佳创意。它不是类型安全的,但它确实有一些小问题 安全特性.

  • 榆树: :哈斯克尔可能是 最聪明的语言 其中,Elm 是 Haskell for Javascript 的变体。它具有高度的类型感知能力和简洁性,并提供 函数式反应式编程 作为响应式模板或 MVC 意大利面条的巧妙替代品。但这可能是相当 令程序程序员震惊.

  • 谷歌的 旨在简洁、简单、安全。Go 代码可以通过以下方式编译成 Javascript 地鼠JS.

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

  • 哈克西 就像Flash的ActionScript,但它可以 定位多种语言 因此您的代码可以在 Java、C、Flash、PHP 和 Javascript 程序中重复使用。它提供类型安全和动态对象。

  • 奥帕朗 向 Javascript 添加语法糖以提供 直接数据库访问, 、智能延续、类型检查并协助客户端/服务器分离。(与 NodeJS 和 MongoDB 绑定。)

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

  • LiteScript 介于 Coffeescript 和 GorillaScript 之间。它为“内联”回调提供异步/yield 语法,并检查变量拼写错误。

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

  • 实时脚本 是 Coffeescript 的衍生产品,因其简洁而广受欢迎,但对我来说可读性不太好。对于团队来说可能不是最好的。

如何选择?

什么时候 选择 另一种语言,有一些 需要考虑的因素:

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

  • 该语言的功能是否太少(代码仍然充满样板文件)或太多(需要很长时间才能掌握,并且在此之前某些有效代码可能无法破译)?

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

未来...

杰夫·沃克写过 发人深省的系列 关于“Javascript 问题”的博客文章,包括为什么他不这么认为 打字稿, ,也不 也不 咖啡脚本 提供充分的解决方案。他提出了一些改进语言的理想特性 结论.

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

是和不是。有一个名为 Dart by Google 的替代方案,它可以编译为 JavaScript,并且就像 jQuery 一样,它试图使 DOM 操作更容易一些。尝试一下可能很有趣,检查一下。

也可以看看

这是事实,JavaScript是在一个点上出了名的难以对付,但由于Web开发社区已经走过了很长的路要走。相反,我会鼓励你看看 jQuery的。这很容易和抽象了所有的各种问题。

和真的有没有替代品全线工作。闪存想到的,但同样是ECMA脚本,它可能在杀死大部分的东西。

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

道格·克罗克福德给了一个报告给谷歌的详细介绍JavaScript和其未来的坏事,也是好事部分。它实际上并没有在所有1999年以来太大的改变 - 这可以说是一个很好的事情(几乎所有的浏览器都可以,只要你知道自己的局限性运行相同的代码)和道格显示了良好的零件大多那变成是非常强大的误解。

有关DOM manipuluation,看JQuery的作为客户端库替换最可怕的DOM API与是疼痛操作的写更易于编写的代码来漂亮优雅位。

如果你认为JavaScript有深刻的问题,我建议道格·克罗克福德的书,的JavaScript :好的部分的。 (或谷歌的“JavaScript的克罗克福德”找他做一些视频演示。)克罗克福德勾勒出一个安全的子集,设置的做法,并具体列出了语言的某些部分来避免。

,我不知道的计划更换JavaScript作为事实上装置操纵DOM的。所以,最好的学习安全以及使用它。

在客户端Javascript的术语是指操纵DOM的唯一途径。在服务器侧的术语有多种方式。

Internet Explorer支持可插拔脚本语言,虽然可靠地包含在IE之外的JScript只有一个是VBScript中。

据我所看到的,似乎有向浏览器动态语言偏见的总体排序和JavaScript似乎满足这一需求充分,以至于网络效应进行任何其他语言非首发。语言其实是相当强大的,尽管它在浏览器中执行留下许多有待改进。

如果你愿意你的客户/用户限制在特定的浏览器,并可能愿意要求他们安装一个插件,你可以看看的 MS的Silverlight - 可读概述是在维基 。使用Silverlight 2,你可以运行,客户端,你用C#编写代码,IronPython的,IronRuby的,VB.NET等;免费的Silverlight月光克隆,从Mono项目,承诺带来相同的功能到Linux

在实践中,Web应用程序和网站的大多数开发者更喜欢比的Silverlight(最终月光),以达到更广泛的观众目前可以提供 - 这意味着使用Javascript,或者可能的Flash(它使用了类似的编程语言,动作)坚持。

因此,获得了大量的传立,通过和牵引为别的被证明是即使对于微软是一场艰苦的战斗,其大集团的工程师和营销预算自由软件上的侧项目(到可能缓解一下专利锁定的担忧) - 这可能有助于解释为什么有很少的兴趣,如在Mozilla基金会的朝着这样一个目标推进的部分。 “除了互操作性”,你说:但很明显,互操作性的问题是大问题在这里,因为我们所观察到WRT Silverlight的进步......

正如已经说过的,必须的Flash(ActionScript,这是从Javascript派生语言)和Silverlight /月光(IronPython的,IronRuby的,JScript中,VBScript中,C#),可以在浏览器中通过插件运行(第一个是多更普遍)。

也有另一种选择,如果你喜欢红宝石: HotRuby ,它在JavaScript中的Ruby实现即会在浏览器中运行。这还不是很成熟,但你可以看看它。

我还没有看到提到的一件事(哦,我在写作时看到 Alcides 提到了 HotRuby,而 Nosredna 提到了 GWT 和 Script#),我想扔掉的是,[插入语言] 有许多实现 -on- JavaScript(例如允许您转换的翻译器 红宝石, Python, C#, 爪哇, Obj-J/卡布奇诺 [类似于 Obj-C/Cocoa] 或 加工 [对于 Canvas] 在客户端或部署之前转换为 JavaScript [其中一些还具有各种抽象库])。当然,如果在客户端上进行翻译,则会产生性能开销,但如果您更熟悉另一种语言,它将为您提供一定的灵活性。

不过,就我个人而言,我建议学习并热爱 JavaScript。它是一种优秀、强大的语言,一旦你了解它,它就会变得非常优雅。我面临着相反的困境,急于拥有一个功能强大的服务器端 JavaScript/DOM 解决方案来满足我的所有需求。/主动提出意见

没有。 JavaScript是它,但它会进化。下一个版本是“JavaScript的和谐”,而如果谷歌,你可以学到更多。

现在再有人建议把字节码解释器到浏览器的JavaScript旁边。可能不会发生,至少一段时间。

我碰巧喜欢的JavaScript。但是,还有其它的解决方案,包括GWT,其编译Java来JavaScript和脚本#,其中编译C#为JavaScript。

jQuery的(还是JavaScript,但)它会真正帮助你,他们有支持几乎所有的浏览器,它是不是真的那么难学:)

JavaScript是网站的英语。英国历史上流传,因为它有一个强大的海军征服各个国家。这与被征服的使用JavaScript的网络大公司。这是来自多个欧洲源(希腊语,拉丁语,日耳曼语,法语甚至一些中国和印度的话)重挫共同的语言。 JavaScript的借了很多的理念贯穿从其他语言(结构,面向对象,功能性)的年。英语在不同的地方,在方言的口音的细微变化,可以使理解困难的发言。就像JavaScript有不同的浏览器不同的解释这一点。

虽然英语是很容易学会最初,它具有非常不一致的发音和比规则更多的异常。如同JavaScript它总是在那里提供了一个惊喜。

尽管不同口音,JavaScript是腹板的通用语言。就像你可能不是英语,写在这里的英语,每一个网页浏览器有一定的英语理解。 IE6就像是谁在他的简历,他是说流利的家伙,但只去了两个星期的课程对英语作为一门外语。

有已经尝试取代英语作为世界主要语言,例如世界语。但是,所有的人都失败了,因为大部分地球人讲一些英语。以同样的方式将很难引入到JavaScript的更好的替代品。

我不认为JavaScript就立即更换任何时候。对于一个完全不同的方法来丰富客户端,您可能需要调查的Flex,这是一个基于Flash的技术。

也许像haXe的(见haxe.org)可以帮助你。这是不是JavaScript似乎更清洁,可以编译成JavaScript的语言,因此它可以在浏览器中运行。

我知道这是不是直接回答你的问题,但我认为这可能是有趣的你,不过。

很多人都明白,JavaScript是不是最好的,最漂亮的语言不断。但是,目前浏览器所支持,因此这将是非常难以引进不同的语言。我们根本不需要另一个浏览器之战。

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

但我认为,如果你开始思考DOM模型和一个将如何使用它JavaScript并不是那么糟糕。很多事情是凌乱与JS的方式DOM模型的工作的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top