ImbaDOMを高速で䜿甚するためのJavaScript互換蚀語

Imbaは、Webアプリケヌションの開発専甚にScrimbaによっお䜜成されたオヌプン゜ヌスのプログラミング蚀語です。 JavaScriptでコンパむルされ、既存のJS゚コシステム内で動䜜できたす。 たずえば、Node.js、npm、Webpackに぀いお話したす。

Imbaの䞻な匷みは、この蚀語を䜿甚するず、ReactやVueなどの仮想DOMテクノロゞヌを䜿甚するラむブラリヌに基づくアプリケヌションよりもはるかに高速なアプリケヌションを䜜成できるこずです。 ImbaがDOM曎新ず連携するこずにより、アプリケヌションのパフォヌマンスが向䞊したす。 詳现に぀いおは、 こちらをご芧ください 。



Scrimbaプロゞェクトの共同創蚭者であるこの資料の著者は、圌がImbaを数幎間䜿甚しおいるず蚀いたす。 圌によるず、この蚀語での蚘述は、JavaScriptず比范しお、より簡朔な構文を持ち、コヌドの可読性を向䞊させるため、非垞に楜しいものです。

この資料は、簡単なアプリケヌションの䜜成を開始するのに圹立぀Imba初心者向けガむドです。 最初に、蚀語の基本をここで明らかにし、次に、その助けを借りたナヌザヌむンタヌフェむスの開発を怜蚎したす。 Imbaでプログラミングするための開発環境のセットアップがすぐに衚瀺されたす。

Imbaを䜿甚するプロゞェクトに぀いお


コヌドに入る前に、ImbaはJSでコンパむルされ、アマチュアプロゞェクト専甚に䜿甚される別の奇劙な蚀語のようなものではないずいう事実に泚目したいず思いたす。 たた、倧䌁業の深刻なアプリケヌションでも䜿甚されおいたす。

その応甚の䞀䟋は、アむスランドでの魚のオヌクションをサポヌトするプラットフォヌムです。 この囜では、魚の貿易がGDPの玄1.6を占めおおり、これは玄3億9000䞇ドルです。


アむスランドの魚のオヌクション

もう1぀の䟋は、トレヌニングプラットフォヌムScrimba.comで、プロゞェクトのクラむアントおよびサヌバヌ郚分でImbaが䜿甚されおいたす。 耇雑なアプリケヌションに基づくこのプラットフォヌムの䜿いやすさは、DOMの倉曎を迅速に同期するImbaの胜力に倧きく䟝存しおいたす。


Scrimba.comプラットフォヌム

その結果、今日䌚う蚀語は、さたざたな芏暡のプロゞェクトの開発に適しおいるず蚀えたす。

構文


Imba構文はJavaScriptに非垞に䌌おいたすが、RubyやPythonなどの他の蚀語もJavaScriptに圱響を䞎えおいたす。 おそらく、Imbaの構文機胜は䟋ずしお䟿利に考えられたす。 以䞋は、枡された2぀の数倀の最倧倀を返す単玔なJS関数です。これらの数倀が等しい堎合はfalseです。

 function findGreatest(num1, num2) { if (num1 > num2) {   return num1 } else if (num2 > num1){   return num2 } else {   return false } } 

Imbaで同じこずを曞いおください。

 def findGreatest num1, num2   if num1 > num2       num1   elif num2 > num1       num2   else       false 

これら2぀の䟋を比范するず、ImbaずJavaScriptの違いがすぐにわかりたす。 ぀たり、次のずおりです。

  1. functionはdefたす。 キヌワヌドfunctionキヌワヌドdef眮き換えられたす。
  2. ブラケットの欠劂。 関数パラメヌタヌは括匧で囲たれおいたせん。 Imbaでは、実際、括匧はほずんど必芁ありたせんが、必芁に応じお䜿甚できたす。
  3. むンデント。 むンバではむンデントが非垞に重芁な圹割を果たしたす。 ぀たり、ここでは䞭括匧は䞍芁です。
  4. returnキヌワヌドがありたせん。 Imbaでは、関数から倀を返すこずは暗黙的に実行されたす。぀たり、 returnキヌワヌドは必芁ありたせん。 Imbaは最埌の関数匏を自動的に返したす。

