阿列克谢·格拉切夫(Alexey Grachev):去前端

基辅去聚会2018年5月:



主持人: -大家好!感谢您来到这里!今天,我们有两位正式演讲者-Lesha和Vanya。如果我们有足够的时间,还会有两个。第一位发言者是Alexey Grachev,他将向我们介绍GopherJS。

Alexey Grachev(以下简称AG): -我是Go开发人员,我在Go上编写Web服务。有时您必须处理前端,有时您必须使用笔攀登那里。我想谈谈我的经验和研究。

传说是这样的:首先我们将讨论为什么要在前端运行Go,然后我们将讨论如何做到这一点。有两种方法-Web Assembly和GopherJS。让我们看看这些决策处于什么状态以及可以做什么。

前端有什么问题?


每个人都同意前端一切都很好吗?



有几项测试?组装慢吗?生态系统?好。

关于前端,我喜欢前端开发人员在他的书中所说的话:



Javascript中没有类型系统。现在,我将列出在工作过程中遇到的问题,并说明如何解决这些问题。

在Javasript中,通常很难将类型系统称为类型系统-有一些行指示对象的类型,但实际上,它与类型无关。此问题已在TypeScript(Javasript的附加组件)和Flow(Javascript中的静态检查器类型)中得到解决。实际上,前端已经解决了Java语言中不良类型系统问题的解决方案。



浏览器中没有这样的标准库-浏览器中有一些内置对象和“魔术”功能。但是我没有Javascript这样的标准库。 jQuery曾经解决了这个问题(每个人都将jQuery与所有需要的原型,助手和函数一起使用)。现在每个人都在使用Lodash:



回调地狱。我认为大约5年前每个人都看过Javascript代码,并且从令人难以置信的复杂回调中看起来像“面条”。现在已经解决了这个问题(随着ES-15或ES-16的发布),他们向Javascript添加了承诺,并且所有人在一段时间内都变得更加轻松。



直到Promice地狱到来...我不知道前端行业如何管理,但它们不断地将自己推向陌生的领域。他们还设法使“承诺”陷入困境。然后他们通过添加新的原语-async / await解决了这个问题:



异步解决了问题。异步/等待是不同语言中相当流行的原语。在“ Python”和其他版本中,有这样一种方法-足够好。问题已解决。

什么问题没有解决?呈指数级增长的框架的复杂性,生态系统和程序本身的复杂性。



  • Javasript语法有点奇怪。我们都知道添加数组和对象以及其他笑话的问题。
  • Javascript是多种范例。现在,当生态系统非常庞大时,这是一个特别紧急的系统:

    • 每个人都以不同的风格来写作-有人在结构上写东西,有人在功能上写东西,不同的开发人员写得不同;
    • 来自不同的程序包,使用不同的程序包时会有不同的范例;
    • Javasript中的函数式编程有很多“乐趣”-rambda库已经出现,现在没有人可以读取用该库编写的程序。

  • 这一切都对生态系统产生了巨大影响,并且它的发展令人难以置信。包彼此不兼容:有人承诺,有人异步/等待,有人回调。他们还用不同的范式写作!
  • 这使项目难以维护。如果您无法阅读代码,则很难找到错误。

什么是Web Assemly?


来自Mozilla基金会和其他几家公司的勇敢者提出了Web Assembly这样的东西。它是什么?



  • 这是内置于浏览器中的虚拟机,支持二进制格式。
  • 二进制程序可以到达那里,它们几乎是在本地执行的,也就是说,浏览器不需要每次都解析所有的javascript代码。
  • 所有浏览器都宣布支持。
  • 由于这是一个字节码,因此您可以编写任何语言的编译器。
  • Web Assembly支持已经提供了四种主要的浏览器。
  • 不久,我们正在等待Go的本地支持。已经添加了这样的新架构:GOARCH = wasm GOOS = js(很快)。到目前为止,据我了解,它没有功能,但是有声明说它肯定会出现在Go语言中。

现在做什么?Gopherjs


尽管我们没有Web程序集支持,但有一个转运器,例如GopherJS。



  • 将代码转译为纯Javascript。
  • – , ( Vanilla JS, ).
  • , Go, … – , .
  • , , : syscall, net- ( net/http-, , XMLHttpRequest). – , stdlib Go, .
  • Go, ( .) GopherJS .

GopherJS很容易获得-这是一个常规的Go软件包。我们开始使用,我们有GopherJS团队来构建应用程序:



这是一个很小的问候世界



……一个常规的Go程序,一个标准库的常规fmt包以及用于访问浏览器API的Binding Js。Println最终将转换为控制台日志,浏览器将写入“ Hello gophers”!就是这么简单:我们进行GopherJS构建-在浏览器中运行-一切正常!

目前有什么?绑定




