時折、JavaScript のヘルプを検索していて、「サーバーサイド JavaScript」という用語に出くわします。JavaScript サーバーサイドを使用するのはいつですか? そしてどうやって?
私の JavaScript の経験はブラウザーでのものでした。JS のコンパイル済みバージョンはありますか?
時折、JavaScript のヘルプを検索していて、「サーバーサイド JavaScript」という用語に出くわします。JavaScript サーバーサイドを使用するのはいつですか? そしてどうやって?
私の JavaScript の経験はブラウザーでのものでした。JS のコンパイル済みバージョンはありますか?
人々がこの用語を不適切に使用していない限り、これは AJAX ではありません。その名前が示すように、SSJS はサーバー上で実行される JavaScript であり、SpiderMonkey のようなスタンドアロン (つまり、ブラウザーに依存しない) JavaScript エンジンによって解釈されます。
なぜわざわざ?さて、私が現在十分に活用されていない分野の 1 つは、データ検証です。SSJS では、サーバーとクライアントの両方で使用される 1 つのコードを記述します。したがって、サーバー上で行われているデータ チェックと自動的に一致するクライアント側の JS からユーザー フィードバックをすぐに取得できます。
サーバー側の JavaScript フレームワークであるプロジェクトPhobosがあります。
当時、Netscape Web サーバーはサーバー側の Java スクリプトも提供していました。
どちらの場合でも、サーバーで他の言語を使用するのと同じように JavaScript が使用されます。通常、HTTP 要求を処理し、コンテンツを生成します。
Mozilla の Java 用 JavaScript システムであるRhinoは、JavaScript を Java バイトコードにコンパイルし、JVM はこれを JIT に選択できます。他のシステムは、Java スクリプトの内部コードを JIT コンパイルするところまで、Java スクリプトを実行するために他の手段を使用します。
サーバー上に JavaScript がますます増えることが予想されます。クライアント上の JavaScript で「厚い」アプリケーションを作成している場合は、サーバー上の JavaScript でロジックを記述して、ある言語から別の言語へと認知的な飛躍を遂げる必要がないようにすることもできます。環境は異なりますが、コードと知識の多くは共有可能です。
最後に、JavaScript はおそらく、実装に関して現在最も注目されている唯一の言語です。Apple、Mozilla、Google、さらには Microsoft からも、さらに高度な言語 (つまり、基本的に Algol 構文のマクロを使用しないスキーム) にするための取り組みも行われています。
これらの実装のほとんどはブラウザーに埋もれていますが、サーバー側にも価値がないわけではありません。
ツールは JavaScript が欠けている最大の場所であり、特にサーバー サイドではそうですが、IDE でサーバー サイド JavaScript をデバッグできる Phobos のようなものを考えれば、それは大きな進歩です。
個人的には、白いペンキのようにアプリケーションに JavaScript を散りばめています。非常に少ないコストで安価な拡張性を提供し、優れたイネーブラです。
従来の ASP では、サーバー上で JavaScript を使用できましたが、ほとんどの人は VBScript を使用していました。
サーバーでの JavaScript の使用方法の 1 つは、クライアント側のデータ検証を補完することです。たとえば、クライアントとサーバーで同じ JavaScript 検証ライブラリを使用する場合があります。これにより、サーバー上と同じロジックをクライアント上で使用することが保証されますが、(潜在的に) クライアント側で事前検証することにより、不要なラウンドトリップを回避できます。
ウィキペディアには、サーバー側 JavaScript の実装が多数リストされています。
これは、JavaScript を使用して、ページを再読み込みせずに Web サーバーにメッセージを投稿すること、つまり AJAX を指す場合があります。
しかし、おそらくそれは、サーバー側言語に javascript を使用するAptana/Jaxer (または、今日の Node.js) のようなものを意味すると思います。この場合、javascript は単なる言語であることを思い出してください。Web ブラウザーで使用される DOM は一種の API です。サーバー側の JavaScript エンジンは、DB やファイル システム アクセスなどのサーバー側のタスクを対象とした独自の API オブジェクトを提供します。
クライアント側の検証の問題があるため、サーバー側の JavaScript は興味深いアイデアです。クライアント側で検証を行い、サーバーに不要なリクエストを送信しないようにする必要があります。これにより、サーバーのパフォーマンスが向上し、クライアントでの待ち時間が短縮されます。ただし、クライアントを信頼できないため、サーバー側で検証を行う必要があります。これにより、クライアントとサーバーの間で多くの重複コードが発生します。
理論的には、クライアントとサーバーの言語が一致すれば、同じロジックの 2 つの実装は必要なくなるというものです。ページ要求のクライアント ビューとサーバー ビューが大きく異なり、クライアントが使用する JavaScript エンジンを制御できないため、実際にはうまく機能しません。
ASP.NET について話しているのか、Classic ASP について話しているのかによって異なります。ASP.NET を使用している場合、Javascript を使用する正当な理由はあまりありません。
ASP Classic は別のケースです。VBScript を使用する場合とまったく同じ方法で、ASP のサーバー側で Javascript を使用できます。VBScript を使用するのと同じように、Application、Server、Request、および Response オブジェクトにアクセスできます。
ASP のサーバー側で VBScript ではなく Javascript を使用することには、実際の利点があります。これは、ブラウザ コードとサーバー コードの間でコードを共有できることを意味します。また、開発者が 2 つの異なる言語を扱う必要がないことも意味します。
ただし、ASP のサーバー側 Javascript にはいくつかの欠点があります。まず、サーバー側の文字列連結で VBScript ほど高速ではないようです。また、VBScript のように COM オブジェクトを呼び出すのには適していません (out/byref パラメーターではなく、戻り値を介してのみ COM 呼び出しからデータを取得できます)。
まったく同じ実装を行うために、ブラウザーとサーバーの両方にいくつかの機能を持たせたい場合があります。
例としては、WYSIWYG エディターのブラウザーで実行し、結果のページをレンダリングするサーバーで実行する wiki 構文のレンダラーがあります。このようにして、両方のレンダリング結果が両方のケースでまったく同じになることがわかります。
どうやらRhinoは JavaScript を Java クラスにコンパイルできるようです。
伝統的に、Javascript はドキュメント オブジェクト モデルを中心に実行されます。しかし、Java ショップで働いていて、カスタム オブジェクト モデルにスクリプト エンジンが必要な場合はどうでしょうか。そこで登場するのがサーバーサイド Javascript です。
http://steve-yegge.blogspot.com/2007/06/rhino-on-rails.html
Steve Yegge が Rhino でサーバーサイド JavaScript をどのように使用しているか、またその理由を確認してください。彼は、JavaScript がどのように進化しつつあると感じているかについて、たくさんの情報を持っています。
Cocoon (Apache の Java/XML/Javascript MVC フレームワーク) のことを覚えていますが、Javascript で記述する必要があり、サーバー上で実行されていたもの (cforms だと思います) があったため、以前はサーバー側の Javascript を使用していました。 Javaで書くことができます。
その時までに Rhyno を使用していました。確認してください: http://peter.michaux.ca/articles/server-side-javascript-with-rhino-and-jetty
ええ、ジョン・レジグという名前の人のブログで SSJS について読んだところです。
彼は Jaxer と呼ばれるエンジンについて説明し、「Firefox のビジュアル レンダリング部分をはぎ取って、代わりに Apache へのフックに置き換えることを想像してみてください。大まかに言えば、それが Jaxer です」と述べています。
ASP.NET を知っている人なら誰でも HTML は見慣れたものに見えます
<html>
<head>
<script src="http://code.jquery.com/jquery.js" runat="both"></script>
<script>
jQuery(function($){
$("form").submit(function(){
save( $("textarea").val() );
return false;
});
});
</script>
<script runat="server">
function save( text ){
Jaxer.File.write("tmp.txt", text);
}
save.proxy = true;
function load(){
$("textarea").val(
Jaxer.File.exists("tmp.txt") ? Jaxer.File.read("tmp.txt") : "");
}
</script>
</head>
<body onserverload="load()">
<form action="" method="post">
<textarea></textarea>
<input type="submit"/>
</form>
</body>
</html>
runat="sever" と runat="both" に注意してください