Railsアプリ開発環境の高速化

 Railsアプリ開発環境の高速化

開発環境のパフォーマンスチューニング - クックパッド開発者ブログ
http://techlife.cookpad.com/entry/2015/10/13/101031

cookpad/chanko - GitHub
https://github.com/cookpad/chanko

開発環境のデータをできるだけ本番に近づける - クックパッド開発者ブログ
http://techlife.cookpad.com/entry/2014/10/03/110806

分散テスト実行システムRRRSpecをリリースしました - クックパッド開発者ブログ
http://techlife.cookpad.com/entry/2014/03/24/rrrspec/

Scalable Deployments - How we deploy Rails app to 150+ hosts in a minute
https://speakerdeck.com/sorah/scalable-deployments-how-we-deploy-rails-app-to-150-plus-hosts-in-a-minute

cookpad/reuse_query_results - GitHub
https://github.com/cookpad/reuse_query_results

08d5432a5bc31e6d9edec87b94cb1db1?s=128

Takashi Kokubun

January 23, 2016
Tweet

Transcript

  1. 7.

    ΫοΫύουͷշదͳ։ൃ؀ڥ • ػೳ։ൃ • ߴ଎ͳϓϩτλΠϐϯά Chanko • ຊ൪͔ΒϨϓϦ͞ΕΔ։ൃ༻DB • ςετ࣮ߦ

    • ෼ࢄRSpec࣮ߦ RRRSpec (@eudoxa, @r7kamura) (@adorechic, @sorah) (@draftcode, @eagletmt)
  2. 8.

    ΫοΫύουͷշదͳ։ൃ؀ڥ • ػೳ։ൃ • ߴ଎ͳϓϩτλΠϐϯά Chanko • ຊ൪͔ΒϨϓϦ͞ΕΔ։ൃ༻DB • ςετ࣮ߦ

    • ෼ࢄRSpec࣮ߦ RRRSpec • σϓϩΠ • ߴ଎ͳσϓϩΠπʔϧ Mamiya (@eudoxa, @r7kamura) (@adorechic, @sorah) (@draftcode, @eagletmt) (@sorah)
  3. 13.

    DPPLQBEDPNͷΞηοτϓϦίϯύΠϧ $ time rake assets:precompile 1436.01 real 1092.28 user 338.06

    sys • ΞηοτϓϦίϯύΠϧʹ23෼56ඵ͔͔Δ • 2.5 GHz Inel Core i7, SSD Ͱͷܭଌ
  4. 22.

    3BJMTΞϓϦߴ଎Խ($ • ϦΫΤετॲཧதʹGC͕΄ͱΜͲ૸Βͳ͍Α͏ʹ͢Δ • WEBrickʹϞϯΩʔύον͢ΔͷΛආ͚ૄ݁߹ʹ͢ΔͨΊɺ Rack middleware ͰεΠον͢Δ • Ruby

    2.0.0Λ࢖͍ͬͯͨ౰࣌͸ޮՌ͕͕͋ͬͨɺ2.2Ͱ͸ࠩ ͕খ͘͞ͳ͍ͬͯͨ • ࠷৽ͷRuby࢖͏ͷେࣄ ࢪࡦ: GC.disable
  5. 25.

    3BJMTΞϓϦߴ଎Խ"TTFU • config.assets.digest = true ʹ͢Δ͚ͩ (Railsඪ४) • Cache-Control: no-cache

    → public, max-age=31536000 • ͨͩ͠ Sprockets 2 ͩͱ 304 ࣌ʹ no-cache ʹͳΔ • ࠷৽ͷgemΛ࢖͍ඪ४ͷઃఆʹै͓ͬͯ͘ͱupstream͔Β ྑ͍ԸܙΛड͚ΒΕΔ ࢪࡦ1: ΞηοτͷϦΫΤετΛϒϥ΢βͰΩϟογϡ
  6. 27.

    3BJMTΞϓϦߴ଎Խ"TTFU • Ͳͷϖʔδ΋ڞ௨ͰಡΈࠐΜͰΔେ͖ͳౕ͚ͩ੾Δ • stylesheet_link_tag '...', debug: false • javascript_include_tag

    '...', debug: false • require਺ͱಉ͡਺͚ͩ͋Δscriptλά͕1ͭʹͳΔ • debug: false ʹ͢ΔͱϓϦίϯύΠϧର৅ʹೖ͍ͬͯΔ͔ͳͲ ͷ֬ೝΛͯ͘͠Εͳ͘ͳΔͷͰɺςετͰ֬ೝ͢ΔΑ͏ʹͨ͠ ࢪࡦ2: sprockets-railsͷσόοάػೳΛ੾Δ
  7. 32.

    Ͳ͕͜஗͍͔ • ֤֦ுࢠʹର͔͔͍ͯͬͯ͠Δ࣌ؒͷ߹ܭΛܭଌ • .css: 71.0% • .js: 22.6% •

    1ճͷίϯύΠϧͰԿʹ࣌ؒΛ࢖͍ͬͯΔ͔ • 70%: sass.gem ΍ execjs.gem (nodejs runtime) • 30%: શΞηοτڞ௨ͷॲཧ (Sprockets)
  8. 38.

    • libsass: sassͷC++࣮૷ • sassc-ruby, sassc-rails͔Β࢖͑Δ • Sprockets 4Ͱඪ४αϙʔτ •

    ΄΅sass 3.4ޓ׵ͳͷͰsass 3.4ʹҠߦͰ͖ͯclang͔gcc 4.6 Ҏ্͕࢖͑Ε͹ಈ͘ MJCTBTTͷಋೖ
  9. 40.

    ຅ΞΠσΞ • Ωϟογϡͳ͠Ͱ଎͘͢ΔΞΠσΞ͸·ͩ͋ͬͨ • Sprockets 2 ʹ໭͢ (5෼58ඵ → 3෼14ඵ)

    • Rails 5͕Sprockets 3Ҏ্ཁٻ͖ͯͨ͠ΒࠔΔ • therubyracerΛ࢖͏ (3෼14ඵ → 1෼58ඵ) • Ϗϧυ΍֦ுࣗମ͕ෆ҆ఆͰӡ༻ίετ͕ߴ͍