Permalink
Browse files

uri/common: reduce allocations and retained objects

Thanks to Sam Saffron for this patch, it shows
a nice reduction which affects many web applications:

  require 'memory_profiler'

  MemoryProfiler.report do
    require 'uri'
  end.pretty_print

Before:

Total allocated: 986643 bytes (15159 objects)
Total retained:  246370 bytes (2532 objects)

After:

Total allocated: 926903 bytes (13665 objects)
Total retained:  208570 bytes (1587 objects)

* lib/uri/common.rb: reduce allocations and retained objects
  [ruby-core:85161] [Feature #14410]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information...
normal
normal committed Jan 28, 2018
1 parent 2e12695 commit 26b3dc49226011469bfe29af0f882b06215388a5
Showing with 8 additions and 8 deletions.
  1. +8 −8 lib/uri/common.rb
@@ -1,4 +1,4 @@
# frozen_string_literal: false
# frozen_string_literal: true
#--
# = uri/common.rb
#
@@ -342,17 +342,17 @@ def self.regexp(schemes = nil)

TBLENCWWWCOMP_ = {} # :nodoc:
256.times do |i|
TBLENCWWWCOMP_[i.chr] = '%%%02X' % i
TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
end
TBLENCWWWCOMP_[' '] = '+'
TBLENCWWWCOMP_.freeze
TBLDECWWWCOMP_ = {} # :nodoc:
256.times do |i|
h, l = i>>4, i&15
TBLDECWWWCOMP_['%%%X%X' % [h, l]] = i.chr
TBLDECWWWCOMP_['%%%x%X' % [h, l]] = i.chr
TBLDECWWWCOMP_['%%%X%x' % [h, l]] = i.chr
TBLDECWWWCOMP_['%%%x%x' % [h, l]] = i.chr
TBLDECWWWCOMP_[-('%%%X%X' % [h, l])] = -i.chr
TBLDECWWWCOMP_[-('%%%x%X' % [h, l])] = -i.chr
TBLDECWWWCOMP_[-('%%%X%x' % [h, l])] = -i.chr
TBLDECWWWCOMP_[-('%%%x%x' % [h, l])] = -i.chr
end
TBLDECWWWCOMP_['+'] = ' '
TBLDECWWWCOMP_.freeze
@@ -468,7 +468,7 @@ def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_
if isindex
if sep.empty?
val = key
key = ''
key = +''

This comment has been minimized.

@DmitryBochkarev

DmitryBochkarev Jan 30, 2018

Is this correct @SamSaffron, shouldn't it be '+'?

This comment has been minimized.

@SamSaffron

SamSaffron Jan 30, 2018

Yes it is correct:

irb(main):002:0> (-"").frozen?
=> true
irb(main):003:0> (+(-"")).frozen?
=> false
end
isindex = false
end
@@ -482,7 +482,7 @@ def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_
if val
val.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
else
val = ''
val = +''
end

ary << [key, val]

0 comments on commit 26b3dc4

Please sign in to comment.