トップ «前の日記(2006-11-25) 最新 次の日記(2006-11-30)» 編集

Public Diary

For antenna, use RSS(RDF) or LIRS.


2006-11-26

[プログラミング] Ajax

先日のネットワーク技術検討会(社内会議)で、「今後のインターフェイスはAjaxが当然のように使われる」とかいう話があったけど、本当にそうだろうか。盲目的にAjaxという言葉を使っているだけのような気もする。

Ajaxが技術として有効だと思われるのは、ユーザーの入力によってどんどん状態が遷移していくような場合(Google MapGoogle 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++などは使用するライブラリによるのですが…。

本日のツッコミ(全2件) [ツッコミを入れる]
fjsg (2006-11-29 17:11)

mod_(perl|ruby)使うと結構変わる?

wassy (2006-12-01 00:36)

たぶん劇的に変わるはず。<br>が、それは言語系の「起動時間」は計測しないことになるので、<br>ちょっと趣旨は外れるような気もしますけどね。<br><br>とりあえずサーバー用意中なので、而して待つべし。

[]
本日のPingbacks(全0件)


1980|03|
1986|04|
1998|04|
2002|01|11|
2003|03|04|05|07|08|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|02|03|04|06|07|08|11|12|
2008|01|02|03|04|06|07|