public
Description: CGIAlt is a re-implementation of cgi.rb
Homepage: http://cgialt.rubyforge.org/
Clone URL: git://github.com/kwatch/cgialt.git
cgialt /
name age message
file CHANGES.txt Sat Nov 08 16:00:31 -0800 2008 [refactor] Update many files for release 1.0.0. [kwatch]
file README.txt Sat Nov 08 17:33:55 -0800 2008 [refactor] README.txt: update installation steps. [kwatch]
file ReleaseNote.txt Sat Nov 08 16:00:31 -0800 2008 [refactor] Update many files for release 1.0.0. [kwatch]
file Rookbook.yaml Sat Nov 08 16:15:02 -0800 2008 [refactor] README.txt: add homepage url and git... [kwatch]
file bench.fcgi Fri Nov 07 19:59:01 -0800 2008 Register CGIAlt 0.0.2 files. [kwatch]
file bench.rb Fri Nov 07 23:50:59 -0800 2008 Rever '$Rev$', '$Release$', and '$Copyright$'. [kwatch]
file cgi.rb Fri Nov 07 19:57:55 -0800 2008 Register CGIAlt 0.0.1 files. [kwatch]
file cgialt.gemspec Fri Nov 07 23:50:59 -0800 2008 Rever '$Rev$', '$Release$', and '$Copyright$'. [kwatch]
file fcgi.README Fri Nov 07 19:59:01 -0800 2008 Register CGIAlt 0.0.2 files. [kwatch]
file fcgi.README.signals Fri Nov 07 19:59:01 -0800 2008 Register CGIAlt 0.0.2 files. [kwatch]
file fcgi.rb Fri Nov 07 19:59:01 -0800 2008 Register CGIAlt 0.0.2 files. [kwatch]
directory lib/ Sat Nov 08 16:00:31 -0800 2008 [refactor] Update many files for release 1.0.0. [kwatch]
file setup.rb Sat Nov 08 03:10:21 -0800 2008 [change] setup.rb: update for new version. [kwatch]
directory test/ Sat Nov 08 15:11:33 -0800 2008 [change] CGI.unescapeHTML(): changed not to use... [kwatch]
directory website/ Sat Nov 08 17:38:05 -0800 2008 [update] website/index.html [kwatch]
README.txt
= README.txt

Release: $Release$

$Copyright$

http://cgialt.rubyforge.org/
http://rubyforge.org/projects/cgialt/
http://github.com/kwatch/cgialt/


==  About

'CGIAlt' is an alternative library of standard 'cgi.rb'.
It is written in pure Ruby but works faster than 'cgi.rb'.


== Features

* Compatible with 'cgi.rb'.
* Faster and more lightweight than 'cgi.rb'.
* Available to install with CGIExt (which is a re-implementation of 'cgi.rb'
  in C extension).
* FastCGI support


==  Install

Download cgialt-$Release$.tar.gz and install it according to the following:

    $ tar xzf cgialt-$Release$.tar.gz
    $ cd cgialt-$Release$/
    $ sudo ruby setup.rb

Or if you have installed RubyGems, you can install CGIAlt by 'gem' command.

    $ sudo gem install cgialt

It is recommended not to use RubyGems if you have to develop CGI program
because loading RubyGems is very heavy-weight for CGI program.


==  Usage

All you have to do is to require 'cgialt' instead of 'cgi', and you can use
CGI class which is compatible with 'cgi.rb'.

   require 'rubygems'   # if you have installed with RubyGems
   require 'cgialt'

If you want to use CGIAlt with FastCGI (fcgi.rb), require 'cgialt/fcgi'
instead of 'fcgi'.

   require 'cgialt'
   require 'cgialt/fcgi'

If you want require 'cgi' when CGIAlt is not installed, try the following.

   begin
     require 'cgialt'
   rescue LoadError
     require 'cgi'
   end
   begin
     reqiure 'cgialt/fcgi'
   rescue LoadError
     require 'fcgi'
   end

If you want to replace original 'cgi.rb' entirely by 'cgialt',
create 'cgi.rb' which requires 'cgialt' under proper directory such as
'/usr/local/lib/ruby/site_ruby/1.8'.

   $ sudo echo 'require "cgialt"' > /usr/local/lib/ruby/site_ruby/1.8/cgi.rb
   $ sudo echo 'require "cgialt/fcgi"' > /usr/local/lib/ruby/site_ruby/1.8/fcgi.rb

