JavaScript的替代品

2020/11/16 20:22 · javascript ·  · 0评论

目前,唯一受完全支持的语言以及浏览器中用于DOM树操作的实际标准是JavaScript。看起来它具有深刻的设计问题,这使它成为了新手漏洞和安全漏洞的雷区。

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

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

javascript的问题不在于语言本身,而是一种完美的原型化和动态语言。如果您是来自OO的背景,则可能会有一些学习上的弯路,但这不是语言的错。

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

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

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


编辑有问题的以下澄清

假设支持多种解释语言-您仍然遇到相同的问题。各种浏览器仍然会出现故障,并且具有不同的DOM。

另外,您必须为每种语言在浏览器中内置一个解释程序,或者以某种方式将其安装为插件(可以在提供页面之前进行检查)。为了使Java脚本保持一致,花了很长时间。

您不能以相同的方式使用已编译的语言-然后,您将引入一个不容易对其功能进行仔细检查的可执行文件。许多用户会选择不让它运行。

好的,那么对于已编译代码的某种沙箱呢?在我看来,听起来像Java Applets。或Flash中的ActionScript。或Silverlight中的C#。

怎样的IL标准呢?那有更多的潜力。用所需的任何语言进行开发,然后将其编译为IL,然后由浏览器将其编译为IL。

除此之外,Javascript已经是IL的一种-只是看GWT即可它使您可以用Java编写程序,但可以将它们分发为HTML和JS。


在进行进一步的澄清后进行编辑

Javascript不是浏览器支持的语言,或者不是,不是浏览器支持的唯一语言:在Internet Explorer的黑暗年代,您可以选择Javascript或VBScript在IE中运行。从技术上讲,IE甚至没有运行Javascript-它运行了JScript(主要是为了避免向Sun支付Java一词的费用,Oracle仍然拥有Javascript的名称)。

问题在于VBScript是Microsoft专有的,而且还不是很好。尽管Javascript在其他浏览器(例如FireBug)中添加了功能并获得了一流的调试工具,但VBScript仍然仅支持IE,并且几乎不可调试(IE4 / 5/6中的开发工具不存在)。同时,VBScript也进行了扩展,成为OS中非常强大的脚本编写工具,但是浏览器中没有这些功能(当它们成为巨大的安全漏洞时)。

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

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

添加用于在浏览器中解释的备用语言面临两个主要问题:

  • 让所有浏览器供应商实施新的语言标准,这是他们20年来仍未针对Javascript进行管理的东西。

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

应当指出,Javascript还没有“完成”,它还在不断发展以在新的浏览器中变得更好。最新的版本是超前于浏览器的实现年,他们的下一个工作。

编译成Javascript

就目前而言,使用一种可编译为Javascript的语言似乎是在编写更智能的代码时访问所有平台的唯一现实方法,并且这种情况可能会长期存在。对于任何新产品,总会有某些原因使一个或多个供应商不急于发货。

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

这么多的选择

有越来越多的语言可以编译为Javascript。可以在这里找到一个相当全面的列表:

值得注意的

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

  • Spider出现在2016年。它声称采用了Go,Swift,Python,C#和CoffeeScript的最佳创意。它不是类型安全的,但确实有一些次要的安全功能

  • Elm:Haskell可能是所有语言最聪明的语言,而Elm是Haskell for Javascript的变体。它具有高度的类型意识和简洁性,并提供功能性反应式编程,作为反应性模板或MVC意大利面的巧妙替代。但这对于程序程序员来说可能是一个很大的震惊

  • Google's Go的目标是简洁,简单和安全。Gopher可以通过GopherJS将Go代码编译成Javascript

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

  • Haxe类似于Flash的ActionScript,但是它可以针对多种语言,因此您的代码可以在Java,C,Flash,PHP和Javascript程序中重复使用。它提供类型安全和动态的对象。

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

  • GorillaScript“一种可编译为JavaScript的语言,旨在在尝试防止某些常见错误的同时向用户授权。” 与Coffeescript相似,但功能更全面,它提供了许多额外的功能来提高安全性并减少重复的样板样式。

  • LiteScript介于Coffeescript和GorillaScript之间。它为“内联”回调提供异步/良率语法,并检查变量的错别字。

  • 微软的TypeScript是Javascript的一个小型超集,可让您对函数参数进行类型限制,这可能会引起一些错误。同样,BetterJS允许您应用限制,但是在纯Javascript中,可以通过添加额外的调用或通过在JSDoc注释中指定类型来应用限制。现在,Facebook提供了另外执行类型推断的Flow

  • LiveScript是从Coffeescript衍生出来的,因其简洁而广受欢迎,但对我来说却不太可读。可能不是团队的最佳选择。

如何选择?

选择另一种语言,有一些因素需要考虑

  • 如果将来有其他开发人员加入您的项目,他们要花多长时间才能上手并学习这种语言,或者他们已经知道这种语言的机会是多少?

  • 该语言功能太少(代码仍将充满样板)还是功能太多(掌握将花费很长时间,并且在此之前某些有效代码可能无法辨认)?

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

未来...

杰夫·沃克(Jeff Walker)写了一系列令人发人深省的有关“ Javascript问题”的博客文章,包括为什么他认为TypeScriptDartCoffeescript都不提供适当的解决方案。他在结论中提出了一些需要改进语言的特点

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

是的,没有。谷歌有一种名为Dart的替代方法,它确实可以编译为JavaScript,就像jQuery一样,它试图使DOM操作更加容易。尝试一下可能会很有趣,请检查一下。

也可以看看

确实,JavaScript在某一点上很难处理,但是自那时以来,Web开发社区已经走了很长一段路。相反,我鼓励您看看jQuery这很容易,并且可以抽象出所有各种问题。

