summary refs log tree commit
path: root/lib/rack/commonlogger.rb
diff options
context:
space:
mode:
authorschneems <richard.schneeman@gmail.com>2014-10-01 18:09:37 -0500
committerschneems <richard.schneeman@gmail.com>2014-10-02 07:42:20 -0500
commitdc53a8c26dc55d21240233b3d83d36efdef6e924 (patch)
tree991037ede0df148b5aef7137f321591401f98d53 /lib/rack/commonlogger.rb
parenta71be3c914c10d1089238f4e21b029b885be4029 (diff)
downloadrack-dc53a8c26dc55d21240233b3d83d36efdef6e924.tar.gz
Less allocated objects on each request
How many? Using `memory_profiler` and a Rails app (codetriage.com), master uses:

```
rack/lib x 7318
```

After this patch, the app uses:

```
rack/lib x 4598
```

Or `(7318 - 4598) / 7318.0 * 100 # => 37.16` % fewer objects __PER REQUEST__.

To do this, I extracted really commonly used strings into top level Rack constants. It makes for a bit of a big diff, but I believe the changes are worth it. 

Running benchmark/ips against the same app, I'm seeing a performance host of `2~4%` across the entire app response. This doesn't just make Rack faster, it will make your app faster.

While we could certainly go overboard and pre-define ALL strings as constants, that would be pretty gnarly to work with. This patch goes after the largest of the low hanging fruit.
Diffstat (limited to 'lib/rack/commonlogger.rb')
-rw-r--r--lib/rack/commonlogger.rb8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/rack/commonlogger.rb b/lib/rack/commonlogger.rb
index 1c99045e..d2d6dc34 100644
--- a/lib/rack/commonlogger.rb
+++ b/lib/rack/commonlogger.rb
@@ -46,9 +46,9 @@ module Rack
         env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-",
         env["REMOTE_USER"] || "-",
         now.strftime("%d/%b/%Y:%H:%M:%S %z"),
-        env["REQUEST_METHOD"],
-        env["PATH_INFO"],
-        env["QUERY_STRING"].empty? ? "" : "?"+env["QUERY_STRING"],
+        env[REQUEST_METHOD],
+        env[PATH_INFO],
+        env[QUERY_STRING].empty? ? "" : "?"+env[QUERY_STRING],
         env["HTTP_VERSION"],
         status.to_s[0..3],
         length,
@@ -65,7 +65,7 @@ module Rack
     end
 
     def extract_content_length(headers)
-      value = headers['Content-Length'] or return '-'
+      value = headers[CONTENT_LENGTH] or return '-'
       value.to_s == '0' ? '-' : value
     end
   end