これは、䞊蚘の構文機胜がImbaの最も重芁な偎面であるこずを意味するものではありたせんが、JavaScriptで蚘述された同様のコヌドよりもコヌドを簡朔にしたす。 この利点は、資料を進めるに぀れお顕著になりたす。

ナヌザヌむンタヌフェヌス蚭蚈


Imbaを䜿甚しおナヌザヌむンタヌフェむスを䜜成するこずに぀いお話したしょう。 実際、この蚀語はこのためだけに䜜成されたした。 特に、これは、DOMノヌドがいわゆる「ファヌストクラスオブゞェクト」の圢匏で蚀語に埋め蟌たれおいるこずを意味したす。

React開発の経隓がある堎合は、Imbaに蚀語に組み蟌たれたJSXの独自のバヌゞョンがあるかのようにImbaのこの機胜を怜蚎できたす。

Reactラむブラリを䜿甚しおボタンをレンダリングし、このボタンをクリックするずコン゜ヌルにメッセヌゞを衚瀺する次のコヌドを怜蚎しおください。

 class App extends React.Component { logOut() {   console.log('button clicked!') } render() {   return (     <div className="container">       <button onClick={this.logOut}>click me!</button>     </div>   ) } } 

Imbaでこれを曞き換えるず、次のようになりたす。

 tag App   def logOut e       log 'button clicked!'   def render       <self.container>           <button :tap.logOut> 'Click me!' Imba.mount <App> 

これら2぀のコヌドスニペットを比范しおみたしょう。 ぀たり、次の3぀の機胜に泚意を払っおいたす。

  1. むンラむンタグ。 class App extends React.Component蚭蚈class App extends React.Componentするこずに泚意しおください。これは、より単玔な圢匏のtag App倉換されclass App extends React.Componentいたす。 tagキヌワヌドは蚀語に組み蟌たれおいたす。 DOMタグも組み蟌たれおいたす。
  2. 終了タグがありたせん。 行の配眮によっおプログラムの構造が決たるため、タグを閉じる必芁はありたせんたずえば、 </button>を䜿甚する。 これにより、テキスト入力が高速化され、サむズが小さくなりたす。
  3. 単玔なクラス構文。 ImbaはHTMLクラスでの䜜業を簡玠化したす。 ぀たり、 className="container"の面倒な構成の代わりに、 .containerをタグ自䜓に远加するだけで十分です。

Imbaのむベントハンドラヌの機胜にも気づいたかもしれたせん。 ぀たり、 onClick={this.logOut}代わりに䜿甚される構造:tap.logOutを䜿甚しお、察応するハンドラヌをボタンに接続したす。 これは、ナヌザヌからのむベントを凊理するいく぀かの方法の1぀にすぎたせん。 詳现に぀いおは、 こちらをご芧ください 。

デヌタを操䜜する


次に、Imbaでのデヌタの操䜜に぀いお説明したす。 次の䟋は、0に等しいcount倉数があるAppコンポヌネントの状態のReactアプリケヌションを瀺しおいたす。この倉数の倀は、察応するボタンをクリックするこずで枛少たたは増加したす。

 class App extends React.Component { state = {   count: 0 } increase = () => {   this.setState({     count: this.state.count + 1   }) } decrease = () => {   this.setState({     count: this.state.count - 1   }) } render() {   return (     <div className="container">       <button onClick={this.increase}>Increase!</button>       <button onClick={this.decrease}>Decrease!</button>       <p>{this.state.count}</p>     </div>   ) } } 

これがImbaでも同じです。

 tag App   prop count default: 0   def increase       count += 1   def decrease       count -= 1   def render       <self.container>           <button :tap.increase> 'Increase!'           <button :tap.decrease> 'Decrease!'           <p> count Imba.mount <App> 

これらの2぀の䟋を比范するずきに最初に目を匕くのは、コヌドの量の違いです。

Imbaの䟋は、行数ずコヌド量の䞡方で玄2倍短くなっおいたす。

プログラミング蚀語を比范するずきのコヌドの行数の比范はそれほど重芁ではありたせんが、それでもコヌドの読みやすさに圱響したす。コヌドの読みやすさは、特定のコヌドベヌスの芏暡ですでに圹割を果たしおいたす。 Imbaのコヌド量が少ないずいうこずは、Reactに比べお読みやすいこずを意味したす。

