Alexey Grachev: Pergi Frontend

Pertemuan Kyiv Go Mei 2018:

Alexey Grachev: Pergi Frontend

Terkemuka: - Halo semua! Terima kasih telah berada di sini! Hari ini kami memiliki dua pembicara resmi - Lyosha dan Vanya. Akan ada dua lagi jika kita punya cukup waktu. Pembicara pertama adalah Alexei Grachev, dia akan bercerita tentang GopherJS.

Alexei Grachev (selanjutnya – AG): – Saya seorang pengembang Go, dan saya menulis layanan web di Go. Terkadang Anda harus berurusan dengan frontend, terkadang Anda harus melakukannya secara manual. Saya ingin berbicara tentang pengalaman dan penelitian saya tentang Go di frontend.

Legendanya begini: pertama kita akan membahas alasan kita ingin menjalankan Go di frontend, lalu kita akan membahas cara melakukannya. Ada dua cara - Majelis Web dan GopherJS. Mari kita lihat status solusi ini dan apa yang bisa dilakukan.

Apa yang salah dengan bagian depannya?

Apakah semua orang setuju bahwa semuanya baik-baik saja dengan frontend?

Alexey Grachev: Pergi Frontend

Apakah tesnya tidak cukup? Pembangunan lambat? Ekosistem? Bagus.

Mengenai frontend, saya menyukai kutipan yang dikatakan salah satu frontend developer dalam bukunya:

Alexey Grachev: Pergi Frontend

Javascript tidak memiliki sistem tipe. Sekarang saya akan menyebutkan masalah-masalah yang saya temui selama bekerja dan menjelaskan bagaimana solusinya.

Sistem tipe secara umum hampir tidak bisa disebut sistem tipe dalam Javasript - ada garis yang menunjukkan tipe suatu objek, tetapi sebenarnya ini tidak ada hubungannya dengan tipe. Masalah ini diselesaikan di TypeScript (tambahan untuk Javasript) dan Flow (pemeriksa tipe statis dalam Javascript). Sebenarnya frontend sudah mencapai titik penyelesaian masalah sistem tipe buruk di Javascript.

Alexey Grachev: Pergi Frontend

Tidak ada perpustakaan standar di browser - ada beberapa objek bawaan dan fungsi "ajaib" di browser. Namun dalam Javascript tidak ada perpustakaan standar seperti itu. Masalah ini telah diselesaikan satu kali oleh jQuery (semua orang menggunakan jQuery dengan semua prototipe, pembantu, fungsi yang diperlukan agar berfungsi). Sekarang semua orang menggunakan Lodash:

Alexey Grachev: Pergi Frontend

Panggilan balik neraka. Saya rasa semua orang melihat kode Javascript sekitar 5 tahun yang lalu, dan itu tampak seperti “mie” dari kerumitan panggilan balik yang luar biasa. Sekarang masalah ini telah terpecahkan (dengan dirilisnya ES-15 atau ES-16), janji-janji telah ditambahkan ke Javascript dan semua orang dapat bernapas lega untuk sementara waktu.

Alexey Grachev: Pergi Frontend

Sampai neraka Promice tiba... Saya tidak tahu bagaimana industri front-end mengelolanya, tetapi mereka selalu mengarahkan diri mereka ke hutan yang aneh. Kami juga berhasil menepati janji. Kemudian kami memecahkan masalah ini dengan menambahkan primitif baru - async/menunggu:

Alexey Grachev: Pergi Frontend

Masalah dengan asinkroni terpecahkan. Async/await adalah primitif yang cukup populer dalam berbagai bahasa. Python dan lainnya memiliki pendekatan ini - ini cukup bagus. Masalah terpecahkan.

Masalah apa yang belum terselesaikan? Kompleksitas kerangka kerja, kompleksitas ekosistem dan program itu sendiri meningkat secara eksponensial.

Alexey Grachev: Pergi Frontend

  • Sintaks Javascript agak aneh. Kita semua tahu masalah menambahkan array dan objek serta lelucon lainnya.
  • Javascript adalah multi-paradigma. Ini adalah sistem yang sangat mendesak saat ini ketika ekosistemnya sangat besar:
    • setiap orang menulis dengan gaya yang berbeda - beberapa menulis secara struktural, beberapa menulis secara fungsional, pengembang yang berbeda menulis dengan cara yang berbeda;
    • dari paket yang berbeda, paradigma yang berbeda ketika Anda menggunakan paket yang berbeda;
    • ada banyak "kesenangan" dengan pemrograman fungsional di Javasript - perpustakaan rambda muncul dan sekarang tidak ada yang bisa membaca program yang ditulis di perpustakaan ini.

  • Semua ini memberikan dampak besar pada ekosistem dan telah berkembang secara luar biasa. Paket-paket tersebut tidak kompatibel satu sama lain: ada yang berdasarkan janji, ada yang berdasarkan async/menunggu, ada pula yang berdasarkan callback. Mereka juga menulis dalam paradigma yang berbeda!
  • Hal ini membuat proyek sulit untuk dipertahankan. Sulit menemukan bug jika Anda tidak dapat membaca kodenya.

