Personal tools
You are here: Home ブログ 井上 サーバサイドJavaScript
« December 2010 »
Su Mo Tu We Th Fr Sa
      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  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

サーバサイドJavaScript

この記事でaptana Jaxerを知りました。

サーバサイドをJavaScriptで書けるWebアプリケーションサーバです。同種のソフトのHelmaは知っていましたが、他にもあったんですね(しかも開発から既に3年も経っているようです)。

今どきのWebアプリ開発では、クライアントサイドのJavaScriptから逃れられません。他の人は知りませんが、複数言語の切替え時の(脳の)コンテキストスイッチがバカになりません。

RailsのActionView::Helpers::PrototypeHelperクラスにRubyのコードでJavaScriptのコードを書けるメソッドがあります(prototype.js前提)。たとえば、erbファイル(Javaでのjspファイル相当)に次のように書いておくと

periodically_call_remote(:url => { :action => 'index' }, :update => 'list')

生成されるHTMLファイル内で次のようになります。

new PeriodicalExecuter(function() {new Ajax.Updater('list', '/appname/index',
      {asynchronous:true, evalScripts:true})}, 10)

100歩譲って作った気持ちはわからなくも無いですが、初見の印象は気持ち悪い、でした。今でも、これを使う人間の気持ちがまったく理解できません。すべてのJavaScriptのコードをerbファイルから無くせるなら価値があるかもしれませんが、そんなことは無理です。もしできたとしたら、それは変てこなラッパー言語ができあがっているだけです。

今、Javaで書いているWebアプリをJavaScriptで書くと失う利点が色々ありそうですが、Ruby、Perl、PythonのようなLLで書いているコードをJavaScriptで書くことで失われるものはほとんど無い気がします。ノウハウの不足やパフォーマンスへの懸念ぐらいかもしれません。皮肉なことに、この反論はJavaがLLに対して行う論拠そのものです。

サーバサイドをJavaScriptで書くことは、サーバサイドの言語をただ変えるだけ以上に意味がある気がします。サーバサイドの言語をJavaからLLにすることを大げさにあおりたてる風潮がありましたが、技術的な面で見れば、騒ぐほどの違いではありません。

サーバサイドをJavaScriptで書くと、上のコードでURLを意識していた部分(/appname/index)にサーバサイドの関数名を直接書けるようになります。内部的にはXHRによるAJAX処理になりますが、プログラマから見れば完全にRPCです。少なくとも、現在主流のURLを意識したAjaxコードより、ずっと素直なRPCのプログラミングが可能になります。ソケットを知らなくてもRPCプログラミングができる(これ自体は別に悪くない)のと同様、URLを知らないWebアプリプログラマが現れても不思議はありません。

気になるのがパフォーマンスです。

こんな簡単なLoop処理で差がでるのが不思議です。Rubyが遅いのはintの上限チェックが入っているからでしょうか。JSON処理が意外に速くないのは面白いです。IO処理はJaxerが遅いですが、文字コード変換のためと書いてあります。どちらにせよ、IO処理はどの言語使っても、最後はCで書かれた処理に行くだけなので、どうでもよい比較です。同様の理由でDB処理の速度差の比較も意味が無い気がします。しかし、差が生じること自体は興味深いです。最後のScrapeの比較は文字列処理の速度比較で、現実的には、これが一番重要な指標です。計測したのはDOM処理の速度比較のようです。公平な評価になっているのかは不明ですが(壊れたHTMLも受けいれるDOMパーサと不正なXMLを受けつけないDOMパーサではだいぶ違うので)、JavaScriptの意外な速さに驚きます。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/serverjs/tbping

Re:サーバサイドJavaScript

Posted by inoue at 2009-02-12 04:17
JavaのRhino使っていると思っていましたが、C/C++で書かれていました(JavaScriptエンジンはMozillaのSpiderMonkey)。ソースコードのtar.gzのサイズが58MBって...と思ったら、Mozillaのソースコードが全部入っていました。

Re:サーバサイドJavaScript

Posted by Anonymous User at 2009-02-25 19:04
> サーバサイドをJavaScriptで書くと、上のコードでURLを意識していた部分(/appname/index)にサーバサイドの関数名を直接書けるようになります。内部的にはXHRによるAJAX処理になりますが、プログラマから見れば完全にRPCです。少なくとも、現在主流のURLを意識したAjaxコードより、ずっと素直なRPCのプログラミングが可能になります。ソケットを知らなくてもRPCプログラミングができる(これ自体は別に悪くない)のと同様、URLを知らないWebアプリプログラマが現れても不思議はありません。

言っている意味がわかりません。スクリプトやLLを持ち出さなくてもURLに関数名を書くことはできるはずです。

Re:サーバサイドJavaScript

Posted by inoue at 2009-02-27 23:50
どのレベルのツッコミをしているか不明ですが、想像して書きます。

- もしWebブラウザのURL入力欄に書くこと(たとえば、javascript:alert('x')と書いて実行)を、「URLに関数名を書く」ことだと言っているなら、全然違う話をしています
- もしXHR(XMLHttpRequest)でリクエストを投げるURLに、(サーバ側の)関数名を書けるという話をしているなら、近い話をしています

サーバ側のフレームワーク(Railsなど)が、URLと関数名の対応を適切に行ってくれると(まあまあ)透過的に見えているだけです。関数に渡すパラメータなどはHTTPを意識(クエリーパラメータにシリアライズ化)します。

サーバ側をJavaScriptで書くと、次のようなことが可能かもしれない、という趣旨で書いています。仮に、JSPやerbに相当するファイルをejs(embeded javascript)と呼びます。

ejs内に書いたjavascriptのコードは基本的にサーバ側のレスポンス時に評価されます(JSP内に書いたJavaコードと同じ動作です)。ejs内にDOMのイベントハンドラを書いたとします。このJavaScriptコードはstubコードの呼び出しに変換されて、レスポンス内に残ります。Webブラウザ上で、そのDOMイベントが起きると、stubコードを通じてXHRでサーバにリクエストします。このリクエストはサーバ側のJavaScript関数を呼びます。

Re:サーバサイドJavaScript

Posted by Anonymous User at 2009-03-03 12:23
JavaScriptの処理系はクライアント(ブラウザ)に有ると思ったんですが、
サーバーサイドって言ってるので、何かJavaScriptの処理系をサーバーに移したということでしょうか?
処理をするところが結局クライアントになるのであれば、サーバーサイドとは言えないんじゃないでしょうか?

Re:サーバサイドJavaScript

Posted by Anonymous User at 2009-03-03 12:26
あ、ちゃんと元記事読んで無かったです。すいません。
サーバーサイドにJavaScriptの処理系を置くという構想があるってことですね。
失礼しました。
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.