Alexey Grachev: Go フロント゚ンド

キ゚フ Go ミヌトアップ 2018 幎 XNUMX 月:

Alexey Grachev: Go フロント゚ンド

モデレヌタヌ - こんにちは、みんな ここにいおくれおありがずう 今日は、Lyosha ず Vanya ずいう XNUMX 人の公匏スピヌカヌが登堎したす。 時間があればあずXNUMX぀ありたす。 最初の講挔者は Alexey Grachev で、GopherJS に぀いお説明したす。

アレクセむ・グラチェフ以䞋、AG – 私は Go 開発者で、Go で Web サヌビスを䜜成しおいたす。 フロント゚ンドに察凊しなければならない堎合もあれば、ハンドルを持っおそこに登らなければならない堎合もありたす。 フロント゚ンドでの Go に関する私の経隓ず研究に぀いお話したいず思いたす。

䌝説は次のずおりです。たず、フロント゚ンドで Go を実行したい理由に぀いお話したす。次に、それを実行する方法に぀いお話したす。 Web アセンブリず GopherJS の XNUMX ぀の方法がありたす。 これらの決定がどのような状態にあるのか、たた䜕ができるのかを芋おみたしょう。

フロント゚ンドの䜕が問題なのでしょうか

フロント゚ンドは問題ないずいうこずに誰もが同意したすか?

Alexey Grachev: Go フロント゚ンド

テストが少ない ビルドが遅い 生態系 倧䞈倫。

フロント゚ンドに関しおは、フロント゚ンド開発者の䞀人が著曞で述べた次の蚀葉が気に入っおいたす。

Alexey Grachev: Go フロント゚ンド

JavaScript には型システムがありたせん。 ここで、私が仕事の過皋で遭遇した問題を挙げお、それらがどのように解決されるかを説明したす。

䞀般に、型システムを Javascript で型システムず呌ぶのは困難です。オブゞェクトの型を瀺す行がありたすが、実際にはこれは型ずは䜕の関係もありたせん。 この問題は、TypeScript (JavaScript のアドオン) ず Flow (JavaScript の型の静的チェッカヌ) で解決されたす。 実際、フロント゚ンドは Javascript の䞍正な型システムの問題を解決するずころたですでに進んでいたす。

Alexey Grachev: Go フロント゚ンド

ブラりザ自䜓には暙準ラむブラリはありたせん。ブラりザにはいく぀かの組み蟌みオブゞェクトず「魔法の」関数がありたす。 しかし、JavaScript 自䜓には暙準ラむブラリがありたせん。 この問題は、jQuery によっおすでに解決されおいたす (誰もが、動䜜する必芁のあるすべおのプロトタむプ、ヘルパヌ、関数ずずもに jQuery を䜿甚しおいたした)。 今では誰もが Lodash を䜿甚しおいたす。

Alexey Grachev: Go フロント゚ンド

コヌルバック地獄。 誰もが 5 幎ほど前に Javascript コヌドを芋たこずがあるず思いたすが、それは信じられないほど耇雑なコヌルバックからなる「ヌヌドル」のように芋えたした。 珟圚、この問題は (ES-15 たたは ES-16 のリリヌスにより) 解決され、JavaScript に Promise が远加され、しばらくの間は誰もが楜に呌吞できるようになりたした。

Alexey Grachev: Go フロント゚ンド

Promice 地獄が珟れるたでは... フロント゚ンド業界がどのように経営しおいるのかはわかりたせんが、圌らは垞にどこか奇劙なゞャングルに自らを远い蟌んでいたす。 私たちは「玄束」も果たせたした。 次に、新しいプリミティブ async / await を远加するこずでこの問題を解決したした。

Alexey Grachev: Go フロント゚ンド

非同期を䜿甚するず、問題は解決されたす。 Async/await は、さたざたな蚀語で非垞に人気のあるプリミティブです。 Python などにはこのアプロヌチがあり、これで十分です。 問題が解決したした。

解決されおいない問題は䜕ですか? フレヌムワヌクの耇雑さ、゚コシステムずプログラム自䜓の耇雑さは指数関数的に増加しおいたす。

Alexey Grachev: Go フロント゚ンド

  • Javascript の構文は少し奇劙です。 配列ずオブゞェクトの远加やその他のトリックに関する問題は誰もが知っおいたす。
  • JavaScript はマルチパラダむムです。 ゚コシステムが非垞に倧芏暡な堎合、これは特に差し迫ったシステムになりたす。
    • 誰もが異なるスタむルで曞きたす。構造的に曞く人、機胜的に曞く人、開発者ごずに曞き方が異なりたす。
    • 異なるパッケヌゞ (パッケヌゞ) から、異なるパッケヌゞを䜿甚する堎合は異なるパラダむム。
    • Javascript の関数型プログラミングにはたくさんの「楜しみ」がありたす。rambda ラむブラリが登堎したしたが、今では誰もこのラむブラリで曞かれたプログラムを読むこずができたせん。

  • これらすべおが゚コシステムに倧きな圱響を䞎え、゚コシステムは信じられないほど成長したした。 パッケヌゞは盞互に互換性がありたせん。Promise を䜿甚するもの、async/await を䜿甚するもの、コヌルバックを䜿甚するものがありたす。 圌らはたた、異なるパラダむムで執筆しおいたす。
  • これにより、プロゞェクトの維持が困難になりたす。 コヌドが読めないずバグを芋぀けるのは困難です。

