рдкрдЯрд░рд┐рдпреЛрдВ рдкрд░ рд░реВрдмреА рдореЗрдВ рдмрд┐рдЬрд▓реА рдХреА рддреЗрдЬреА рд╕реЗ JSON

JSON рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд░реЗрд▓ рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:

render json: @statuses 

рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рддреБрд░рдВрдд 10'000 рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдкреНрд░рджрд░реНрд╢рди рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ JSON рдХреНрд░рдорд╛рдВрдХрди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрдЧрд╛ред



рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ


рдкрд╣рд▓рд╛ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ JSON рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд:

 render json: @statuses, methods: [:latitude, :longitude, :timestamp, :virtual_odometer] 

рдлрд╝рд┐рд▓реНрдЯрд░ JSON рд╣рдореЗрдВ 20% рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдЧрд╛:

 default 5.940000 0.080000 6.020000 ( 6.094221) attrs 4.820000 0.010000 4.830000 ( 4.932337) 


рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ


рджреВрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рд▓реЗрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред

 render json: @statuses.select([:latitude, :longitude, :timestamp, :virtual_odometer]) 

рдпрд╣ рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдореЗрдВ 2x рдЧрддрд┐ рд╡реГрджреНрдзрд┐ рджреЗрдЧрд╛:

 default 5.940000 0.080000 6.020000 ( 6.094221) attrs 4.820000 0.010000 4.830000 ( 4.932337) select 2.170000 0.020000 2.190000 ( 2.222277) 


рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ ActiveRecord рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рди рдХрд░реЗрдВред


рдЪрд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ ActiveRecord рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп "рд▓рд╛рдЗрдЯрдирд┐рдВрдЧ рдлрд╝рд╛рд╕реНрдЯ" рд╣реИрд╢ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдЧрд╛:

 def self.lightning connection.select_all(select([:latitude, :longitude, :timestamp, :virtual_odometer]).arel).each do |attrs| attrs.each_key do |attr| attrs[attr] = type_cast_attribute(attr, attrs) end end end 

рдпрд╣ рдкреНрд▓рдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдлрд╝реАрд▓реНрдб рд╕реЗ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╣реИрд╢ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдирдП рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:

 render json: @statuses.lightning 

рд╣рд▓реНрдХреЗ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JSON рдирд┐рд░реНрдорд╛рдг рдХреЛ 2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИ:

 default 5.940000 0.080000 6.020000 ( 6.094221) attrs 4.820000 0.010000 4.830000 ( 4.932337) select 2.170000 0.020000 2.190000 ( 2.222277) lightning 1.120000 0.010000 1.130000 ( 1.148763) 


рд╕рдмрд╕реЗ рддреЗрдЬ JSON рдбрдореНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдХрдИ JSON рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ:

 json 0.810000 0.020000 0.830000 ( 0.841307) yajl 0.760000 0.020000 0.780000 ( 0.809903) oj 0.640000 0.010000 0.650000 ( 0.666230) 

рдЗрд╕рд▓рд┐рдП рд╣рдо рдУрдЬ рдбрдореНрдкрд░ рдЪреБрдирддреЗ рд╣реИрдВ:

 render json: Oj.dump(@statuses.lightning, mode: :compat) 

рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо:

  user system total real default 5.940000 0.080000 6.020000 ( 6.094221) attrs 4.820000 0.010000 4.830000 ( 4.932337) select 2.170000 0.020000 2.190000 ( 2.222277) lightning 1.120000 0.010000 1.130000 ( 1.148763) json 0.810000 0.020000 0.830000 ( 0.841307) yajl 0.760000 0.020000 0.780000 ( 0.809903) oj 0.640000 0.010000 0.650000 ( 0.666230) 

Source: https://habr.com/ru/post/In152719/


All Articles