反応的に考える。 流星js

あなたが流星について聞いたことがないなら、あなたはJavaScriptの世界にまったく従わず、あなたはWebに興味がなく、どうやってここに来たのかは不明です。

だからそれ。







はじめに



Meteorは、昔からjsにとって最も珍しくて実験的なフレームワークの1つです。 これはMVCフレームワークではないと言う人は確かに正しいです。



著者がドキュメントページで強調しいる7つの原則の1つは、「Meteorはオープンソースであり、既存のオープンソースツールとフレームワークを置き換えるのではなく、統合する」というものです。 これにより、彼らは長い間解決されてきた問題を解決しようとしていないことをほのめかしています。 これと、すでに流星に統合されているいわゆる「スマートパッケージ」の1つがバックボーンであるという事実です。



meteorの主な違いは、ほとんどの既存のフレームワークのようにコードを構造化しようとせず、開発時に特定の考え方で刺激を与えようとすることです。



反応性



この言葉の背後には、アプローチの主なアイデアがあります。 歴史的に、従来のJavaScriptアプローチは非同期です。 ここには複雑なものは何もないという事実にもかかわらず、デバッグに問題がある場合があります。 コードが非同期に実行される場所と実行されない場所を理解できない場合があります。 CPH(地獄のコールバックピラミッド)、非同期スープなどの概念もあります。 それらはすべて、1つの関数ですべてを記述するのが非常に好きな人のコードを示すように設計されています。 非常に多くのフロー制御ライブラリ、さらにはjs方言がそれらのために考案されました。 私のお気に入りはflow-jsIcedCoffeeScriptです。



しかし、判明したように、これは問題を解決しませんが、このタオをマスターし、皮肉を込めて笑い、プログラマにプルリクエストをチェックして受け入れるというオファーでコードを送信するプログラマのみを許可します。



そして、ここで流星に戻ります。 meteor開始ページには、その主要な機能を説明する8つの項目があります。ライブページの更新(オンザフライのページ更新)と遅延補正(遅延補正)の2つに興味があります。 これら2つのプロパティを組み合わせることで、魔法をかけることができます。テンプレートの一部をデータにバインドします。 この場合、データが変更されるとすぐに、テンプレートの一部が再びレンダリングされ、クライアントはアプリケーションの現在の状態を受け取りますが、1行追加する必要はありません。



fragment = Meteor.render -> name = Session.get("name") or "Anonymous"; "<div>Hello, #{name}</div>" document.body.appendChild fragment Session.set("name", "Bob") #   !
      
      







例は、ドキュメントから直接取得されています。 要するに、次のことが起こります。documentFragmentを返す「マジック」メソッドMeteor.renderがあり、本文で使用されるデータが変更されたときに更新できます。 1つの条件:テンプレートを関連付けるデータ構造には、特定のインターフェイスを実装する必要があります。 Meteor.depsの説明と「機能するだけ」で詳細を読むことができます。



ワイヤ上のデータベース



さらに-さらに、データをテンプレートに関連付けるのはクールですが、クライアント上のデータ同期をサーバー上のデータと実装する一連のルーチンコードがまだあります。 そして、ここで、これらの男たちは有名に肩を切り落とし、私が彼らを崇拝していることに気づき、ほとんどのjsコミュニティは容赦なく腐敗を広めました。 どこでもデータベース。 クライアントからサーバーにデータを追加するプロセスを透過的にしました。 クライアント上のコレクションを変更すると、Webソケットを介してサーバーとすぐに同期されます。 次に、前の2つの原則が施行され、変更の影響を受けるすべてのお客様に最新のページが提供されます。 つまり、実際には、データベースとテンプレートを直接接続できます。 簡単です:



 Posts = new Meteor.Collection 'posts' if Meteor.isClient $(@el).html Meteor.render -> someTemplateFunction Posts.find({}).fetch()
      
      







コレクション宣言を含む行はクライアントとサーバーの両方で実行する必要がありますが、テンプレートエンジンはクライアントで実行する必要があることに注意してください。



しかし、セキュリティはどうですか? ほんの数日前、バージョン0.5がリリースされました。バージョン0.5には承認メカニズムが追加され、非常に簡単に機能します(実際、これらの機能はかなり長い間authブランチで利用できました)。



 Posts.allow insert: -> false update: -> false remove: -> false fetch: -> true
      
      







