SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
Rails㛤Ⓨ䛻䛚䛡䜛 
䜻䝱䝑䝅䝳䛒䜜䛣䜜 
ᰴᘧ఍♫䜶䜽䝇䝖䞊䞁 ୗ䛳➃ ㇏⏣㝧୍
௒᪥䛾䛚㢟 
Web䜰䝥䝸䜿䞊䝅䝵䞁㧗㏿໬䛾ᡭẁ 
䜻䝱䝑䝅䝳
䜻䝱䝑䝅䝳䛾┠ⓗ 
䝛䝑䝖䝽䞊䜽㈨※䛾⠇⣙ 
ィ⟬ᶵ㈨※䛾⠇⣙ 
CPU 
䝕䜱䝇䜽I/O 
etc.
䜻䝱䝑䝅䝳ᑟධ䛾䝖䝺䞊䝗䜸䝣 
䝯䝰䝸䞉䝕䜱䝇䜽 
ィ⟬⤖ᯝ䜢஦๓䛻ಖᣢ䛩䜛㡿ᇦ䛜ᚲせ 
䝅䝇䝔䝮䛾」㞧䛥 
䜻䝱䝑䝅䝳䛾᭦᪂䞉◚Რ 
㐺ษ䛻⾜䜟䛺䛔䛸䚸୙ලྜ䛾 ᗋ䛻 
ୖグ䜢⌮ゎ䛧䛶ᚲせ䛺䛸䛣䜝䛻ᑟධ䛩䜛䛣䛸䛜኱஦
Rails䛻䜘䜛Web䜰䝥䝸䜿䞊䝅䝵䞁 
HTTP䝦䝑䝎䛻䜘䜛䝤䝷䜴䝄䛷䛾䜻䝱䝑䝅䝳 
Rails䛜ᥦ౪䛩䜛䜻䝱䝑䝅䝳ᶵᵓ 
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳 
ActiveRecord䛾䜽䜶䝸䜻䝱䝑䝅䝳 
䛭䛾௚䜻䝱䝑䝅䝳
HTTP䝦䝑䝎 
䝇䝔䞊䝍䝇䝁䞊䝗304䜢㏉䛩 
䝺䝇䝫䞁䝇䝦䝑䝎䛾䜏䜢㏉䛧䚸୰㌟䛿䝤䝷䜴䝄ഃ䛾䜻䝱䝑 
䝅䝳䜢฼⏝䛩䜛䜘䛖䛻䝤䝷䜴䝄䛻ᣦ♧ 
304䜢㏉䛩䛛䛹䛖䛛䛾ุᐃ䛿䝃䞊䝞ഃ䛷⾜䛖 
Cache-Control䝦䝑䝎䜢฼⏝䛩䜛 
ETag䜢฼⏝䛩䜛
Rails䛾ሙྜ 
ETag䛻䜘䜛䜻䝱䝑䝅䝳䛿⮬ື䛷⾜䜟䜜䜛 
response.body䛾MD5䝝䝑䝅䝳್䜢ETag䛻 
䝃䞊䝞ഃ䛷䛾䝺䝇䝫䞁䝇⏕ᡂ䛿⾜䜟䜜䜛 
䝛䝑䝖䝽䞊䜽ᖏᇦ䛾⠇⣙䛾䜏 
fresh_when, stale 
Model䛾update_at䜢฼⏝䛧䚸ETag䛸Last-Modified䜢タᐃ 
䝡䝳䞊ᵓ⠏䜢䝇䜻䝑䝥䛷䛝䜛
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳 
Rails䛾䝡䝳䞊䛾䜻䝱䝑䝅䝳ᶵᵓ 
䝡䝳䞊䛾୍㒊ศ䛰䛡䜢䜻䝱䝑䝅䝳䛩䜛䛣䛸䛜ྍ⬟ 
Rails4䛛䜙䝕䝣䜷䝹䝖䛷฼⏝ྍ⬟ 
䝡䝳䞊䛷 cache(key, options) { block } 䜢฼⏝ 
key䛻䝬䝑䝏䛩䜜䜀block䛿ᐇ⾜䛥䜜䛪䜻䝱䝑䝅䝳䜢㏉䛩
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳(cont.) 
<% cache @m do %> 
<p> 
名前: <%= @m.name %> 
</p> 
<ul> 
<% @m.comments.each do |c| %> 
<li> 
<%= c.contents %> 
</li> 
<% end %> 
</ul> 
<% end %> 
(controller) 
def user 
@m = User.where(id: params[:id]) 
end 
(model) 
class User 
has_many :comments, touch: true 
end
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳(cont.) 
<% cache @m do %> 
<p> 
名前: <%= @m.name %> 
</p> 
<ul> 
<% @m.comments.each do |c| %> 
<li> 
<%= c.contents %> 
</li> 
<% end %> 
</ul> 
<% end %> 
(controller) 
def user 
@m = User.where(id: params[:id]) 
end 
(model) 
class User 
has_many :comments, touch: true 
end 
䝰䝕䝹䜢䜻䞊䛻䛩䜛䛸䚸 ID䛸 
updated_at䛛䜙䛺䜛䜻䝱䝑䝅䝳䜻䞊 
䜢సᡂ䛩䜛 
→䝰䝕䝹䛜᭦᪂䛥䜜䜛 
(updated_at䛜᭦᪂䛥䜜䜛)䛸䜻䞊 
䛜ኚ䜟䜛䛾䛷䚸䝡䝳䞊䛜᭦᪂䛥䜜䜛 
㛵㐃䛻touch: true䜢௜୚䛩䜛䛸䚸䛭 
䛾㛵㐃䛜᭦᪂䛥䜜䛯᫬䛻䚸ぶ䛾 
updated_at䜒୍⥴䛻᭦᪂䛥䜜䜛
ActiveRecord䛾䜽䜶䝸䜻䝱䝑䝅䝳 
ྠ୍䛾ཧ↷⣔䜽䜶䝸䛿1䝸䜽䜶䝇䝖䛷」ᩘᅇ࿧䜀䜜 
䛶䜒䚸ᐇ㝿䛾DB࿧䜃ฟ䛧䛿1ᗘ䛧䛛ᐇ⾜䛥䜜䛺䛔
䛭䛾௚䜻䝱䝑䝅䝳 
Rails.cache䜢฼⏝ 
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳䜒ᐇ㝿䛻䛿䛣䜜䜢฼⏝ 
Rails.cache.read(key) 
Rails.cache.write(key, contents, options) 
Rails.cache.fetch { block } 
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳䛿ᇶᮏⓗ䛻ྲྀᚓฟ᮶䛺䛔 
䜻䞊䛻⮬ືⓗ䛻䝔䞁䝥䝺䞊䝖䛾digest䛜㏣ຍ䛥䜜䜛䛯䜑 
䝔䞁䝥䝺䞊䝖᭦᪂᫬䛻⮬ືⓗ䛻䜻䝱䝑䝅䝳䛜䜽䝸䜰䛥䜜䜛
䛭䛾௚䜻䝱䝑䝅䝳(2) 
ActiveRecord䛾䜻䝱䝑䝅䝳 
DB࿧䜃ฟ䛧䜢ῶ䜙䛩 
䛔䜟䜖䜛䜻䝱䝑䝅䝳䛾୍␒䜘䛟䜔䜛᪉ἲ
䛭䛾௚䜻䝱䝑䝅䝳(3) 
ActiveRecord䛾䜻䝱䝑䝅䝳 
DB࿧䜃ฟ䛧䜢ῶ䜙䛩 
䛔䜟䜖䜛䜻䝱䝑䝅䝳䛾୍␒䜘䛟䜔䜛 
᪉ἲ 
def user 
cid = “uid##{params[:id]}” 
@user = Rails.cache.fecth(cid) { 
User.where(params[:id]).first 
} 
end
䛭䛾௚䜻䝱䝑䝅䝳(4) 
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳䛸䛾ే⏝ 
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳䠖䝡䝳䞊⏕ᡂ䛾䝁䝇䝖䜢ῶᑡ 
ActiveRecord䛾䜻䝱䝑䝅䝳: SQL᥋⥆䛾䝁䝇䝖䜢ῶᑡ
␲ၥ 
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳䛾≧ែ䜢䝁䞁䝖䝻䞊䝷䛷ྲྀᚓ 
ฟ᮶䛺䛔䛾䠛 
䛧䛺䛔䛣䛸䛜᥎ዡ䛥䜜䛶䛔䜛䠛 
䝣䝷䜾䝯䞁䝖䜻䝱䝑䝅䝳䛷௜୚䛥䜜䜛digest್䛜䝁䞁䝖䝻䞊䝷䛷ྲྀ䜜䛺䛔䛛䜙ከศ 
↓⌮ 
digest䜢௜୚䛧䛺䛔䜸䝥䝅䝵䞁䛿䛒䜛䛾䛷䚸䛭䜜䜢ᣦᐃ䛩䜜䜀ฟ᮶䜛
䜎䛸䜑 
୍ゝ䛷䜻䝱䝑䝅䝳䛸䛔䛳䛶䜒Ⰽ䚻䛒䜛 
┠ⓗ䜒㐪䛖 
䝕䝯䝸䝑䝖䜒䛭䜜䛺䜚䛻䛒䜛 
㧗㏿໬䠙䜻䝱䝑䝅䝳ᑟධ䛷䜒䛺䛔 
୍ᡭẁ䛷䛿䛒䜛䛜䚸୍ᡭẁ䛷䛧䛛䛺䛔 
ຠᯝ ᐃ䛿䛱䜓䜣䛸䛧䜘䛖