Apa itu Majelis Web?

Orang-orang pemberani dari Mozilla Foundation dan sejumlah perusahaan lain datang dengan konsep Web Majelis. Apa ini?

Alexey Grachev: Pergi Frontend

  • Ini adalah mesin virtual yang terpasang di browser yang mendukung format biner.
  • Program biner sampai di sana dan dijalankan hampir secara asli, artinya browser tidak perlu mengurai semua “mie” kode javascript setiap saat.
  • Semua browser telah menyatakan dukungan.
  • Karena ini adalah bytecode, Anda dapat menulis kompiler untuk bahasa apa pun.
  • Empat browser utama sudah dikirimkan dengan dukungan Web Assembly.
  • Kami mengharapkan dukungan asli di Go segera. Arsitektur baru ini telah ditambahkan: GOARCH=wasm GOOS=js (segera). Sejauh yang saya pahami, itu tidak berfungsi, tetapi ada pernyataan bahwa itu pasti akan ada di Go.

Apa yang harus dilakukan sekarang? GopherJS

Meskipun kami tidak memiliki dukungan untuk Web Majelis, ada transpiler seperti GopherJS.

Alexey Grachev: Pergi Frontend

  • Kode Go diubah menjadi Javascript “murni”.
  • Berjalan di semua browser - tidak ada fitur baru yang hanya didukung oleh browser modern (ini adalah Vanilla JS, yang berjalan di apa saja).
  • Ada dukungan untuk hampir semua yang dimiliki Go, termasuk goroutine dan saluran... segala sesuatu yang sangat kita sukai dan ketahui.
  • Hampir seluruh pustaka standar didukung, kecuali paket-paket yang tidak masuk akal untuk didukung di browser: syscall, interaksi net (ada klien net/http, tetapi tidak ada server, dan klien ditiru melalui XMLHttpRequest). Secara umum, seluruh perpustakaan standar tersedia - ini dia di browser, ini stdlib Go, yang kami sukai.
  • Seluruh ekosistem paket di Go, semua solusi pihak ketiga (templat, dll.) dapat dikompilasi menggunakan GopherJS dan dijalankan di browser.

GopherJS sangat mudah didapat - hanya paket Go biasa. Kami pergi, dan kami memiliki perintah GopherJS untuk membangun aplikasi:

Alexey Grachev: Pergi Frontend

Ini adalah dunia halo yang kecil...

Alexey Grachev: Pergi Frontend

...Program Go reguler, paket fmt perpustakaan standar reguler, dan Binding Js untuk mencapai API browser. Println pada akhirnya akan dikonversi ke log konsol dan browser akan menulis “Halo pedagang kaki lima”! Sesederhana itu: kami membuat GopherJS – kami meluncurkannya di browser – semuanya berfungsi!

Apa yang kamu punya saat ini? Binding

Alexey Grachev: Pergi Frontend

Ada binding untuk semua kerangka js populer:

  • JQuery;
  • Angular.js;
  • D3.js untuk merencanakan dan bekerja dengan data besar;
  • Bereaksi.js;
  • VueJS;
  • bahkan ada dukungan untuk Electron (yaitu, kita sudah dapat menulis aplikasi desktop di Electron);
  • dan yang paling lucu adalah WebGL (kita bisa membuat aplikasi grafis lengkap, termasuk game dengan grafis 3D, musik, dan segala fasilitasnya);
  • dan banyak ikatan lainnya ke semua kerangka kerja dan perpustakaan javascript populer.

Kerangka

  1. Ada kerangka web yang telah dikembangkan khusus untuk GopherJS - Vecty. Ini adalah analog lengkap dari React.js, tetapi hanya dikembangkan di Go, dengan spesifikasi GopherJS.
  2. Ada tas permainan (kejutan!). Saya menemukan dua yang paling populer:
    • Engo;
    • Ebiten.

Saya akan menunjukkan kepada Anda beberapa contoh tampilannya dan apa yang sudah dapat Anda tulis di Go:

Alexey Grachev: Pergi Frontend

Atau opsi ini (saya tidak bisa menemukan penembak 3D, tapi mungkin ada):

Alexey Grachev: Pergi Frontend

Apa yang saya tawarkan?

Sekarang industri front-end berada dalam kondisi sedemikian rupa sehingga semua bahasa yang sebelumnya berasal dari Javascript akan bergegas ke sana. Sekarang semuanya akan dikompilasi menjadi “Web Assemblies”. Apa yang kita butuhkan untuk mengambil tempat yang selayaknya kita sebagai Gophers?

Alexey Grachev: Pergi Frontend

Go secara tradisional berasumsi bahwa ini adalah bahasa pemrograman Sistem, dan praktis tidak ada perpustakaan untuk bekerja dengan UI. Ada sesuatu, tapi setengah terbengkalai, setengah tidak berfungsi.