Postsコレクションでの選択以外の操作は禁止されています。 詳細は、 ドキュメントまたはgithubで見つけることができます。



現時点では、大きなコレクションには問題があります。それらを同期するプロセスには多くの時間とメモリが必要です。 現在、これらの問題は、たとえばここで解決されています



その結果、meteorを使用すると、最初はデータとその変更に焦点を当てたコードを作成できます。 情報の転送や、サーバーでの変更後にhtmlを最新の状態に保つ方法について考える必要はなくなりました。



1つの小さなストロークを追加し、最初に作成するすべてのコードがサーバーとクライアントで実行される、つまり、データ構造の定義を1回記述するだけで、どこでも同じになるということです。 そして、 ご存知のように 、「悪いプログラマーはコードを心配しています。 優れたプログラマーは、データ構造とその関係を心配しています。」



クライアント部分のみに適用されるコード、またはサーバー上でのみ実行されるコードは、それぞれクライアントフォルダーとサーバーフォルダーに格納する必要があります。 一般に、 設定より規約



展開しますか?



展開メカニズムはフレームワーク自体に組み込まれていますが、これまでのところ、meteor.comサブドメインにしか展開できません。これはもちろんクールではありません。 サーバーにすでにmeteorアプリケーションをデプロイしたい人のために、ドキュメントには詳細な手順が含まれています。 さて、このプロセスを自動化する小さなケーキタスクを作成しました。 サーバーに永久にインストールし、現在のプロジェクトにnpmパッケージNodeSSHとscpをインストールする必要があります。 後者をインストールするには、「プロジェクトフォルダー/ .meteor / local / build / server /」に移動し、「npm install NodeSSH scp」と入力します。 展開を開始するには、「cake deploy」と入力するだけです。



そして最後に



そして最後に、開発の利便性に関しては、すべての環境とすべてのフレームワークが流星の前に消えることを保証したいと思います。 これには2つの理由があります。実際に、meteorは、保存するファイルの場所と種類を制限しません。2つ目は「スマートパッケージ」です。 純粋なjsでのプログラミングと純粋なcssの使用の習慣を長い間失ってしまった人として、プロジェクトディレクトリで作成されたファイルはすべてページに正しく接続する必要があるという事実にtrし、コンソールで単純なコマンドを入力する場合:meteor add coffeescript、any作成した.coffeeファイルは自動的にjsにコンパイルされ、ページに追加されます。 少ない、スタイラス、サッシなどのことについても同じことが言えます。



jquery、フレームワーク言語などのさまざまなプラグインも簡単に追加できます。 「スマートパッケージ」の数が増えると、meteorはさらに便利になりますが、完全な1ページアプリを展開するために必要なものはほぼすべてあります。



コミュニティについては、喜んでいます。 chat.freenode.net #meteor ircチャンネルにアクセスすると、彼らは確かにあなたを助けるか、少なくとも助けようとします。 Githubは問題にすばやく反応し、議論は非常に活発です。



すべての賞賛にもかかわらず、流星はまだ深刻な生産ソリューションの準備ができていません。 また、著者が決定をmongoに強く結び付けたことは非常に悲しいことです。 そのmongoは悪いデータベースではありませんが、もはやファッショナブルではありません。 ある日、著者は、流星DBに依存しない(特定のデータベースに依存しない)ために、mongoに依存するコードをカットするのにかなりの時間を費やす必要があると予想しています。



しかし、ルールは私たちに書かれていなかったので、リスクを取り、次に小さなプロモーションサイトで4コアサーバーをロードする方法、バランスをとっていくつかの流星インスタンスを上げる方法、そして絶え間ない呼び出しで夢中にならない方法について話します動作しません。



PS CoffeeScriptのすべての例。 そして、あなたはここで私を見つけることができます: @thought_synchttp://github.com/Termina1



PPSまた、 EvilFaetonは写真が少ないと言ったので、ResumUPチームからの朝のボーナスがあります。







参照:



  1. github: https : //github.com/meteor/meteor
  2. stackoverflow: http : //stackoverflow.com/questions/tagged/meteor
  3. 天才を作る: http : //meteor.com/about/people





All Articles