mirror of
https://github.com/discourse/discourse.git
synced 2025-03-25 17:21:39 +08:00
PERF: Reduce allocations in Emoji.unicode_replacements
.
``` MemoryProfiler.report { Emoji.unicode_replacements }.pretty_print ``` Before: ``` Total allocated: 2032131 bytes (30219 objects) Total retained: 798059 bytes (10734 objects) allocated memory by gem ----------------------------------- 1270762 discourse/app 690149 2.4.1/lib 48764 activesupport-4.2.8 11405 bootsnap-1.0.0 5266 logster-1.2.7 2473 hiredis-0.6.1 2056 redis-3.3.3 840 discourse/lib 240 activerecord-4.2.8 176 thread_safe-0.3.6 ``` After: ``` Total allocated: 1715713 bytes (22449 objects) Total retained: 797985 bytes (10737 objects) allocated memory by gem ----------------------------------- 957250 discourse/app 690028 2.4.1/lib 48764 activesupport-4.2.8 11445 bootsnap-1.0.0 2745 hiredis-0.6.1 2624 redis-3.3.3 1473 logster-1.2.7 928 discourse/lib 280 activerecord-4.2.8 176 thread_safe-0.3.6 ```
This commit is contained in:
parent
40ef5c4f14
commit
fa35137d3a
@ -108,10 +108,9 @@ class Emoji
|
||||
end
|
||||
|
||||
def self.replacement_code(code)
|
||||
hexes = code.split('-').map(&:hex)
|
||||
|
||||
hexes = code.split('-'.freeze).map!(&:hex)
|
||||
# Don't replace digits, letters and some symbols
|
||||
return hexes.pack("U" * hexes.size) if hexes[0] > 255
|
||||
hexes.pack("U*".freeze) if hexes[0] > 255
|
||||
end
|
||||
|
||||
def self.unicode_replacements
|
||||
@ -119,18 +118,20 @@ class Emoji
|
||||
|
||||
@unicode_replacements = {}
|
||||
is_tonable_emojis = Emoji.tonable_emojis
|
||||
fitzpatrick_scales = FITZPATRICK_SCALE.map { |scale| scale.to_i(16) }
|
||||
|
||||
db['emojis'].each do |e|
|
||||
next if e['name'] == 'tm'
|
||||
name = e['name']
|
||||
next if name == 'tm'.freeze
|
||||
|
||||
code = replacement_code(e['code'])
|
||||
next unless code
|
||||
|
||||
@unicode_replacements[code] = e['name']
|
||||
if is_tonable_emojis.include?(e['name'])
|
||||
FITZPATRICK_SCALE.each_with_index do |scale, index|
|
||||
toned_code = (code.codepoints.insert(1, scale.to_i(16))).pack("U*")
|
||||
@unicode_replacements[toned_code] = "#{e['name']}:t#{index+2}"
|
||||
@unicode_replacements[code] = name
|
||||
if is_tonable_emojis.include?(name)
|
||||
fitzpatrick_scales.each_with_index do |scale, index|
|
||||
toned_code = code.codepoints.insert(1, scale).pack("U*".freeze)
|
||||
@unicode_replacements[toned_code] = "#{name}:t#{index+2}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user