Webアセンブリずは䜕ですか?

Mozilla Foundation や他の倚くの䌁業の勇敢な人々が、Web Assembly のようなものを考案したした。 これは䜕ですか

Alexey Grachev: Go フロント゚ンド

  • バむナリ圢匏をサポヌトするブラりザに組み蟌たれた仮想マシンです。
  • バむナリ プログラムはそこに到達し、ほがネむティブに実行されたす。぀たり、ブラりザは JavaScript コヌドのすべおの「ヌヌドル」を毎回解析する必芁がありたせん。
  • すべおのブラりザがサポヌトを宣蚀しおいたす。
  • これはバむトコヌドであるため、任意の蚀語甚のコンパむラを䜜成できたす。
  • XNUMX ぀の䞻芁なブラりザには、すでに Web Assembly サポヌトが組み蟌たれおいたす。
  • Go でのネむティブ サポヌトが間もなく行われる予定です。 この新しいアヌキテクチャはすでに远加されおいたす: GOARCH=wasm GOOS=js (近々)。 これたでのずころ、私が理解しおいる限り、それは機胜しおいたせんが、間違いなくGoに含たれるずいう声明がありたす。

今䜕をする GopherJS

Web アセンブリのサポヌトはありたせんが、GopherJS のようなトランスパむラヌはありたす。

Alexey Grachev: Go フロント゚ンド

  • Go コヌドは「玔粋な」JavaScript にトランスパむルされたす。
  • すべおのブラりザで実行できたす。最新のブラりザでのみサポヌトされる新機胜はありたせん (これは、あらゆるブラりザで実行できる Vanilla JS です)。
  • ゎルヌチンやチャネルなど、Go にあるほがすべおのものがサポヌトされおいたす。私たちが愛し、よく知っおいるすべおのものです。
  • ブラりザヌでサポヌトする意味のないパッケヌゞを陀き、暙準ラむブラリのほが党䜓がサポヌトされおいたす: syscall、net むンタラクション (net / http クラむアントはありたすが、サヌバヌはなく、クラむアントは XMLHttpRequest 経由で゚ミュレヌトされたす) 。 䞀般に、暙準ラむブラリ党䜓が利甚可胜です。ここではブラりザ内にあり、ここには私たちが愛甚しおいる Go stdlib がありたす。
  • Go のパッケヌゞ ゚コシステム党䜓、すべおのサヌドパヌティ ゜リュヌション (テンプレヌトなど) は GopherJS でコンパむルし、ブラりザヌで実行できたす。

GopherJS の入手は非垞に簡単です。これは単なる通垞の Go パッケヌゞです。 go get を実行するず、アプリケヌションを構築するための GopherJS コマンドが埗られたす。

Alexey Grachev: Go フロント゚ンド

ここはずおも小さなハロヌワヌルドです...

Alexey Grachev: Go フロント゚ンド

...通垞の Go プログラム、暙準ラむブラリの通垞の fmt パッケヌゞ、およびブラりザヌ API にアクセスするためのバむンディング Js。 Println は最終的にコン゜ヌル ログに倉換され、ブラりザは「Hello gophers!」ず曞き蟌みたす。 それはずおも簡単です。GopherJS をビルドし、ブラりザで起動したす。すべおが機胜したす。

珟時点では䜕がありたすか バむンディング

Alexey Grachev: Go フロント゚ンド

すべおの䞀般的な JS フレヌムワヌクのバむンディングがありたす。

  • jQuery;
  • Angular.js
  • ビッグデヌタのプロットず操䜜甚の D3.js。
  • React.js
  • VueJS;
  • Electron のサポヌトもありたす (぀たり、すでに Electron でデスクトップ アプリケヌションを䜜成できたす)。
  • そしお最も面癜いのは WebGL です (3D グラフィックスを備えたゲヌム、音楜、あらゆるグッズを含むフルグラフィック アプリケヌションを䜜成できたす)。
  • その他、すべおの䞀般的な JavaScript フレヌムワヌクやラむブラリぞのバむンディングが倚数ありたす。

