2006-11-26
● [プログラミング] Ajax
先日のネットワーク技術検討会(社内会議)で、「今後のインターフェイスはAjaxが当然のように使われる」とかいう話があったけど、本当にそうだろうか。盲目的にAjaxという言葉を使っているだけのような気もする。
Ajaxが技術として有効だと思われるのは、ユーザーの入力によってどんどん状態が遷移していくような場合(Google MapやGoogle Earthのようなもの)であって、単純なグラフ描画だとかにAjaxを利用するのは開発・デバッグともに複雑になって非常に効率が悪いと思う。確かに、今までサーバー側で行っていた作業をクライアント側に行わせるという意味ではサーバー側の負荷を下げることにはなるが、それ以前にまずサーバーのアップグレードを検討するべきだろう。
● [プログラミング] C/C++/Perl/Ruby/Python/Java の起動時間
さて、Web2.0だとかの話はともかくとして、プリミティブなCGIの世界では結局どの言語を使うべきなんだろうという話があって、計算時間についてはC/C++のような静的型の言語のほうがperl/rubyのような動的型の言語より速いというのは想像がつきますが、その言語のライブラリなりインタープリタなりの起動時間はどうなのよ、ということでなるべく最小のプログラムでの起動時間を比較してみました。
まずは結果:
| 言語 | real(≒user+sys) | user | sys |
| C | 0m1.008s | 0m0.350s | 0m0.660s |
| C++ | 0m2.590s | 0m1.630s | 0m0.960s |
| Perl | 0m4.141s | 0m1.680s | 0m1.200s |
| compiled-Perl | 0m5.551s | 0m2.820s | 0m1.380s |
| sh | 0m7.939s | 0m6.230s | 0m1.700s |
| Ruby | 0m8.569s | 0m6.160s | 0m1.610s |
| Python | 0m27.741s | 0m23.250s | 0m4.140s |
| Java | 0m33.046s | 0m22.790s | 0m5.910s |
おもしろいのは、Perlスクリプトをコンパイルしても必ずしも速くならないどころか若干遅くなっていること。C++も、読み込むライブラリが増えれば、下手をすると(コーディングする人の技術レベルによっては)Perlより遅くなりそう。また、Rubyはかなり軽いかと思っていたけど、軽いのはプログラミング作業であって、実行時間でいうとまだまだ改善の余地はありそう。Python/JavaはIOにも時間がかかっているのが特徴。てゆーかJava遅い…これはサーブレットのような体系でしか使えませんね。
従って、現時点で開発効率と実行速度の両方を考えるなら、まだまだPerlでCGIを作るというのはアリだと思います。ソースが読みにくくて引き継ぎが面倒なのが難点かなぁ。
ソース
ちなみに、ソースはこんな感じ:
C (test.c; gcc -O3 && strip)
#include <stdio.h>
int main(int argc, char** argv) {
printf("%s\n", "OK");
return 0;
}
C++ (test.cc; g++ -O3 && strip)
#include <iostream>
int main(int argc, char** argv) {
std::cout << "OK" << std::endl;
return 0;
}
Perl (test.pl)
#!/usr/bin/perl printf "%s\n", "OK";
compiled-Perl (perlcc -O3 test.pl && strip)
test.pl と同じ
bash (test.sh)
#!/bin/sh echo "OK"
Ruby (test.rb)
#!/usr/bin/ruby
printf("%s\n", "OK");
Python (test.py)
#!/usr/bin/python print "OK"
Java (test.java; gcj -O3)
class test {
public static void main(String[] args) {
System.out.println("OK");
}
}
これらのスクリプトを、bashのforループで1000回まわしてtimeコマンドで計測した。計算自体はほとんど行われていないので、実質的にこれが言語それぞれの起動時間ということになると思う。もちろん、実際にはC/C++などは使用するライブラリによるのですが…。
mod_(perl|ruby)使うと結構変わる?
たぶん劇的に変わるはず。<br>が、それは言語系の「起動時間」は計測しないことになるので、<br>ちょっと趣旨は外れるような気もしますけどね。<br><br>とりあえずサーバー用意中なので、而して待つべし。