From: Eric Wong <e@80x24.org>
To: rainbows-public@bogomips.org
Subject: [PATCH 1/5] tiny bytecode reductions for cold paths
Date: Sat, 21 Nov 2015 08:52:28 +0000 [thread overview]
Message-ID: <20151121085232.23086-2-e@80x24.org> (raw)
In-Reply-To: <20151121085232.23086-1-e@80x24.org>
Less code in cold paths can improve speed for hot paths.
Single-byte strings for String#split is optimized in mainline Ruby,
so it's not actually a performance loss for sendfile_range in
response.rb
Regexps are at least 400 bytes each, so prefer non-Regexps
if possible, especially for cold sites where performance does
not matter.
---
lib/rainbows/http_server.rb | 4 ++--
lib/rainbows/response.rb | 4 ++--
lib/rainbows/stream_response_epoll.rb | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/rainbows/http_server.rb b/lib/rainbows/http_server.rb
index 429539c..33bb96c 100644
--- a/lib/rainbows/http_server.rb
+++ b/lib/rainbows/http_server.rb
@@ -82,10 +82,10 @@ def svc
end
def use=(mod)
- @use = mod.to_s.split(/::/)[-1].to_sym
+ @use = mod.to_s.split('::')[-1].to_sym
new_defaults = {
'rainbows.model' => @use,
- 'rack.multithread' => !!(mod.to_s =~ /Thread/),
+ 'rack.multithread' => mod.to_s.include?('Thread'),
'rainbows.autochunk' => [:Coolio,:Rev,:Epoll,:XEpoll,
:EventMachine,:NeverBlock].include?(@use),
}
diff --git a/lib/rainbows/response.rb b/lib/rainbows/response.rb
index 0b5e542..9bbea81 100644
--- a/lib/rainbows/response.rb
+++ b/lib/rainbows/response.rb
@@ -40,7 +40,7 @@ def write_headers(status, headers, alive, body)
else
if /\n/ =~ value
# avoiding blank, key-only cookies with /\n+/
- buf << value.split(/\n+/).map! { |v| "#{key}: #{v}\r\n" }.join
+ value.split(/\n+/).each { |v| buf << "#{key}: #{v}\r\n" }
else
buf << "#{key}: #{value}\r\n"
end
@@ -151,7 +151,7 @@ def sendfile_range(status, headers)
200 == status &&
/\Abytes=(\d+-\d*|\d*-\d+)\z/ =~ @hp.env['HTTP_RANGE'] or
return
- a, b = $1.split(/-/)
+ a, b = $1.split('-'.freeze)
# HeaderHash is quite expensive, and Rack::File currently
# uses a regular Ruby Hash with properly-cased headers the
diff --git a/lib/rainbows/stream_response_epoll.rb b/lib/rainbows/stream_response_epoll.rb
index 7c2f4f6..48ef298 100644
--- a/lib/rainbows/stream_response_epoll.rb
+++ b/lib/rainbows/stream_response_epoll.rb
@@ -39,7 +39,7 @@ def http_response_write(socket, status, headers, body)
else
if /\n/ =~ value
# avoiding blank, key-only cookies with /\n+/
- buf << value.split(/\n+/).map! { |v| "#{key}: #{v}\r\n" }.join
+ value.split(/\n+/).each { |v| buf << "#{key}: #{v}\r\n" }
else
buf << "#{key}: #{value}\r\n"
end
--
EW
next prev parent reply other threads:[~2015-11-21 8:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-21 8:52 [PATCH 0/5] a few more odds and ends before 5.0 Eric Wong
2015-11-21 8:52 ` Eric Wong [this message]
2015-11-21 8:52 ` [PATCH 2/5] Ruby 1.9.3+-only cleanups Eric Wong
2015-11-21 8:52 ` [PATCH 3/5] response: avoid garbage string entirely Eric Wong
2015-11-21 8:52 ` [PATCH 4/5] revactor: remove fcntl dependency Eric Wong
2015-11-21 8:52 ` [PATCH 5/5] response: simplify regexp 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-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://yhbt.net/rainbows/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151121085232.23086-2-e@80x24.org \
--to=e@80x24.org \
--cc=rainbows-public@bogomips.org \
/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.
Code repositories for project(s) associated with this public inbox
https://yhbt.net/rainbows.git/
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).