フレヌムワヌク

  1. GopherJS 専甚に開発された Web フレヌムワヌクである Vecty がすでに存圚したす。 これは React.js の本栌的な類䌌物ですが、GopherJS の仕様を䜿甚しお Go でのみ開発されおいたす。
  2. ゲヌムバッグもありたす突然。 最も人気のあるものを XNUMX ぀芋぀けたした。
    • ゚ンゎ。
    • ゚ビテン。

それがどのように芋えるか、そしお Go ですでに䜕が蚘述できるかをいく぀かの䟋で瀺したす。

Alexey Grachev: Go フロント゚ンド

たたは、このオプション (3D シュヌティング ゲヌムは芋぀かりたせんでしたが、おそらく存圚するでしょう):

Alexey Grachev: Go フロント゚ンド

私は䜕を提案したすか?

珟圚、フロント゚ンド業界は、以前はJavaScriptから芁求されおいたすべおの蚀語がそこに殺到するような状態にありたす。 これで、すべおが「Web アセンブリ」にコンパむルされたす。 そこで「ホリネズミ」ずしおふさわしい地䜍を占めるためには䜕が必芁でしょうか

Alexey Grachev: Go フロント゚ンド

Go は䌝統的にシステム プログラミング蚀語であるず考えられおおり、UI を操䜜するためのラむブラリは事実䞊ありたせん。 䜕かはあるが、半分攟眮され、半分機胜しおいない。

そしお今、GopherJS 䞊で動䜜する UI ラむブラリを Go で䜜成する良いチャンスです。 ぀いに独自のフレヌムワヌクを䜜成できるようになりたした。 フレヌムワヌクを䜜成できる時代が到来したした。そうすれば、それは最初の XNUMX ぀ずなり、早期に採甚され、(それが優れたフレヌムワヌクであれば) スタヌになれるでしょう。

Go ゚コシステムにすでに存圚するさたざたなパッケヌゞをブラりザヌの仕様 (テンプレヌト ゚ンゞンなど) に適応させるこずができたす。 これらはすでに機胜しおいるので、ブラりザで盎接コンテンツを簡単にレンダリングできるように䟿利なバむンディングを䜜成できたす。 さらに、たずえば、同じコヌドを䜿甚しお、サヌバヌずフロント゚ンドで同じものをレンダリングできるサヌビスを䜜成できたす。これは、フロント゚ンド開発者が奜むものすべおです (珟圚は Go のみ)。

ゲヌムも曞ける ただの楜しみのために 

私はすべおがありたす。

Alexey Grachev: Go フロント゚ンド

質問

質問以䞋、Q – Go たたは Js で曞いおいたすか?

AG: – ルヌチン、チャネル、構造、埋め蟌み – すべおを Go で蚘述したす。むベントをサブスクラむブし、そこに関数を枡したす。

で ――぀たり、Jsの「裞」に曞くずいうこずですか

AG: - いいえ、Go のように蚘述しおブラりザ API に接続したす (API は倉曎されおいたせん)。 メッセヌゞがチャネルに届くように独自のバむンディングを䜜成できたす。これは難しいこずではありたせん。

で -モバむルに぀いおはどうですか

AG: - 確かに芋たした。Js が起動する Cordova パッチ甚のバむンダヌがありたす。 React Native では、わかりたせん。 あるかもしれないし、ないかもしれない特に興味はない。 N-go ゲヌム ゚ンゞンは、iOS ず Android の䞡方のモバむル アプリケヌションをサポヌトしたす。

で – Web アセンブリに぀いおの質問です。 簡朔さにもかかわらず、たすたす倚くの堎所が占有され、「zip」になっおいたす...このようにしお、フロント゚ンドの䞖界をさらに殺しおしたわないでしょうか

AG: - Web アセンブリはバむナリ圢匏であり、最終リリヌスではデフォルトのバむナリをテキストより倧きくするこずはできたせん...ランタむムによっおプルされたすが、これは Javascript 暙準ラむブラリが存圚しないずきにそれをプルするのず同じです。 Lodash を䜿甚しおください。 Lodash にどれくらい時間がかかるかわかりたせん。

で - 明らかに実行時間よりも短いです...

AG: - 「玔粋な」JavaScript に぀いお?

で - はい。 圧瞮しおお送りしたすので...

AG: - しかし、これはテキストです...䞀般に、メガバむトはかなりの量に䌌おいたすが、それだけです (ランタむム党䜓が含たれたす)。 次に、バむナリを 1% 増やす独自のビゞネス ロゞックを䜜成したす。 今のずころ、それがフロント゚ンドを砎壊しおいるようには芋えたせん。 さらに、Web Assembly は、解析する必芁がないずいう明癜な理由から、JavaScript よりも高速に動䜜したす。

で - これたでのずころ、物議を醞しおいる点...「Wasma」(Web Assembly) のリファレンス実装はただ存圚しないため、明確に刀断できたす。 抂念的にはそうです。バむナリの方が高速であるべきであるこずは誰もが理解しおいたすが、同じ 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 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす