16

次のプロジェクトのために、 Aptana Jaxerサーバー側 JavaScript エンジンの実験を始めたところです。そして、私はそれについていくつか質問があります

  • サーバーサイド JS を使用することで、サーバーサイド言語 (C#、Java など) を使用せずに Web アプリケーション全体を実装できますか? または、サーバー側の JS は、Web サーバーと他の言語スタックの間に配置されます。

  • それは本当により良いアプローチですか??

  • 利点と欠点は何ですか?

  • これはパフォーマンスの点でどのように機能しますか?

  • サーバー側の JS のみを使用する (他の言語を使用しない) リアルタイム実装 (公開 Web サイト) はありますか?

  • Aptana jaxer (オープンソース) で利用可能な代替手段は何ですか??

  • db トランザクションをどの程度実装および維持できるか? サーバーサイドJSでそれを行うことはできますか..?

  • サーバーサイド JS で RESTFul および SOAP サービスを開発することは可能ですか??

これは長すぎることを知っています(そして素朴な質問です)。サーバーサイドJSを実装しているときに、誰かがすでにこれらすべてに出くわしていることを願っています.

編集:

マシューとケンのコメントに従って、私は質問にいくつかの明確さを追加しました。それは本当により良いアプローチですか??

これは私が尋ねるつもりです..

サーバー側言語 (c# を想定) を使用するよりも本当に優れたアプローチですか? これを Web サイトの C# 実装 (パフォーマンス、言語機能) とどのように比較できますか?? そして、サーバーサイドでJSを単独で使用するか、他の言語スタックとWebサーバーの間の中間層でJSを使用する、どちらがより良いアプローチですか??

4

3 に答える 3

19

私は、Rhino と Java に基づくオープン ソースのサーバー側 JS プラットフォームであるMyna (www.mynajs.org) の開発者です。Myna に関連する問題に対処しますが、これらのポイントの多くは一般的にサーバー側 JS に適用されます。

サーバーサイド JS を使用することで、サーバーサイド言語 (C#、Java など) を使用せずに Web アプリケーション全体を実装できますか? または、サーバー側の JS は、Web サーバーと他の言語スタックの間に配置されます。

Myna では、アプリ全体を JS で書くことができます。Myna には、データベース アクセス、オブジェクト リレーショナル マッピング、crytogrophy、OpenID などの API が既に含まれています。

それは本当に c#/Java よりも優れたアプローチですか?

Rhino ベースのサーバーでは、必要に応じて Java にドロップダウンするのは簡単です。オープンソース/商用/ハンドコーディングされた Java ライブラリを簡単にインストールして、JS からスクリプトを作成できます。これは、JS の迅速な開発を実現しながら、Java プラットフォームの利点を維持することを意味します。

長所と短所は何ですか?

長所:

  • 迅速な開発: Myna では、webroot に .sjs 拡張子のファイルを作成するだけです。これは、コードのデバッグ/調整が非常に高速な、編集-保存-更新ブラウザ サイクルを作成できることを意味します。

  • 簡単な JSON : JS がサーバー側でサポートされているということは、複雑な構造の移動が非常に簡単であることを意味します

  • 共有コード: サーバーとブラウザの両方で同じ機能を実行する必要がある場合は、同じコードを使用できます

  • 動的 ORM : 静的に型付けされたコンパイル済み言語により、実行時にオブジェクトを変更することが困難になります。これは通常、ORM を事前に定義する必要があることを意味します。Myna の建物の ORM は次のようにシンプルです。

    var manager =new Myna.DataManager("DataSource name").getManager("table name");
    

    DB テーブルを明示的に定義しなくても、すべての基本的な CRUD 操作を実行できるオブジェクトを取得します。別の例として、フォーム投稿から一致するすべての値を含む行を挿入できます。

    manager.create($req.data);
    
  • 関数型プログラミング: 高度な JavaScript 機能を使い始めたことがあれば、それらがサーバー側でどれほど役立つかを理解するでしょう。サーバー側の環境が一貫しているため、Array Extrasgenerators and iteratorsdestructuring assignmentsE4Xなどの高度な機能を安全に使用できます。

短所:

  • ツール: C# や Java などの静的型付け言語には、優れた IDE および開発者ツールがあります。JS のような動的言語には、まだツールのサポートがありません。個人的には、ボイラープレート コードの大幅な削減と面倒な型キャストがこれを補っていると思いますが、IDE で多くの開発を行っている場合、これは依然として大きな欠点です。現在 IDE を使用している場合は、動的言語にjeditを使用することを検討してください

  • 成熟度/標準化: サーバーサイド JS はまだ新しいパラダイムであり、多くのプレーヤーが存在し、明確な勝者はいません。ECMA には、サーバーサイド JS の標準はありません。Brandon の回答で述べたように、CommonJSグループはサーバーサイド JS 標準の形成を試みており、Myna はNarwhalを介して CommonJS を実験的にサポートしています。

これはパフォーマンスの点でどのように機能しますか?

生の計算速度では、C# や Java のような静的に型付けされたコンパイル済み言語に匹敵する動的言語はほとんどありません。そうは言っても、それは本当に問題ではありません。計算量の多いアプリケーションの部分は、おそらく Java で作成するか、既存の Java ライブラリを使用する必要があります。たとえば、JS でデータベースを作成することはお勧めしません。現実世界の Web アプリケーション/SOA サービスの場合、スローダウンの主な原因は生の計算速度ではなく、非効率的なコード、特にデータベース アクセスです。Myna は、次のようなことを行うことでこれを支援します。

  • コンパイルされた JS スクリプトを内部的にキャッシュする
  • データベース トランザクション用にキャッシュされたプリペアド ステートメントを内部的に使用する
  • クエリと出力フラグメントのキャッシュ
  • データベース接続プーリング
  • 自動 ETag ハッシュのサポート
  • プロファイリング ツール
  • メタデータの遅延読み込み

データベーストランザクションをどれだけうまく実装および維持できますか? サーバーサイドJSでそれを行うことはできますか..?

「リバースまたはコミットできる SQL ステートメントのセット」のようなトランザクションを意味する場合、Myna はまだトランザクションをサポートしていません。十分な関心があれば、これを実装することにオープンです。

「サーバーサイド JS にはどのようなデータベース サポートがありますか?」という意味であれば、答えはプラットフォームに依存します。Myna プラットフォームは、次のデータベース機能を提供します。

  • 「データソース」、つまりデータベース接続情報を定義できる Web ベースの管理アプリケーション。その後、これらのデータソースを名前でクエリできます。Myna には、H2、MySQL、Microsoft SQL Server、および Postgresql 用の JDBC ドライバーが含まれていますが、任意の JDBC または ODBC データソースを使用できます
  • Myna.DatabaseMyna.Tableは、データベースに依存しないメタデータ アクセスと、テーブルの作成と変更を提供します。
  • Myna のQueryオブジェクトは、maxRows、ページング、SQL パラメーター、カスタム行ハンドラー、query-of-query、キャッシングなどをサポートします
  • Myna のDataManagerオブジェクトは、ランタイム ORM オブジェクトの作成をサポートします

サーバーサイド JS で RESTFul および SOAP サービスを開発することは可能ですか??

REST と SOAP のサポートは、プラットフォーム固有の機能です。Myna のWebServiceオブジェクトは、次のプロトコルをサポートしています。

  • 石鹸
  • XML-RPC
  • JSON-RPC
  • 外部ダイレクト
  • JSON-MYNA (通常の形式のポストを使用し、JSON を返す単純なプロトコル。ブラウザーから簡単に使用できます)

Myna は PUT および DELETE リクエスト メソッドも理解しており、リクエスト ボディ コンテンツへのアクセスをテキスト形式とバイナリ形式の両方で提供するため、これらの RESTful メソッドをアプリケーション固有の方法で処理できます。

デバッグ

従来のブレークポイントのデバッグは、サーバー側で非常に困難です。Rhino はデバッガー フックをサポートしていますが、ステートレスな Web アプリからこれらを使用するのはかなり複雑です。個人的には、ブレークポイント デバッガーが利用可能であっても使用しません (例: firebug)。代わりに、ロギングを好みます。

ミナでは、

 Myna.log(type,label,detail)

優先度の低いスレッドを生成して、HTML ログ メッセージを Myna のログ データベースに書き込みます。これらのログは、Myna 管理者を通じて検索できます。ログには、プロファイリングの目的で、タイムスタンプと経過ミリ秒も記録されます。Myna.dump(obj) は、任意のオブジェクトの HTML テーブル表現を表示するためにも使用できます。Myna は、スタック トレース、ソース コード コンテキスト、および要求の詳細と共に、すべての未処理の例外もログに記録します。dump()、log()、およびデフォルトのエラー ハンドラーの間で、Myna コードのデバッグにそれほど問題はありません。

于 2009-10-31T15:21:09.423 に答える
12

サーバーサイド JS を使用することで、サーバーサイド言語 (C#、Java など) を使用せずに Web アプリケーション全体を実装できますか?

多くのサーバーサイド JavaScript フレームワークは Rhino エンジンを使用しているため、他の言語でコードを記述する必要はありません。これにより、任意の Java コードを呼び出すことができます。

それは本当により良いアプローチですか??

私は、(言語としての) JavaScript が、従来のサーバー側言語よりも優れている、または劣っているオプションだとは思いません。柔軟性、高速なプロトタイピング (しゃれた意図はありません)、柔軟性などの利点があります (Ruby や Python などの他の動的言語と共に)。一方、Java や C# が持っているライブラリ サポートや静的型付けはありません。 (ここではどちらが優れているかについての議論には入りません。理由は異なりますが、どちらも好きです)。

両方の長所を生かしたい場合は、JavaScript をスクリプト言語として使用して、アプリケーションに組み込むことができます。Rhino for Java と JScript.NET を使用すると、JavaScript で「ネイティブ」オブジェクトを簡単に操作できます。たとえば、Java または C# でドメイン クラスを記述し、より柔軟に JavaScript を使用してそれらをスクリプト化することができます。JavaScript に十分慣れている場合は、単一の言語で書く方が簡単かもしれません。

私は JavaScript を使用して「実際の」サーバー側アプリケーションを作成したことがないため、.NET よりも優れているか劣っているのかを判断することはできません (JScript.NET も使用したことがありません)。楽しみのためにいくつかのフレームワークをいじってみましたが、現在、Helma NG を使用して個人サイトを書き直しています。これまでのところ、これは良い経験でした (あまり好きではなかった PHP よりもはるかに優れています)。

利点と欠点は何ですか?

利点:

  • サーバー側とクライアント側のプログラミングに必要な言語は 1 つだけです。
  • フォームの検証などのための共有コードの可能性。Jaxer を使用すると、クライアント、サーバー、またはその両方でスクリプトを実行できます。
  • JavaScript でプログラミングできるようになります (この言語が好きであることが前提です)。

短所:

  • 多くのフレームワークは実験的であり、あまり成熟していません。
  • JavaScript でプログラミングする必要があります (言語が気に入らない場合)。

これはパフォーマンスの点でどのように機能しますか?

パフォーマンスは、他のスクリプト言語とほぼ同等です。

サーバー側の JS のみを使用する (他の言語を使用しない) リアルタイム実装 (公開 Web サイト) はありますか?

JavaScript を使用した大規模な Web サイトは知りませんが、いくつかあるかもしれません。

Aptana jaxer (オープンソース) で利用可能な代替手段は何ですか??

ウィキペディアには多数のオプションのリストがありますが、有用な情報はあまりありません。成熟度とサイズの幅が広いオプションがたくさんあります。

ここに私がよく知っているいくつかがあります(程度の差はありますが)

  • Helma - アクティブなレコードを持つ Rhino (Java) ベースのフレームワーク.
  • Helma NG - Helma Next Generation (実験的なリライト、活発な開発中)。
  • Phobos - NetBeansで適切にサポートされています。
  • v8cgi - 小さくてシンプル, Google の V8 エンジンを使用します.おそらくまだ本番環境には対応していません.
  • Jaxer - DOM 実装を使用して Spidermonkey で実行されるため、jQuery や Prototype などのフレームワークでページを操作できます. Aptana Studio で優れた IDE サポートがあります。

データベーストランザクションをどれだけうまく実装および維持できますか? サーバーサイドJSでそれを行うことはできますか..?

Rhino ベースのフレームワークでは Java クラスを使用できるため、JDBC を完全にサポートできます。私は Jaxer のデータベース ライブラリを使用したことがないので、その機能については何も知りません。

サーバーサイド JS で RESTFul および SOAP サービスを開発することは可能ですか??

RESTful API は問題ありません。SOAP の特定のサポートについては知りませんが、可能なはずです。

于 2009-09-25T14:17:51.867 に答える
6

序文として、私は日常業務で SSJS を使用しています。私たちは SpiderMonkey でかなり大きな (複雑さとページ ビューの点で) Web サイトを運営しています。私が経験したマシューの優れた回答に追加します。

サーバー側の言語を使用するよりも本当に良いアプローチですか (c# を想定)

「より良い」は、実際に何をしたいかによって異なります。JavaScript 自体には、いくつかの優れた機能とかなりひどい機能があります。JS (クライアントまたはサーバー) の開発に真剣に取り組んでいる場合は、Douglas Crockford のプレゼンテーションJavascript: The Good Partsをまだご覧になっていない場合は、視聴することを強くお勧めしません。彼は粗悪品を整理する素晴らしい仕事をしており、おまけに優れたスピーカーです.

現在、SSJS の世界に欠けている最大のものは成熟度です。私は C# には詳しくありませんが、JavaScript には成熟した標準ライブラリがなく、成熟したパッケージ配布手段もありません。私にとって、それはパズルの大きなピースです。

そうは言っても、 CommonJSグループに注目してください。彼らは、それらの正確なものを定義するために取り組んでいます。また、The Jaxer Api Documentation には、そのフレームワークに含まれているビルトインがリストされています。

これはパフォーマンスの点でどのように機能しますか?

JavaScript 自体は遅い言語ではなく、特に速い言語でもありません。Matthew が指摘したように、これは、使用する他のスクリプト言語に匹敵するはずです。誰が最速のブラウザーを構築できるかをめぐるブラウザー ベンダー間の戦争は、SSJS クラウドにも利益をもたらします。

V8 チームがエンジンに組み込んだ世代別ガベージ コレクションは、その好例です。仮想マシンを停止して到達不能なオブジェクトをヒープから解放し、それらのメモリを再利用するのはやや遅くなる可能性がありますが、ガベージ コレクターの実行時に検査する必要があるオブジェクトの量を減らすことで、それを軽減しています。

データベーストランザクションをどれだけうまく実装および維持できますか? サーバーサイドJSでそれを行うことはできますか..?

Jaxer には、MySQL および SQLite データベース API があるようです。Matthew が述べたように、Rhino を使用する場合は、JDBC API を使用できます。

編集:リンクを追加

于 2009-10-02T02:34:22.867 に答える