5种用于前端开发的JavaScript替代方案

JavaScript虽然是很受欢迎的语言,但是并不适合所有人,那么有哪些替代方案呢?本文将分析5种JavaScript替代方案。

1995年,Netscape(网景通信公司)聘请Brendan Eich为当时最受欢迎的网络浏览器Netscape Navigator添加一种新语言。Netscape希望增强网络的可编程性。

LiveScript在1995年末发布了测试版的浏览器,并在最终发布前改名为JavaScript,以利用Netscape与Sun Microsystems的合作关系,后者是流行的Java语言背后的公司(尽管JavaScript本质上与Java没有任何关系)。

Mozilla的创始人之一是Eich,他在10天内开发出了JavaScript的原始版本。在接下来的25年里,JavaScript从一种不受欢迎且受到严重限制的语言发展成为现代web应用程序构建的强大基础。如今,JavaScript主导了浏览器,并通过Node.js占领了大部分服务器。

然而,JavaScript并不是所有开发人员都喜欢的语言。Eich在早期做出了一些古怪的决定,这些决定一直持续到2019年,其中包括典型的继承、“this”以及JavaScript的侵略性和不一致的类型强制。

近年来,开发人员已经创建了JavaScript的替代品。JavaScript仍然是在浏览器中运行的唯一语言,因此这些新语言主要是编译或转换为JavaScript。CoffeeScript是第一个类似的脚本,但很快就被众多竞争对手所超越,每个竞争对手都对JavaScript进行了改进。

Dart

Dart是一种面向对象的c语言,由Google创建,作为JavaScript的替代品。它抛弃了JavaScript的原型继承系统,而采用了更传统的面向对象的方法,任何使用过Java或c++的人都熟悉这种方法。与JavaScript不同,Dart是一种静态类型的语言,消除了JavaScript代码中的常见错误源。Dart支持类型推断,因此没有必要在每次声明变量或函数时都包含类型样板。

也许Dart最令人激动的功能是它在网络之外的可用性。Dart代码可以转换为JavaScript以便在浏览器中运行,但它也可用于独立应用程序和服务器端开发。Google的Flutter UI工具包是一个可移植的前端框架,可用于桌面、移动设备和Web,构建本机应用程序。

TypeScript

TypeScript是微软向更好的JavaScript进军的第一步。与Dart不同,TypeScript不是一种全新的语言,而是JavaScript的超集。TypeScript编译器可以编译有效的JavaScript,但是TypeScript增加了几个新特性,改进和现代化了JavaScript的限制,其中最重要的是一个可选的类型系统。

许多JavaScript问题都是由于缺少静态类型导致的,这导致了编译器在运行前进行检查时就被限制了。顾名思义,TypeScript实现了一种类型表示法,开发人员可以使用这种表示法为web应用程序编程保证安全。与Dart一样,TypeScript支持类型推断。

值得一提的是,TypeScript比它的竞争对手谷歌更受欢迎。比如,虽然Angular是谷歌的项目,但它的框架是用TypeScript开发的。TypeScript也可以与React和Vue一起使用。

Elm

Dart和TypeScript与JavaScript和C. Elm有明显的亲缘关系。它是一种静态类型的函数语言,与Haskell相比更类似于C,但没有Haskell那种令人挠头的复杂性。

Elm本质上是一种用于构建web前端的特定于领域的语言。

Elm不像JavaScript那样是一种通用语言,相反,创建者Evan Czaplicki专注于构建最好的前端web应用程序开发体验。Elm的主要优点是,通过静态类型和不可变值消除了前端代码中的许多潜在bug。Elm宣称自己是一种“在实践中没有运行异常”的语言,这意味着如果一个Elm程序运行,它就不太可能在生产中遇到阻止性能的bug。

以下是Elm代码示例

Elm代码看起来和JavaScript一点也不像,但是它有简单直观的语法,Elm对学习过JavaScript的人来说应该不难。

ClojureScript

ClojureScript是Clojure编程语言的一个版本,可以编译为JavaScript。Clojure是运行在Java虚拟机上的Lisp。与Elm一样,Clojure也是一种函数性语言,具有不可变的数据类型。与Elm不同,它是一种通用编程语言,可以在后端与JVM一起使用,也可以通过JavaScript在前端使用。

与所有Lisp一样,Clojure是用括号分隔的s表达式编写的。用Clojure的创建者Rich Hickey的话来说,ClojureScript试图用Clojure(简洁且功能强大的编程语言)取代JavaScript,从而解决客户机/嵌入式应用程序开发中的薄弱环节。Clojure可以与React和其他流行的JavaScript框架一起使用。