When $DEBUG is true or ENV['DEBUG'] is set, CGIAlt prints release number
to $stderr when loaded.

   $ DEBUG=1 ruby -e 'require "cgi"'
   *** CGIAlt: release $Release$


== Benchmark

Try 'bench.rb' included in CGIAlt archive.
The following is an example of benchmark.

    ## cgi.rb
    $ ruby -s bench.rb -N=1000
    *** 1000 times                         user    system     total       real
    ruby -e 'nil'                        0.0900    0.8300   11.5400 (  11.9631)
    ruby -e 'require "cgi"'              0.1000    1.2400   24.7000 (  25.2709)
    
    *** 100000 times                       user    system     total       real
    CGI#new (simple)                    20.3100    0.0300   20.3400 (  20.3770)
    CGI#new (complex)                   26.5800    0.0400   26.6200 (  26.6604)
    
    *** 1000000 times                      user    system     total       real
    CGI#header (simple)                 12.6700    0.0100   12.6800 (  12.7137)
    CGI#header (complex)                43.4600    0.0600   43.5200 (  43.5749)

    ## CGIAlt
    $ ruby -s bench.rb -N=1000 -cgialt
    *** CGIAlt: release 0.0.0
    *** 1000 times                         user    system     total       real
    ruby -e 'nil'                        0.0900    0.8000   11.5900 (  12.0581)
    ruby -e 'require "cgi"'              0.1000    1.2300   19.4800 (  20.0621)
    
    *** 100000 times                       user    system     total       real
    CGI#new (simple)                    14.5000    0.0300   14.5300 (  14.5594)
    CGI#new (complex)                   20.0700    0.0300   20.1000 (  20.1356)
    
    *** 1000000 times                      user    system     total       real
    CGI#header (simple)                  6.0400    0.0100    6.0500 (   6.0553)
    CGI#header (complex)                36.2200    0.0400   36.2600 (  36.3138)


It is good thing for performance to install CGIExt as well as CGIAlt.
The following is a benchmark example of using both CGIAlt and CGIExt.

    ## CGIAlt and CGIExt
    $ ruby -s bench.rb -N=1000 -cgialt -cgiext
    *** CGIAlt: release 0.0.0
    *** 1000 times                         user    system     total       real
    ruby -e 'nil'                        0.0900    0.8100   11.6600 (  12.1769)
    ruby -e 'require "cgi","cgiext"'     0.1000    1.2100   20.8400 (  21.5575)
    
    *** 100000 times                       user    system     total       real
    CGI#new (simple)                    12.4200    0.0400   12.4600 (  12.5207)
    CGI#new (complex)                   13.1600    0.0300   13.1900 (  13.2443)
    
    *** 1000000 times                      user    system     total       real
    CGI#header (simple)                  6.0300    0.0100    6.0400 (   6.0651)
    CGI#header (complex)                36.5400    0.0800   36.6200 (  37.0642)


The following is a summary of above benchmark results.

    Table 1. summary of benchmark
                                       cgi.rb      CGIAlt        CGIAlt+CGIExt
    ---------------------------------------------------------------------------
    require "cgi"         (x1000)       13.16      7.89 ( 67%)      9.18 ( 43%)
    CGI#new (simple)      (x100000)     20.34     14.53 ( 40%)     12.46 ( 63%)
    CGI#new (comple)      (x100000)     26.62     20.10 ( 32%)     13.19 (102%)
    CGI#header (simple)   (x1000000)    12.68      6.05 (110%)      6.04 (110%)
    CGI#header (complex)  (x1000000)    43.52     36.26 ( 20%)     36.62 ( 19%)


Another benchmark script 'bench.fcgi' is provided. It is for FastCGI.
The following is an example result of benchmark.

    Table 2. result of bench.fcgi
                                   Time taken for tests     Request per second
    --------------------------------------------------------------------------
    cgi    + fcgi                          16.686 [sec]        1198.61 [#/sec]
    cgialt + cgialt/fcgi                   15.562 [sec]        1285.18 [#/sec]
    cgialt + cgialt/fcgi + cgiext          15.310 [sec]        1306.34 [#/sec]


== License

Ruby's license


== Author

makoto kuwata <kwa(at)kuwata-lab.com>


== Bug reports

If you have bugs or questions, report them to kwa(at)kuwata-lab.com.