所有流行的js框架都有活页夹:

  • jQuery查询
  • Angular.js;
  • D3.js用于图形化和处理大数据;
  • React.js;
  • VueJS;
  • 甚至还有Electron的支持(也就是说,我们现在可以在Electron上编写桌面应用程序);
  • 最有趣的是WebGL(我们可以制作全图形应用程序,包括具有3D图形,音乐和所有其他功能的游戏);
  • 以及所有流行的javascript框架和库的许多其他活页夹。

构架


  1. 已经有专门为GopherJS-Vecty开发的Web框架。这是React.js的完整类似物,但仅在Go上开发,具有GopherJS的细节。
  2. 有游戏包(突然之间!)。我找到了两个最受欢迎的:

    • 恩戈
    • 恩比

我将展示几个示例,说明外观以及您现在可以在Go上编写的内容:



或这样的选项(我没有找到3D射击游戏,但也许是):



我有什么建议?


现在前端行业处于这样一种状态,即所有在Java之前大喊大叫的语言都将涌向那里。现在,每个人都将被编译成Web程序集。我们需要在这里担任“地鼠”的位置吗?



Go传统上已经消失了,它是一种系统编程语言,实际上没有用于UI的库。那里有东西,但是一半被遗弃,一半没有功能。

这是一个使Go上可以在GopherJS上运行的UI库的好机会!您终于可以编写自己的框架了!可以编写框架的时机已经到来,它将成为第一个框架,并且会得到早期适应,并且您将成为明星(如果它是一个好的框架)。

您可以使Go生态系统中已经存在的许多不同软件包适应浏览器的特定要求(例如,模板引擎)。它们已经可以使用,您可以进行方便的绑定,以便可以轻松地直接在浏览器中呈现内容。另外,例如,您可以提供一种服务,该服务可以使用相同的代码在服务器和前端上呈现相同的内容-前端开发人员喜欢的一切(仅现在在Go上)。

你可以写游戏!只是为了好玩...

我有。



问题


问题(以下简称“问题”): -我用Go还是Js写作?

AG: -您在Go上编写例程,通道,结构,嵌入-就是这样...您订阅了一个事件,然后在其中传递了一个函数。

问: -也就是说,我写“裸” Js吗?

AG: -不,您编写时好像在Go上并连接到浏览器API(该API同时未更改)。您可以编写绑定,使消息进入频道-这很容易。

问: -手机呢?

AG: -我绝对知道:Js发行的Cordova补丁有活页夹。在React Native中,我不知道;也许有,也许没有(不是很感兴趣)。 N-go游戏引擎还支持移动应用程序-iO和Android。

在:-有关Web汇编的问题。尽管处在紧绷,“拉紧”的状态,但仍有越来越多的地方被占领……我们能以这种方式杀死前端世界吗?

AG: Web汇编是一种二进制格式,默认情况下二进制文件在最终发行版中的内容不能超过文本……运行时会拉扯您,但是它与标准Javascript库相同(如果不存在),因此我们使用一些总有一天罗沙特。我不知道Lodash需要多少钱。

问: -显着少于运行时...

AG: -使用“纯” Javascript?

问: -是的。我们先将其挤压后再发送...

AG:-但这是文本...总的来说,兆字节很多,仅此而已(您拥有所有的运行时)。接下来,编写您的业务逻辑,这将使二进制文件增加1%。直到我看到这杀死了前端。此外,由于明显的原因,Web Assembly的运行速度将比Javascript更快-无需进行解析。

问: -到目前为止,还是一个有争议的时刻……“ Vasma”(Web汇编)仍然没有参考实现,以便您可以清楚地判断。从概念上讲-是的:我们都知道二进制文件应该更快,但是相同V8的当前实现非常有效。

AG: -是的。

问: -那里的编译工作真的很酷,而且优势不大并不是事实。

AG: Web Assembly也做得很好。

在:-到目前为止,在我看来,判断Web Assembly仍然很困难。讨论已经进行了很多年,几乎没有什么真正的成就可感。

AG: -也许吧。我们会看到。

问: -我们在后端没有问题...也许将这些问题留在前端?为什么要爬那里?

AG: -我们必须保留前线人员。


一点广告:)


感谢您与我们在一起。你喜欢我们的文章吗?想看更多有趣的资料吗?通过下订单或向您的朋友推荐给开发人员的基于云的VPS,最低价格为4.99美元这是我们为您发明的入门级服务器 独特类似物:关于VPS(KVM)E5-2697 v3(6核)的全部真相10GB DDR4 480GB SSD 1Gbps从$ 19还是如何划分服务器?(RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。

阿姆斯特丹的Equinix Tier IV数据中心的戴尔R730xd便宜2倍吗?在荷兰2台Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100电视戴尔R420-2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB-$ 99起!阅读有关如何构建基础设施大厦的信息。使用Dell R730xd E5-2650 v4服务器花费一欧元9000欧元的c类?

All Articles