当Netscape雇用Brendan Eich时,他们计划将Scheme集成到Navigator中,而不是创建一种新的语言。Scheme是一种Lisp,因此,如果历史的发展稍微有些不同,Lisp可能已经成为世界上最流行的编程语言家族。JavaScript通过一流的函数、闭包和lambdas保留了一些“Lispiness”。在JavaScript开发过程中扮演关键角色并发明了JSON的道格拉斯•克罗克福德(Douglas Crockford)将JavaScript称为“披着C外衣的Lisp”。

Phoenix LiveView

之前讲过的语言可以编译成JavaScript,它们让开发人员无需编写JavaScript就可以构建客户端应用程序。

Phoenix LiveView与众不同。Phoenix是一个用相对较新的Elixir编程语言编写的web框架。Phoenix是一个服务器端框架。但我们为什么要在一篇专门讨论浏览器JavaScript替代方案的文章中讨论它呢?因为LiveView可以在许多web开发场景中替代JavaScript。

Phoenix的创建者Chris McCord称LiveView是“一个令人振奋的新库,它支持使用服务器呈现HTML,实现丰富的实时用户体验”。LiveView使用Phoenix channel在浏览器和服务器之间创建双向连接。LiveView基于Websockets,可以在不编写JavaScript的情况下创建交互体验。人们自然会担心这种方法太慢而无法使用,但是LiveView的设计目的是最小化数据传输,并且在实践中可以用于构建低延迟接口。

但LiveView有局限性,我们不建议在LiveView中构建像Google Docs这样的复杂应用程序。如果离线功能对应用程序很重要,那么LiveView也不是合适的解决方案。但是,对于表单、实时界面更新和数据验证等功能,Phoenix LiveView是JavaScript的可行替代方案。它比大多数JavaScript应用程序小得多;,LiveView的浏览器代码大约是React的四分之一。

总结

我们已经研究了JavaScript的五种替代方法,每种方法都提供了一种创建Web应用程序和交互式界面的不同方式。当然目前大部分人使用的依然是JavaScript,因为它是Web浏览器支持的唯一语言。

但随着WebAssembly被广泛采用,这种情况可能即将发生变化。所有主流浏览器都支持WebAssembly,将来它很可能成为面向Web的语言的默认编译目标。对于Web开发人员来说,探索WebAssembly的可能性是个很不错的方向。

原文网址:https://jaxenter.com/5-alternatives-to-javascript-159787.html

Image placeholder
NULLasdafa
未设置
  50人点赞

没有讨论,发表一下自己的看法吧

推荐文章
可视化的JavaScript:JavaScript引擎运行原理

JavaScript很酷,但是JavaScript引擎是如何才能理解我们编写的代码呢?作为JavaScript开发人员,我们通常不需要自己处理编译器。然而,了解JavaScript引擎的基础知识并了解

9 个顶级的JavaScript图表库

数据可视化技术在过去十年中一直在不断改进,现在许多高级图表库可供消费者使用。在2000年代初期,图表生成主要由服务器端图像位图构成。诸如Flash和Silverlight之类的插件提供了更具交互性的图

如何使你的JavaScript代码简单易读

解决同一问题的方法有很多,但有些解决方法很复杂,甚至有些是荒谬的。在这篇文章中,我想谈谈解决同样问题的好方法和坏方法。让我们先从怎样删除数组中的重复项这个简单问题开始。复杂-使用forEach删除重复

浏览器中的JavaScript:什么是文档对象模型?什么是DOM操作?

JavaScript并没有那么糟糕。作为运行在浏览器中的脚本语言,它对于网页操作非常有用。在本文中,我们将看到可以用哪些手段来修改HTML文档和交互。什么是文档对象模型?文档对象模型是在浏览器中一切的

14个你可能不知道的JavaScript调试技巧

以更快的速度和更高的效率来调试JavaScript熟悉工具可以让工具在工作中发挥出更大的作用。尽管江湖传言JavaScript很难调试,但如果你掌握了几个技巧,就能用很少的时间来解决错误和bug.文中

可视化的JavaScript:作用域(链)