Weitere ähnliche Inhalte

Mehr von Yoichi Toyota

array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねんarray.map(&:key)ってなんやねん
array.map(&:key)ってなんやねんYoichi Toyota
 
はじめてのPull Request
はじめてのPull RequestはじめてのPull Request
はじめてのPull RequestYoichi Toyota
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞYoichi Toyota
 
jqで極めるシェル芸の話
jqで極めるシェル芸の話jqで極めるシェル芸の話
jqで極めるシェル芸の話Yoichi Toyota
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろうYoichi Toyota
 
React Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうReact Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうYoichi Toyota
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかYoichi Toyota
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方Yoichi Toyota
 
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方Yoichi Toyota
 
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活Yoichi Toyota
 
Docker in production
Docker in productionDocker in production
Docker in productionYoichi Toyota
 
How to fight against “full scratch disease”
How to fight against  “full scratch disease”How to fight against  “full scratch disease”
How to fight against “full scratch disease”Yoichi Toyota
 
Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみたYoichi Toyota
 
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンForkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンYoichi Toyota
 
Is the order code deploy?
Is the order code deploy?Is the order code deploy?
Is the order code deploy?Yoichi Toyota
 
React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発Yoichi Toyota
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかYoichi Toyota
 
ActionCableを触ってみた
ActionCableを触ってみたActionCableを触ってみた
ActionCableを触ってみたYoichi Toyota
 
