ガイド開発ガイド

fibjsとは何ですか?

Fibjsは、主にWebバックエンド開発用に設計されたアプリケーションサーバー開発フレームワークであり、Google v8 JavaScriptエンジン上に構築され、従来のコールバックとは異なる同時実行ソリューションを選択します。 Fibjsは、ファイバーを使用して、フレームワークレイヤーの非同期呼び出しによってもたらされるビジネスの複雑さを分離します。これにより、開発の難易度が大幅に減少し、ユーザー空間の頻繁な非同期処理によって引き起こされるパフォーマンスの問題が減少します

歴史的な理由から、JavaScriptは主にブラウザーのUI処理に使用されますが、UI開発は一般的なシングルスレッドイベント駆動モードであるため、JavaScriptは主要なプログラミングパラダイムとして非同期プログラミングも形成します。

JavaScriptの成功により、ますます多くの人々がJavaScriptを他のシナリオに適用し始めています。同時に、多くのシナリオで非同期処理が最も適切な選択ではないことに、人々はますます気づいています。

元のアジャイル開発に戻る

Fibjsは、フレームワークレイヤーでファイバーを使用して、非同期呼び出しによってもたらされるビジネスの複雑さを分離し、ioの非同期処理をより直感的な同期呼び出しにカプセル化します。エンジニアは、非同期処理で楽しむことができる通常の同期ビジネスロジックに従ってコードを記述するだけです。とても便利。

次のコードは、mysqlモジュールのドキュメントから取得したものです。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
conn.beginTransaction(err => { if (err) { throw err; } conn.query('INSERT INTO posts SET title=?', title, (error, results, fields) => { if (error) { return conn.rollback(() => { throw error; }); } var log = 'Post ' + results.insertId + ' added'; conn.query('INSERT INTO log SET data=?', log, (error, results, fields) => { if (error) { return conn.rollback(() => { throw error; }); } conn.commit((err) => { if (err) { return conn.rollback(() => { throw err; }); } console.log('success!'); }); }); }); });

fibjsでは、同じことを行います。コードは次のとおりです。

1 2 3 4 5 6
conn.trans(() => { var result = conn.execute('INSERT INTO posts SET title=?', title); var log = 'Post ' + results.insertId + ' added'; conn.execute('INSERT INTO log SET data=?', log); }); console.log('success!');

シンプルさを追求する場合、次のようなコードを書くこともできます。

1 2 3 4
conn.trans(() => conn.execute('INSERT INTO log SET data=?', 'Post ' + conn.execute('INSERT INTO posts SET title=?', title).insertId + ' added')); console.log('success!');

2つの異なるプログラミングスタイルの違いを明確に比較できます。コードが少ないほどエラーが少なくなり、コードが削減されると、コードのロジックが明確になり、開発とメンテナンスの両方にメリットがあります。

高エネルギーを受け入れる

サーバーを拡張することで簡単に応答速度を上げることができますが、パフォーマンスは開発フレームワークを選択するための重要な基盤です。 ES7の導入により、asyncは新しい非同期開発モデルとして導入されました。ただし、非同期によってもたらされる同期スタイルを楽しむときは、パフォーマンスへの影響に直面する必要があります。

テストコードを使用して、異なるプログラミングスタイル間のパフォーマンスの違いを比較できます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
var count = 1000; async function test_async(n) { if (n == count) return; await test_async(n + 1); } function test_callback(n, cb) { if (n == count) return cb(); test_callback(n + 1, () => { cb(); }); } function test_sync(n) { if (n == count) return; test_sync(n + 1); } async function test() { console.time("async"); await test_async(0); console.timeEnd("async"); console.time("callback"); test_callback(0, () => { console.timeEnd("callback"); }); console.time("sync"); test_sync(0); console.timeEnd("sync"); } test();

最新のv8 v6.7.192では、このコードの結果は次のとおりです。

1 2 3
async: 5.276ms callback: 0.117ms sync: 0.038ms

テスト結果から、非同期がプロジェクトで広く使用されている場合、サーバーは非同期関数の呼び出しと戻りを処理するのに多くの時間を費やすことが明確にわかります。これは、一部のサーバーアプリケーションの実際のテストでも確認されました。そして、パフォーマンスのこの急激な低下はまったく受け入れられません。

Fibjsはファイバーを使用してJavaScript言語の機能を最大限に活用し、v8のパフォーマンスを最大化します。エンジニアは、サーバーのパフォーマンスを簡単に最大化できます。

誘されることなくパラダイムを柔軟に選択

fibjsを使用することは、同期開発スタイルを使用する必要があることを意味するものではありません。実際、fibjsはこれまでに見た非同期プログラミングパラダイムをサポートし、同期スタイルと非同期スタイルを柔軟に切り替えることができます。

コールバックであろうと非同期であろうと、致命的な欠陥があり、これは伝染性です。関数がコールバックまたは非同期である限り、それに依存する他のすべての関数はコールバックまたは非同期でなければなりません。これは、大規模なソフトウェア開発に莫大な開発コストをもたらします。

例として単純なサーバー開発シナリオを取り上げます。プロジェクトの最初に、セッションデータストアとしてメモリを選択しましたが、この時点でsyncメソッドを使用してデータを直接読み取り、保存し、これに基づいて完全なビジネスを開発できます。ビジネスの規模が大きくなると、セッションデータをredisまたはmongodbに保存する必要がありますが、この時点で、セッション関連の操作を非同期モードに変更する必要があります。

理論的には、依存する関数の要件に合わせて各関数を順番に変更できますが、これにはすべてのモジュールを完全に理解し、それらを変更する能力が必要です。これは、複数の人が共同で開発する場合、またはサードパーティのモジュールを使用する場合、完全に不可能です。

したがって、すべての一般的なモジュールは、非同期インターフェイスとパフォーマンスのバランスをとるために、同期インターフェイスと非同期インターフェイスの両方を提供する必要があります。より一般的な開発者は、非同期インターフェイスのみを提供することを選択します。これにより、パフォーマンスが低下します。

fibjsでは、同様の問題を簡単に解決し、明示的な非同期の制御されない感染を回避できます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var util = require('util'); function session_get(sid) { return sdata; } async function async_session_get(sid) { return sdata; } function callback_session_get(sid, cb) { cb(null, sdata); } data = session_get(sid); data = util.sync(async_session_get)(sid); data = util.sync(callback_session_get)(sid);

Fibjsはutil.syncを使用して、コールバックまたは非同期関数を同期関数に変換し、直接呼び出すことができます。このようにして、さまざまなプログラミングパラダイムのモジュールを簡単に統合し、最小限の開発コストで同期パラダイムに変換して、パラダイム感染による災害を効果的に回避できます。

体験を始める

快適な開発体験を始める準備はできましたか?それでは、インストールから始めましょう。

👉[ インストールおよび操作環境 ]