From: Daniel Berger Date: 2007-04-28T04:30:04+09:00 Subject: Re: Net::LDAP vs ruby/ldap On Apr 27, 1:07 pm, dacat wrote: > The basic premise of this test was to see how long it would take to do > the following: > > 1000 Basic lookups on a known attribute/value pair over an unencrypted > connection using anonymous bind for each library. > > This post is for informational purposes, I knew the NET::LDAP lib > would be slower but I wanted to see by how much. > {if you are new to ruby, the reason it is slower is because its a TRUE > ruby implementation of the LDAP rfc. while on the other hand the ruby/ > ldap lib is a C front end to the openldap library} > > Bottom line is -- I just figured i would share. > Code: > ---------------- > require 'benchmark' > include Benchmark > > LOOP_COUNT = 1000 > require 'ldap' > require 'net/ldap' > > HOST = 'somehost.com' > S_ATTR = 'some attribute that exists that can be lookedup' > S_VAL = 'a value for the attribute that iss valid' > TREE_BASE = 'a valid base ex. o=com' > > class LdapTest > > def net_ldap_test > ldap = Net::LDAP.new :host => HOST, :port => 389 > filter = Net::LDAP::Filter.eq( S_ATTR, S_VAL ) > ldap.search( :base =>TREE_BASE, :filter => filter ) do |entry| > a=entry.dn > end > nil > end > > def ldap_test > conn = LDAP::Conn.new(HOST, LDAP::LDAP_PORT) > filter = "(#{S_ATTR}=#{S_VAL})" > conn.search(TREE_BASE, LDAP::LDAP_SCOPE_SUBTREE, filter) do |entry| > a=entry.dn > end > nil > end > > ldap_test=LdapTest.new > > Benchmark.bm(15) do |x| > x.report("NET::LDAP:") { for i in 1..LOOP_COUNT; > ldap_test.net_ldap_test; end } > x.report("ruby-ldap") { for i in 1..LOOP_COUNT ; > ldap_test.ldap_test; end } > end > end > =============================================================== > > My results. > user system total real > NET::LDAP: 7.150000 0.580000 7.730000 ( 19.494588) > ruby-ldap 0.210000 0.120000 0.330000 ( 11.853484) > > ruby/ldap :http://ruby-ldap.sourceforge.net/ > net::ldap :http://rubyforge.org/projects/net-ldap/ > > ruby --version > ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux] While it's interesting, I'm afraid I have to stick with net-ldap. The problem with ruby-ldap is that it segfaults in conjunction with WEBrick, as I know all too well. Regards, Dan