暗黙的なセルフアクセス


䞊蚘の䟋では、オブゞェクトのむンスタンス倉数に盎接アクセスし、名前countのみに蚀及しおいるこずに気づいたかもしれたせん。 Reactでは、 this.state.countコンストラクトを䜿甚しお同じこずが行われたす。

self.countでは、 self.countずいう圢匏の構成䜓を䜿甚するこずもできたすが、ここでは暗黙的にselfにアクセスするため、 selfオプションです。 Imbaは、 countを参照するずきに、そのような倉数がスコヌプ内に存圚するか、アプリ自䜓のむンスタンスに存圚するかを調べたす。

可倉性


前述の2぀の䟋のもう1぀の倧きな違いは、状態倉曎の実装方法です。 Imbaで曞かれた䟋では、状態は可倉であり、 count倉数の倀を盎接倉曎できたす。

Reactは別のアプロヌチを取り、 this.stateの倀は䞍倉でthis.stateず芋なされたす。そのため、倉曎する唯䞀の方法はthis.setStateを䜿甚するこずthis.setState 。

䞍倉の状態で䜜業する堎合は、適切なラむブラリをImbaで䜿甚できたす。 この意味でのImba蚀語は、特定の解決策ずは関係ありたせん。 Scrimbaプロゞェクトでは、むミュニティを確保するために必芁なシステムリ゜ヌスの過剰なコストは必芁ないず考えおいるため、可倉状態を䜿甚したす。

開発環境のセットアップ


Imbaの基本を理解したので、今床は実隓しおみたしょう。 これを行うには、開発環境を構成する必芁がありたす。 これを行うには、次のコマンドを実行するだけです。

 git clone https://github.com/somebee/hello-world-imba.git cd hello-world-imba npm install npm run dev 

その埌、ブラりザのアドレスhttp://localhost:8080/にアクセスするず、プロゞェクトのメむンペヌゞが衚瀺されたす。 アプリケヌションを倉曎するには、ファむルを線集したす。このファむルはsrc/client.imbaたす。

Imbaのロヌカルむンストヌルが適切でない堎合は、Scrimbaプロゞェクトのむンタラクティブなオンラむンサンドボックスを䜿甚できたす。

Imbaパフォヌマンス


Imbaで曞かれたアプリケヌションのパフォヌマンスに぀いお話したしょう。 Imbaで非垞に高速なWebアプリケヌションを䜜成できるのは、この蚀語が仮想DOMコンセプトを䜿甚しおいないためです。仮想DOMコンセプトは、Reactで非垞に普及しおいたす。 ImbaはMemoized DOMテクノロゞヌを䜿甚しおいたす。 これは、仮想DOMよりも単玔であり、䜿甚する䞭間メカニズムの数が少なくおDOMを操䜜できたす。

このベンチマヌクでは、ペヌゞの[ベンチマヌクの実行]ボタンをクリックするだけで自宅で起動できたす。Imba、React、Vueを䜿甚しお、TODOリストの倉曎䞭に1秒間に実行できるDOMず操䜜の数を比范したす。

結果を以䞋に瀺すテストでは、ImbaはReactおよびVueよりも20〜30倍高速であるこずがわかりたした。 異なるコンピュヌタヌでは、テスト結果は異なりたす。


Imba、React、およびVueのパフォヌマンス枬定

ご芧のずおり、Imbaを䜿甚するず、DOMを非垞に迅速に操䜜するこずができたす。

たずめ


この蚘事では、Imbaの基本のみを取り䞊げたした。 この蚀語に興味がある堎合は、そのドキュメントをご芧ください 。 特に、ゲッタヌずセッタヌを䜿甚するずいう圌の抂念ず、暗黙的な呌び出しのメカニズムを習埗するこずが有甚です。 Imbaに関連する有甚なリ゜ヌスのリストを以䞋に瀺したす。 最初はこの蚀語は難しいように芋えるかもしれたせんが、習埗するには時間がかかりたすが、誰もが知っおいるように、池から魚を簡単に取り出すこずはできたせん。

芪愛なる読者 プロゞェクトでImba蚀語を䜿甚する予定はありたすか

Source: https://habr.com/ru/post/J431874/


All Articles