Werckerを使ってみた
Werckerを使ってみたWerckerを使ってみた
Werckerを使ってみたYoichi Toyota
 
Github時代のgitのはなし
Github時代のgitのはなしGithub時代のgitのはなし
Github時代のgitのはなしYoichi Toyota
 

Mehr von Yoichi Toyota (20)

array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねんarray.map(&:key)ってなんやねん
array.map(&:key)ってなんやねん
 
はじめてのPull Request
はじめてのPull RequestはじめてのPull Request
はじめてのPull Request
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞ
 
jqで極めるシェル芸の話
jqで極めるシェル芸の話jqで極めるシェル芸の話
jqで極めるシェル芸の話
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろう
 
React Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうReact Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
 
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方
 
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活
 
Docker in production
Docker in productionDocker in production
Docker in production
 
How to fight against “full scratch disease”
How to fight against  “full scratch disease”How to fight against  “full scratch disease”
How to fight against “full scratch disease”
 
Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみた
 
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンForkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
 
Is the order code deploy?
Is the order code deploy?Is the order code deploy?
Is the order code deploy?
 
React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
 
ActionCableを触ってみた
ActionCableを触ってみたActionCableを触ってみた
ActionCableを触ってみた
 
Werckerを使ってみた
Werckerを使ってみたWerckerを使ってみた
Werckerを使ってみた
 
Github時代のgitのはなし
Github時代のgitのはなしGithub時代のgitのはなし
Github時代のgitのはなし
 

Rails開発におけるキャッシュあれこれ