确实没有其他方法可以全面使用。想到了Flash,但ECMA脚本也是如此,对于大多数事情来说,它可能已被淘汰。

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

道格·克罗克福德 Doug Crockford )向Google进行了一次演讲,详细介绍了JavaScript的坏处和未来。自1999年以来,它实际上并没有发生太大变化-可以说是一件好事(只要您知道它们的局限性,几乎所有浏览器都可以运行相同的代码),而Doug展示了这些优点的所在大多是误会,结果却非常有力。

对于DOM操作,可以将JQuery看作是一个客户端库,该库用操作来替换大多数糟糕的DOM API,而这些操作很难编写出易于编写的精美代码。

如果您认为JavaScript有很多问题,建议您参阅Doug Crockford的书JavaScript:The Good Parts(或者在Google的“ Crockford JavaScript”中找到他做过的几个视频演示。)Crockford勾画出一个安全的子集和一组实践,并特别列出了要避免的部分语言。

我没有计划将JavaScript替换为操作DOM的实际方法。因此,最好学会安全好地使用它。

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

Internet Explorer支持可插入脚本语言,尽管除JScript之外IE唯一可靠包含的语言是VBScript。

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

如果您愿意将您的客户/访问者限制在特定的浏览器上,并且可能希望要求他们安装插件,则可以查看MS Silverlight - Wikipedia上具有可读性的概述使用Silverlight 2,您可以在客户端运行以C#,IronPython,IronRuby,VB.NET等编写的代码;来自Mono项目的Silverlight的免费Moonlight克隆承诺将为Linux带来相同的功能。

实际上,大多数Web应用程序和网站开发人员都希望达到Silverlight(最终是Moonlight)目前无法提供的广泛受众-这意味着坚持使用Javascript,或者可能是Flash(使用类似的编程语言ActionScript)。

因此,即使对于拥有庞大的工程师团队和营销预算以及附带免费软件项目的Microsoft来说,获得实质性的思想份额,采用和吸引其他事物也将是一场艰苦的战斗(以减轻对专有锁定的担忧) ),这可能有助于解释为什么Mozilla基金会(例如Mozilla Foundation)对实现这一目标的兴趣很少。您说:“除了互操作性”,但是鉴于我们观察到Silverlight的进展,显然互操作性的问题在这里很重要。

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

如果您喜欢Ruby 还有另一种选择:HotRuby,它是JavaScript中的ruby实现,将在浏览器中运行。它还不是很成熟,但是您可以看一下。

我还没有看到提到的一件事(哦,我在写作时看到Alcides提到了HotRuby,Nosredna提到了GWT和Script#),并且想抛出的是[插入语言]的许多实现JavaScript(例如,允许您在客户端上或部署之前RubyPythonC#JavaObj-J / Cappuccino [类似于Obj-C / Cocoa]或Processing [for Canvas]转换为JavaScript的翻译器)其中还具有各种抽象库])。当然,如果要在客户端上翻译它会带来性能开销,但是如果您对另一种语言更满意,它将为您提供一定的灵活性。

不过,就个人而言,我建议学习爱JavaScript。这是一门出色,功能强大的语言,一旦您了解它就相当优雅。我面临着相反的困境,希望获得一个能够满足我所有需求的功能强大的服务器端JavaScript / DOM解决方案。/主动提出的意见

不,JavaScript是它,但是它会发展。下一个版本是“ JavaScript Harmony”,如果您使用Google可以了解更多信息。

有时,有人建议将字节码解释器与JavaScript一起放入浏览器。至少在一段时间内可能不会发生。

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

jQuery(仍然是javascript,但是)确实可以帮助您,他们对几乎所有浏览器都具有支持,而且学习起来并不难:)

JavaScript是网络的英语。英语历史悠久,因为它有强大的海军征服了各个国家。这可以与使用JavaScript征服网络的大公司相提并论。这是一种来自多种欧洲语言(希腊语,拉丁语,日耳曼语,法语甚至是一些中文和印度语)的语言。多年来,JavaScript从其他语言(结构,面向对象,功能性)中借用了很多概念。在不同的地方说英语,方言和口音略有不同,这会使理解变得困难。就像JavaScript具有不同的浏览器一样,其解释也有所不同。

尽管英语一开始很容易学习,但英语的发音却非常不一致,而且例外情况也多于规则。就像JavaScript一样,它总是在提供惊喜。

尽管有不同的口音,但是JavaScript是网络上的通用语言。就像您可能不是英语并在这里用英语写一样,每个Web浏览器都有一定程度的英语理解能力。IE6就像那个在履历表上说自己很流利的人,但只参加了为期两周的英语作为外语课程。

已经尝试取代英语作为世界主要语言,例如世界语。但是他们都失败了,因为地球上大多数人会说英语。同样,很难引入更好的JavaScript替代方案。

我认为Javascript不会很快被替换。对于完全不同的富客户方法,您可能需要研究Flex(基于Flash的技术)。

也许类似haxe(请参阅haxe.org)可以为您提供帮助。它是一种比JavaScript干净的语言,可以编译为JavaScript,因此可以在浏览器中运行。

我知道这不是您问题的直接答案,但是我认为这可能对您来说很有趣。

许多人都知道Javascript并不是最好的和最漂亮的语言。但是,当前浏览器支持它,因此很难引入其他语言。我们根本不需要其他浏览器大战。

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

但是我认为,如果您开始考虑DOM模型以及如何使用DOM模型,那么Javascript并不是那么糟糕。DOM模型的工作方式导致了许多与JS混乱的事情。

本文地址:http://javascript.askforanswer.com/javascriptdetidaipin.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!