From 8f48f434ae2f0880222def2e7815149872762733 Mon Sep 17 00:00:00 2001 From: iris Date: Tue, 11 Mar 2025 12:15:21 +0300 Subject: [PATCH] optimize --- .gitignore | 2 + Gemfile | 2 + Gemfile.lock | 8 ++++ Screenshot_2025-03-11_14-14-41.png | Bin 0 -> 17207 bytes app/views/stories/_main_stories_feed.html.erb | 4 +- case-study.md | 41 ++++++++++++++++++ 6 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 Screenshot_2025-03-11_14-14-41.png create mode 100644 case-study.md diff --git a/.gitignore b/.gitignore index 53c5b710..e8d2c25f 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,8 @@ latest.dump /public/packs-test /node_modules config/database.yml +/config/newrelic.yml + # Ignore storybook static site generation storybook-static/ diff --git a/Gemfile b/Gemfile index b107eb92..2c197203 100644 --- a/Gemfile +++ b/Gemfile @@ -62,6 +62,7 @@ gem "jquery-rails", "~> 4.3" gem "kaminari", "~> 1.1" gem "libhoney", "~> 1.11" gem "liquid", "~> 4.0" +gem 'newrelic_rpm' gem "nokogiri", "~> 1.10" gem "octokit", "~> 4.13" gem "omniauth", "~> 1.9" @@ -75,6 +76,7 @@ gem "pundit", "~> 2.0" gem "pusher", "~> 1.3" gem "pusher-push-notifications", "~> 1.0" gem "rack-host-redirect", "~> 1.3" +gem 'rack-mini-profiler' gem "rack-timeout", "~> 0.5" gem "rails", "~> 5.1.6" gem "rails-assets-airbrake-js-client", "~> 1.5", source: "https://rails-assets.org" diff --git a/Gemfile.lock b/Gemfile.lock index 130d7472..42de0915 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -646,9 +646,12 @@ GEM net-smtp (0.5.1) net-protocol netrc (0.11.0) + newrelic_rpm (9.17.0) nio4r (2.7.4) nokogiri (1.15.7-aarch64-linux) racc (~> 1.4) + nokogiri (1.15.7-x86_64-linux) + racc (~> 1.4) notiffany (0.1.3) nenv (~> 0.1) shellany (~> 0.0) @@ -726,6 +729,8 @@ GEM rack (2.2.11) rack-host-redirect (1.3.0) rack + rack-mini-profiler (3.3.1) + rack (>= 1.2.0) rack-protection (2.2.4) rack rack-proxy (0.7.7) @@ -1011,6 +1016,7 @@ GEM PLATFORMS aarch64-linux + x86_64-linux DEPENDENCIES actionpack-action_caching (~> 1.2) @@ -1081,6 +1087,7 @@ DEPENDENCIES liquid (~> 4.0) memory_profiler (~> 0.9) nakayoshi_fork + newrelic_rpm nokogiri (~> 1.10) octokit (~> 4.13) omniauth (~> 1.9) @@ -1098,6 +1105,7 @@ DEPENDENCIES pusher (~> 1.3) pusher-push-notifications (~> 1.0) rack-host-redirect (~> 1.3) + rack-mini-profiler rack-timeout (~> 0.5) rails (~> 5.1.6) rails-assets-airbrake-js-client (~> 1.5)! diff --git a/Screenshot_2025-03-11_14-14-41.png b/Screenshot_2025-03-11_14-14-41.png new file mode 100644 index 0000000000000000000000000000000000000000..a975d962df9fd5ef72913c641c7d4a4faa9f8a0c GIT binary patch literal 17207 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 literal 0 HcmV?d00001 diff --git a/app/views/stories/_main_stories_feed.html.erb b/app/views/stories/_main_stories_feed.html.erb index b6cd0a65..1bb23c18 100644 --- a/app/views/stories/_main_stories_feed.html.erb +++ b/app/views/stories/_main_stories_feed.html.erb @@ -55,7 +55,9 @@ <% if !user_signed_in? && i == 4 %> <%= render "stories/sign_in_invitation" %> <% end %> - <%= render "articles/single_story", story: story %> + <%= cache ['single_story', story], expires_in: 24.hours do %> + <%= render "articles/single_story", story: story %> + <% end %> <% end %> <% end %> <% if @stories.size > 1 %> diff --git a/case-study.md b/case-study.md new file mode 100644 index 00000000..1e896542 --- /dev/null +++ b/case-study.md @@ -0,0 +1,41 @@ +# Case-study оптимизации + +ApacheBench: +``` +Concurrency Level: 5 +Time taken for tests: 47.600 seconds +Complete requests: 100 +Failed requests: 0 +Total transferred: 15984100 bytes +HTML transferred: 15937400 bytes +Requests per second: 2.10 [#/sec] (mean) +Time per request: 2380.021 [ms] (mean) +Time per request: 476.004 [ms] (mean, across all concurrent requests) +Transfer rate: 327.93 [Kbytes/sec] received + +``` +В задаче имеется подсказка, что заметное время занимает рендеринг partial-ов single_story.html.erb. Однако я этого не увидела + +**rack-mini-profiler** показывает первую загрузку страницы за 7480ms, повторные же в пределах 700ms из-за встроенных кэшей +Наибольшее время (2250ms) `articles/_sidebar.html.erb` + +**New Relic** +Web transactions time - 2600ms из них ruby занимает 2008ms. +most time consuming - stories#index +stories#index - 790ms +layouts/application.html.erb - 624ms +single_story.html.erb - 206ms +articles/sidebar.html.erb - 120ms + +Я закэшировала single_story, тогда +ApacheBench +``` +Requests per second: 7.16 [#/sec] (mean) +Time per request: 698.126 [ms] (mean) +Time per request: 139.625 [ms] (mean, across all concurrent requests) +Transfer rate: 1121.84 [Kbytes/sec] received +``` + +**rack-mini-profiler** показывает время загрузки 350ms +Время загрузки по **NewRelic** тоже уменьшилось, см скриншот. +Но почему это работает - я не понимаю, ведь single_story не выглядела как основная точка роста.