基本的な紹介
重要な概念「テンプレート」から始めましょう。大まかに言えば、Web内のテンプレートは、データを入力した後にファイルを生成できるページです。厳密に言えば、テンプレートエンジンは、特定の形式でファイルを使用し、ページをコンパイルして生成するために提供されるデータを使用する必要があります。テンプレートは、ブラウザとサーバー側にそれぞれコンパイルされたフロントエンドテンプレート(EJSなど)およびバックエンドテンプレート(フリーマーカーなど)にほぼ分割されます。
その場の一部の学生はnode.jsについてあまり知らなかったので、ここにnode.jsの関連する知識の一部があります。公式ウェブサイトでは、イベント駆動型、非同期などの定義については説明しません。ここでは、node.jsの構造を説明するために、Pu Lingshuから写真を借ります。 Javaを理解すれば、JVMのJSバージョンとして理解できます。ブラウザには通常、レンダラーとJSスクリプトエンジンが含まれます。 Chromeブラウザーを例として使用すると、webkitカーネルレンダラーとV8スクリプトエンジンを使用し、node.jsはV8エンジンを使用します。要するに、ブラウザのF12デバッグツールと同様に、JSランニング環境ですが、node.jsにはdomとbomがありません。
この写真は、Node.js、優れたパッケージマネージャー、CNode Community、GitHubなどのNode.jsに関するいくつかの情報について説明します。
大企業は通常、テクノロジーの天気の景色です。たとえば、GoogleのAngularとFacebookのReactは現在非常に人気があります。ここには、3つの大企業のみがここにリストされています。言うまでもなく、Taobaoのミッドウェイアーキテクチャは、国内node.jsの先駆者であるPu -lingがTaobaoから来ています。 Qunarは、「QTX」と呼ばれる技術的なフレームワークも開発しました。 Yueyingが率いる75チームは、ES6/ES7 -Thinkjsに基づいてWebサーバーフレームワークを開始しました。当時、私たちのテクニカルディレクターは非常に楽観的でしたが、ES6を学ぶ時間がなく、プラグインが十分に金持ちではなかったため、私はまだより成熟した高速化を選択しました。
トピックに戻ると、このテーブルには、私がさらされた前端と背面の端を分離するための3つの開発方法がリストされています。 1つ目は、SEOに優しいJavaを使用する最も一般的なバックエンド言語テンプレートで、キャッシュの利用とブラウザのレンダリングの負担を減らすのが得意です。最大の問題は、テンプレートファイルの結合度が高すぎることです。誰も問題を解決したくありません。フロントエンドの担当者はデータを確認できず、バックエンドの担当者はページを理解していません。テンプレートファイルはホットポテトのようなものです。 2つ目は、Angularのフレームワーク(Angular命令はフロントエンドテンプレートと見なすことができる)とNginxの逆プロキシサーバーを使用して、フロントエンドとバックエンドを完全に分離し、Ajaxを介したデータとのみ相互作用するために、プロジェクトのモバイルターミナルの現在の実装ソリューションです。このソリューションは、前者の利点と短所の正反対です。フロントエンドテンプレートのパフォーマンスは、特にモバイルデバイス、特にローエンドモバイルデバイスでは常に問題です。最後の1つは、Node.jsをフロントエンドサーバーとして使用する新しいプロジェクトです。これは、フロントエンドの責任をブラウザからテンプレートレベルに分割し、上記のすべての問題を解決しますが、実際に新しい問題があり、この問題は後で分析されます。
もちろん、フルスタックの開発は、小さなプロジェクトにも非常に適しています。従来のJSP/PHP開発の場合、フルスタック開発の通信コストは低く、開発者は機能モジュール全体を簡単に理解できるため、製品設計の回復を改善できます。特に、JS言語に基づくフルスタック開発:現在出現している流星と平均技術により、フロントエンドとバックエンドの開発は、1つの言語で直接処理されます。 MongoDBを使用すると、ブラウザからデータベースへのデータが逃げることなく直接使用され、SQLを作成する必要はありません。これにより、開発コストが大幅に削減されます。
今回はnode.jsサーバーの構築に使用されるいくつかのプラグインがあります。有名なExpressである軽量Webサーバーフレームワークを紹介する必要はありません。 Express4はデフォルトであるため、ハンドルバーテンプレートエンジンを使用することも偶然です。ハンドルバーは、「弱い論理」のテンプレートエンジンであることに値します。テンプレートロジックの削減と、変数とページングのみを使用しようとすることを提唱しています。そのデザインコンセプトに基づいて、私は2つのヘルパーのみを拡張しました。特定の記事:https://yalishizhude.github.io/2016/01/22/handlebars/superagentは、Express4のためにまだ使用されています。テストコードはSuperTestを使用しているため、SuperTestはSuperAgentに基づいているため、SuperAgentはリクエストを転送および開始するために使用されます。 Superagentはまだ弱すぎて、長いつながりのために確立することはできません。まだリクエストプラグインをお勧めします。 Restfuleapiを紹介するものは何もありません。フロントエンドサーバーとブラウザ、フロントエンドサーバー、バックエンドサーバーはすべて、この仕様のセットを使用しています。基本的に、URLはリソース、追加、削除、変更、チェックを指し、特定のリクエスト方法が表現され、ステータスコードは結果などを表します。これは痛すぎるので、私はあきらめました。
開発プロセス
この共有が主にNode.jsをフロントエンドサーバーとして使用してフロントエンドの分離を実現する方法について語っている場合、Taobao Uedの記事を見てください。フロントエンドとバックエンドの分離に関する最大の問題は、通信コスト、特にインターフェイスの定義とデバッグを引き上げることです。上の図の従来の開発プロセスでは、インターフェイスの定義がインターフェイスサーバーに配置され、フロントエンドとバックエンドがインターフェイスドキュメント詐欺データに基づいてローカルデバッグを実施し、ジョイントデバッグを実行します。このリンクは、フロントエンドとバックエンドが戦い始めるときです。このパラメーターは間違っており、返品値が間違っています。要するに、それは時間の無駄です。次に、この問題が私たちのプロジェクトでどのように解決されているかを見てみましょう〜
フロントエンドとバックエンドに擦り切れたインターフェイスの問題は常に存在しています。保守派として、私は反復的な開発を信じているので、最初のステップはモックサーバーを追加することです。このサーバーの魔法は、インターフェイスドキュメントに基づいて偽のデータを自動的に生成し、インターフェイス、つまりAPI、およびフロントエンドの学生がテストのためにデータを殺す必要がなくなったことです。私がフロントエンドの開発者だと誰が言ったのか、誰がいませんか?まず第一に、私は自分の人々のことを考えています。もちろん、これはある程度フロントエンド開発にとってのみ有益です。また、バックエンドのインターフェイスとドキュメントが一貫性がなく、接続されている場合にも問題が発生します。何をするか?
私は誤ってLao Maの記事をBlade Masterのブログで見ました。重要な概念の1つは、二国間テストとも呼ばれる契約テストです。コアコンセプトは、リモートジョイントデバッグの問題を解決することです。フロントエンドとバックエンドのパラメーターを確認し、インターフェイスドキュメントに従って全員が開発する必要があります。それに触発されて、JSON-Schemaルールが追加され、HTTP要求のパラメーター検証を実現し、ルールに従わない人が変更します。
このRedmineは、私たちの初期のインターフェイスドキュメントマネージャーであり、記録と表示機能以外に他の機能はありません。
Swaggerは、世界で最も人気のあるインターフェイスドキュメントサーバーとして知られています。美しいインターフェイスと多くのプラグインがあります。バックエンド言語のテストコードを直接生成できます。しかし、私はそれを展開するときにそれを理解することはありませんでした、そして、YAML形式はJSONほど良くないので、私はそれをあきらめました。
これは、プロジェクトで使用されるドキュメントサーバーとモックサーバー、平均テクノロジーに基づいて実装されたサーバー、および基本的な機能です。
MOCKJSプラグインを使用すると、ランダムデータを動的に生成して、JSONスキーマに基づくインターフェイスパラメーターでチェックサムインターフェイステストを実行でき、テストステータスとインターフェイス応答時間を保存できます。 Simple JSONエディターにはログイン検証機能があり、ログイン後にインターフェイスのデバッグを実行できます。MockサーバーはAPIサーバーに従ってリクエストに応答し、インターフェイスが更新されると自動的に更新されます。
いくつかの質問
node.jsはフロントエンドエンジニアの翼であり、私は翼のある天使や悪魔になるべきですか?これは、それを使用することによって引き起こされる問題を解くことができるかどうかに依存します。
まず、フロントエンドのワークロードは間違いなく増加しますが、通信コストは削減されます。 node.jsシングルスレッドのサーバーの安定性は実際には十分ではありませんが、コードの堅牢性と完璧なログは効果的に回避できます。折り返し電話。 node.js 'q/asyncモジュールやES6/ES7など、この問題にはあまりにも多くの解決策があります。 node.jsデバッグ。私は常にIDEを拒否してきましたが、WebStormはデバッグに非常に便利であることを認めなければなりません。私が使用しているノード・インスペクターも非常に優れており、インターフェイスはChrome開発者ツールに似ており、非常に馴染みがあります。
バックエンドプログラマーの場合、node.jsに対応する可能性が高くなるはずです。インターフェイス統合の作業は、処理のためにフロントエンドサーバーに引き渡され、フロントエンドとの結合度が大幅に削減され、ワークロードと作業効率が低下します。
経験する2つのポイントがあります
node.jsの使用には特定の学習コストがありますが、フロントエンドの開発者にとっては依然として非常に友好的です。さらに、Node.jsがフロントエンドで使用されている場合、技術コンテンツとワークロードの両方が改善され、ジョブの重要性が向上します。現在の開発者がより多くの価値を生み出すことができる場合にのみ、より高い給与を要求する資格があります。より少ない提案を作成し、職場でより多くの実現可能性計画を提供し、単純なHelloworldを書く代わりに技術的な事前研究を実施することをお勧めします。
要約します
一部の人々は、あなたが導入したもののセットは非常に複雑であり、使用するのが面倒すぎると言うかもしれないので、顔を合わせて伝える方が良いです。このような疑問のために、「Webフルスタックエンジニアの自己育成」でTencentのシニアUIエンジニアYu Guoが言及した例のみを使用できます。かつて、電話で小規模な会社を担当するフロントエンドの人がコードの管理方法を尋ねたとき、相手はFTPを使用して直接アップロードすると述べ、部下が常に間違ったコードを更新したと不満を述べました。彼はまた、なぜ彼がSVNやGitを使用しなかった理由を尋ねました。彼は、手動で更新する方が簡単だと言いました。この物語の真実は、質問に対する私の答えです〜
PPTダウンロードアドレス