Dan sekarang adalah kesempatan bagus untuk membuat perpustakaan UI di Go yang dapat berjalan di GopherJS! Anda akhirnya bisa menulis kerangka kerja Anda sendiri! Inilah saatnya Anda dapat menulis sebuah kerangka kerja, dan kerangka tersebut akan menjadi salah satu yang pertama dan diadopsi lebih awal, dan Anda akan menjadi bintang (jika kerangka tersebut bagus).

Anda dapat mengadaptasi banyak paket berbeda yang sudah ada di ekosistem Go dengan spesifikasi browser (misalnya, mesin Template). Mereka sudah berfungsi, Anda dapat membuat pengikatan yang nyaman sehingga Anda dapat dengan mudah merender konten langsung di browser. Selain itu, Anda dapat membuat, misalnya, layanan yang dapat merender hal yang sama di server dan di front-end, menggunakan kode yang sama - semua yang disukai pengembang front-end (hanya sekarang di Go).

Anda bisa menulis permainan! Hanya untuk bersenang-senang…

Itu saja yang ingin saya katakan.

Alexey Grachev: Pergi Frontend

pertanyaan

Pertanyaan (selanjutnya disebut Q): – Apakah saya menulis dalam Go atau Js?

AG: – Anda menulis rutinitas, saluran, struktur, menyematkan – semuanya di Go... Anda berlangganan suatu acara, meneruskan fungsi di sana.

Dalam: – Jadi saya menulis dalam Js “telanjang”?

AG: – Tidak, Anda menulis seolah-olah di Go dan terhubung ke API browser (API tidak berubah). Anda dapat menulis ikatan Anda sendiri sehingga pesan terkirim ke saluran - itu tidak sulit.

Dalam: – Bagaimana dengan seluler?

AG: – Saya pasti melihat: ada binding untuk patch Cordova yang dijalankan Js. Di React Native - saya tidak tahu; mungkin ada, mungkin tidak (saya tidak terlalu tertarik). Mesin permainan N-go mendukung kedua aplikasi seluler - baik iOS dan Android.

Dalam: – Pertanyaan tentang Perakitan Web. Semakin banyak ruang yang digunakan, meskipun ada kompresi dan "zip"... Bukankah kita akan semakin mematikan dunia front-end dengan cara ini?

AG: – Majelis Web adalah format biner, dan biner secara default tidak dapat berada di rilis final lebih dari teks... Anda tertarik pada runtime, tetapi ini sama dengan menyeret keluar pustaka Javascript standar ketika tidak ada, jadi kami gunakan beberapa Lodash. Saya tidak tahu berapa banyak yang dibutuhkan Lodash.

Dalam: – Jelas kurang dari runtime...

AG: – Dalam Javascript “murni”?

Dalam: - Ya. Kami kompres dulu sebelum dikirim..

AG: – Tapi ini teks... Secara umum, satu megabyte sepertinya banyak, tapi itu saja (Anda memiliki seluruh runtime). Selanjutnya, Anda menulis logika bisnis Anda sendiri, yang akan meningkatkan biner Anda sebesar 1%. Sejauh ini saya tidak melihat ini mematikan frontend. Selain itu, Majelis Web akan bekerja lebih cepat daripada Javascript karena alasan yang jelas - tidak perlu diurai.

Dalam: – Ini masih merupakan poin kontroversial... Belum ada referensi penerapan “Vasma” (Perakitan Web) sehingga orang dapat menilai dengan jelas. Secara konseptual, ya: kita semua memahami bahwa biner seharusnya lebih cepat, namun implementasi V8 yang sama saat ini sangat efisien.

AG: - Ya.

Dalam: – Kompilasi di sana bekerja sangat keren dan bukan fakta bahwa akan ada keuntungan besar.

AG: – Majelis Web juga dibuat oleh orang-orang besar.

Dalam: – Tampaknya bagi saya masih sulit untuk menilai Majelis Web. Perbincangan sudah berlangsung bertahun-tahun, namun hanya sedikit pencapaian nyata yang bisa dirasakan.

AG: - Mungkin. Kita lihat saja nanti.

Dalam: – Kami tidak memiliki masalah di bagian belakang... Mungkin sebaiknya kami membiarkan masalah ini di bagian depan? Mengapa pergi ke sana?

AG: – Kita harus mempertahankan staf pekerja garis depan.

Beberapa iklan 🙂

Terima kasih untuk tetap bersama kami. Apakah Anda menyukai artikel kami? Ingin melihat konten yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikan kepada teman, cloud VPS untuk pengembang mulai $4.99, analog unik dari server level awal, yang kami temukan untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps dari $19 atau bagaimana cara berbagi server? (tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).

Dell R730xd 2x lebih murah di pusat data Equinix Tier IV di Amsterdam? Hanya disini 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV dari $199 di Belanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mulai $99! Membaca tentang Bagaimana membangun infrastruktur corp. kelas dengan penggunaan server Dell R730xd E5-2650 v4 senilai 9000 euro untuk satu sen?

Sumber: www.habr.com

Tambah komentar