Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Estratégias para tunar sua aplicação rails
Search
Cirdes
November 29, 2014
Programming
1
64
Estratégias para tunar sua aplicação rails
Palestra na RuPy 2014
Cirdes
November 29, 2014
Tweet
Share
More Decks by Cirdes
See All by Cirdes
Testando aplicações Rails com Playwright
cirdes
0
46
Ferramentas para CTO`s
cirdes
0
48
Aumentando O Poder Do Seu HTML Com AngularJS
cirdes
0
74
Getting Started with Angular.JS
cirdes
2
450
Como desenvolver um produto escalável com uma linguagem: Nova, lente e insegura
cirdes
0
160
Boas práticas usando RSpec
cirdes
0
270
Como construir uma Aplicação que consuma e produza updates no Twitter usando Python.
cirdes
0
32
Other Decks in Programming
See All in Programming
Node.js v22 で変わること
yosuke_furukawa
PRO
11
3.9k
SIMD Parallel Programming with the Vector API
josepaumard
0
230
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
780
Milestoner
bkuhlmann
1
410
Exploring the Implementation of “t.Run”, “t.Parallel”, and “t.Cleanup”
akarin
1
110
Fragment Composition of GraphQL
quramy
13
1.5k
Let's learn code review
riofujimon
2
570
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
27
8.5k
CREってこういうこと? 体験入社 - 提案資料 - / what-is-cre-trial-employment
shinden
1
520
業務ツールとして使うPostman
msys75
0
100
Goのmultiple errorsについて (2024年4月版)
syumai
4
1.2k
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
220
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
125
8.5k
The Cult of Friendly URLs
andyhume
74
5.7k
The Invisible Side of Design
smashingmag
294
49k
Building a Scalable Design System with Sketch
lauravandoore
457
32k
Designing the Hi-DPI Web
ddemaree
276
33k
Faster Mobile Websites
deanohume
300
30k
Building a Modern Day E-commerce SEO Strategy
aleyda
21
6.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
126
32k
Fireside Chat
paigeccino
22
2.6k
Designing Experiences People Love
moore
136
23k
Code Review Best Practice
trishagee
56
15k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Transcript
ESTRATÉGIASDE CACHE PARA TUNAR SUA APLICAÇÃO RAILS
CIRDES HENRIQUE ENGENHEIRO DA COMPUTAÇÃO - UFPE ORGANIZADOR DO ABRIL
PRO RUBY C0-FUNDADOR E DEV DO EVENTICK
None
335 MIL TICKETS EMITIDOS 3600 ORGANIZADORES 1200 EVENTOS FUTUROS
RECIFE
RECIFE
O EVENTICK FICOU FORA DO AR POR 30 MINUTOS
ANTES DA SOLUÇÃO, UM PASSO ATRÁS: MONITORAR A APLICAÇÃO
NewRelic Nazar.io HoneyBadger Logentries Inspectlet The Informant
SOA?
SINGLE RAILS APP LIKE SHOPIFY
70% DAS REQUISIÇÕES BATEM NA CACHE
O QUE É CACHE?
Cache é um componente que guarda informações de forma TRANSPARENTE
para que futuras requisições sejam mais RÁPIDAS
QUAL A CARACTERÍSTICA DA CACHE?
O QUE USA CACHE?
DO QUE É CONSTITUÍDA UMA CACHE?
CACHE = CASH
ARQUITETURA DE MEMÓRIA
CACHE HIT / CACHE MISS / CACHE RATIO
COMO MAXIMIZAR O CACHE HIT?
BÉLÁDY’S ALGORITHM
RANDOM REPLACEMENT (RR)
LEAST-FREQUENTLY USED (LFU)
LEAST-RECENTLY USED (LRU)
O QUE É WEBCACHING?
REQUISIÇÃO Rails App Reverse Proxy CDN Proxy Browser
CACHE SERVER-SIDE CACHE CLIENT-SIDE
PAGE CACHE ACTION CACHE FRAGMENT CACHE RAILS CACHE
WRITE ON DISK BYPASS RAILS APPLICATION ENTIRE STATELESS PAGES NÃO
FUNCIONA NO HEROKU PAGE CACHE
PAGE CACHE class WeblogController < ActionController::Base caches_page :show, :new def
update expire_page action: 'show', id: params[:list][:id] end end
SIMILAR TO PAGE CACHE RUN FILTERS ACTION CACHE
ACTION CACHE class PostsController < ActionController::Base caches_action :show, expires_in: 1.hour
end
DEPRECATED
HTML CACHE AVAILABLE IN RAILS 4 FRAGMENT CACHE
RAILS CACHE FRAGMENT AND ACTION CACHE BUILD ON RAILS.CACHE CONFIG.ACTION_CONTROLLER.PERFORM_CACHING
= TRUE
ActiveSupport::Cache::Store FileStore MemoryStore NullStore MemCacheStore
HOW TO USE IT Rails.cache.write 'foo', 'bar' Rails.cache.fetch 'foo' Rails.cache.write
:foo, {a: 'b'}
FRAGMENT CACHING Rais.cache.fetch 'key', expires_in: 5.minutes, race_condition_ttl: 10.seconds do #code
end
FRAGMENT CACHING <% cache "event-#{event.id}" do %> <%= render event
%> <% end %>
FRAGMENT CACHING <% cache “event-#{event.id}”, expires_in: 1.year do %> <%=
render event %> <% end %>
FRAGMENT CACHING def update expire_fragment("event-#{event.id}") end
FRAGMENT CACHING <% cache [:recent, event] do %> <%= render
event %> <% end %>
FRAGMENT CACHING ACTIVESUPPORT::CACHE.EXPAND_CACHE_KEY [:RECENT, EVENT] => "RECENT/EVENTS/12510-20141128131506743910000"
FRAGMENT CACHING <% cache :recent_attendees, expires_in: 5.minutes do %> <%=
render partial: 'recent', collection: Attendees.recent %> <% end %>
FRAGMENT CACHING <% cache(cache_key_for_attendees) do %> <%= render partial: 'recent',
collection: Attendees.recent %> <% end %>
FRAGMENT CACHING module AttendeesHelper def cache_key_for_attendees count = Attendee.count max_updated_at
= Attendee.maximum(:updated_at).try(:utc).try(:to_s, :number) "attendees/all-#{count}-#{max_updated_at}" end end
FRAGMENT CACHING <% cache(cache_key_for_attendees) do %> <%= render partial: 'recent',
collection: Attendees.recent %> <% end %>
PROBLEMA COM TEMPLATE
CACHE Digests <!-- app/views/events/show.html.erb --> <% cache ["v1", @event] do%>
<h1>Team: <%= @event.title %></h1> <%= render @event.attendees %> <% end %> <!-- app/views/attendees/_attendee.html.erb --> <% cache ["v1", attendee] do %> <span><%= attendee.name %></span> <span><%= attendee.email %></span> <% end %>
CACHE Digests
CACHE Digests
RUSSIAN DOLL
Russian Doll
Russian Doll <% cache(cache_key_for_attendees) do %> All available attendees: <%
Attendee.all.each do |a| %> <% cache(a) do %> <p><%= a.name %></p> <% end %> <% end %> <% end %>
KNOWING IS NOT ENOUGH WE MUST APPLY
WILLING IS NOT ENOUGH WE MUST DO