首先,来看看下面的代码:constname="Lydia" constage=21 constcity="SanFrancisco" functiongetPersonInfo(){ constn

可视化的JavaScript:事件循环

首先,事件循环是什么,为什么要理解它?JavaScript是单线程的:一次只能运行一个任务。通常这没什么大不了的,但现在想象一下我们正在运行一个需要30秒的任务。在这个任务中,我们要等待30秒,然后才

前端开发人员最困扰的事情有哪些?

前端和后端开发之间的界线正在发生变化。有一些常见的错误会导致前端开发人员增加工作量、浪费时间,本文将介绍一些常见的错误以及如何避免这些错误。公司向他们的开发人员和程序员提出更多的要求,让他们完成与自己

一位从卖猪肉转行到前端开发小哥的自我救赎

一位曾经卖过猪肉的前端小哥自我救赎之路来自微信公众号:前端巅峰  的交流群真实采访花名:**郑伊健**一、你为什么要给自己取一个郑伊健的花名,有什么特殊含义特殊含义倒是没有,取这个花名,只是因为觉得郑

【译】前端开发不是一个亟待解决的问题

原文地址:Front-enddevelopmentisnotaproblemtobesolved原文作者:RobinRendle本文永久链接:https://segmentfault.com/a/11

喊话 JavaScript 开发者:玩 DOM 也要专业范儿

别再害怕DOM了,让我们充分挖掘DOM的潜力,你会真的爱上它。 2008年,当我刚成为一名专业Web开发人员参加工作时,我了解一些HTML、CSS和PHP的知识。那时我也在学习JavaScript

JavaScript 的数据结构和算法

现在有个还不是好的项目,未来会成为好的项目的项目想介绍给大家。传送门https://github.com/MasterShu/JavaScript-Da...这个是本人在维护的一个项目。主要是使用Ja

JavaScript 安全知识: CORS 简明教程

概述浏览器会强制同源策略以禁止不同源的网站获得响应; 『同源策略』不会阻止对其他来源的请求,但是会禁用JavaScript对响应内容的读取。 -CORS标头允许访问跨域响应。 -CORS与凭证一起需要

一起来学 TypeScript

鉴于JavaScript社区正式更名为F2E前端,我就大胆的把我另外一个项目也放上来。😄这个项目是关于TypeScript,是个人记录TypeScript的学习历程以及各个常用库的TypeScript

javascript如何判断是不是整数?

方式一、使用取余运算符判断任何整数都会被1整除,即余数是0。利用这个规则来判断是否是整数。functionisInteger(obj){ returnobj%1===0 } isInteger(3);

JavaScript闭包基础指南

闭包是函数创建时范围内所有变量的集合。要使用闭包,请在另一个称为嵌套函数的函数内创建一个函数。内部函数将有权访问外部函数范围中的变量(Closure有助于访问外部函数范围),即使在返回外部函数之后也是

先学php还是javascript?

javascript是前台的东西,PHP是后台的东西,两者先学谁都是一样的。两者之间没有啥实质性的必然联系。Javascript就是浏览器执行的脚本语言,控制页面内容。php就是服务器端执行的语言,读

深入了解JavaScript async/await !

Asyncfunctions让我们以async这个关键字开始。它可以被放置在任何函数前面,像下面这样:asyncfunctionf(){ return1; }在函数前面的「async」这个单词表达了一

JavaScript中对“this”的简单理解

1.this的奥秘很多时候,JS中的this对于咱们的初学者很容易产生困惑不解。this的功能很强大,但需要一定付出才能慢慢理解它。对Java、PHP或其他标准语言来看,this表示类方法中当前对象的

JavaScript中的强制类型转换

JavaScriptprimitives(原语)JavaScript建立在一系列基本单元之上。你应该对其中的一些已经很熟悉了,比如字符串和数字:vargreet="Hello";varyear=89;

JavaScript基础之 DOM简介

JavascriptDOM(文档对象模型)是一个允许开发人员操纵页面内容、结构和风格的接口。在本文中,我们将理解什么是DOM以及如何用Javascript去操作它。本文还可以作为基本DOM操作的参考。

JavaScript中的Infinity(无穷)

Infinity(无穷)在JS中是一个特殊的数字,它的特性是:它比任何有限的数字都大,如果不知道Infinity,我们在一些运算操作遇到时,就会觉得很有意思。现在我们来看看JS中的Infinity属性

JavaScript 变量提升(Hoisting)

'提升'是每个JS开发人员都听说过的一个术语,如果你刚接触JS,可能会遇到一些“怪异”的行为,其中某些变量是随机undefined,会抛出ReferenceErrors异常等等。Hoisting通常被

不使用JavaScript创建常见UI元素功能

我们已经习惯于用JavaScript编写常见的UI元素功能(如手风琴、工具提示、文本截断等),但是随着HTML和CSS有了新的功能以及旧版浏览器不再受支持,我们越来越少使用JavaScript来创建U

javascript怎么清除CSS样式?

javascript怎么清除CSS样式?一、使用setAttribute方法清除样式dom结构helloworldjavascriptp.setAttribute('style','');二、使用re