From: Eric Wong <normalperson@yhbt.net>
To: rack-devel@googlegroups.com
Subject: [PATCH 0/3] support reuse of HeaderHash objects
Date: Fri, 4 Sep 2009 14:41:51 -0700 [thread overview]
Message-ID: <1252100514-2748-1-git-send-email-normalperson@yhbt.net> (raw)
HeaderHash objects are needlessly created and discarded by various
pieces of Rack middleware, leading to unnecessary overhead
from both object creation + GC and iteration overhead via
headers#each.
Enable and promote the reuse of them by making HeaderHash.new
idempotent iff a HeaderHash object is passed to the class method.
These changes resulted in a 20-25% increase in performance
with the following simple config.ru:
------------- config.ru ---------------
use Rack::ContentLength
use Rack::Deflater
use Rack::ContentType
use Rack::ShowExceptions
run Rack::Lobster.new
---------------- 8< -------------------
Responses with more headers (especially those with multiple Set-Cookie
headers) are expected to benefit even more. This adds a small amount of
overhead in that it adds a conditional to HeaderHash.new, so
applications that only use HeaderHash.new once in the entire request
cycle will suffer slightly. However, the majority of applications
should benefit if they use more than one middleware.
Independent benchmarks on real applications are very much encouraged,
thanks.
Lighthouse ticket:
http://rack.lighthouseapp.com/projects/22435-rack/tickets/74
Pull URL:
git://git.bogomips.org/rack.git
cgit browser:
http://git.bogomips.org/cgit/rack.git
Eric Wong (3):
HeaderHash.new avoids unnecessary object creation
avoid HeaderHash#to_hash in middlewares
CommonLogger uses HeaderHash to lookup Content-Length
lib/rack/chunked.rb | 4 ++--
lib/rack/commonlogger.rb | 9 +++------
lib/rack/content_type.rb | 2 +-
lib/rack/response.rb | 4 ++--
lib/rack/utils.rb | 4 ++++
test/spec_rack_utils.rb | 8 ++++++++
6 files changed, 20 insertions(+), 11 deletions(-)
next reply other threads:[~2009-09-04 21:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-04 21:41 Eric Wong [this message]
2009-09-04 21:41 ` [PATCH 1/3] HeaderHash.new avoids unnecessary object creation Eric Wong
2009-09-04 21:41 ` [PATCH 2/3] avoid HeaderHash#to_hash in middlewares Eric Wong
2009-09-04 21:41 ` [PATCH 3/3] CommonLogger uses HeaderHash to lookup Content-Length Eric Wong
2009-09-28 10:14 ` [PATCH 4/3] HeaderHash#each yields Lint-OK multivalue headers Eric Wong
2010-01-05 23:58 ` [PATCH 0/3] support reuse of HeaderHash objects Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://groups.google.com/group/rack-devel
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1252100514-2748-1-git-send-email-normalperson@yhbt.net \
--to=rack-devel@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).