awesome-everything EN
↑ Обратно к восхождению

Производительность

Performance capstone: чтение профилей, трейсов и стат

Суть Читай реальные артефакты со всего трека — профиль pprof, сниппет hot path, лог N+1-запросов и отчёт по bundle — предскажи доминирующую цену и выбери фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Каждый юнит трека оставляет свой артефакт: профиль, hot path, лог запросов, отчёт по bundle. Сеньорский навык — прочитать артефакт, назвать доминирующую цену и потянуться к правильному слою, а не к самому привычному.

Цель

Отработай сквозной цикл трека на реальных уликах: прочитай артефакт, локализуй цену, которая доминирует, и выбери фикс на том слое, где эта цена живёт — до того как трогать любую ручку.

Артефакт 1 — CPU-профиль

(pprof) top5 -cum
      flat  flat%   sum%        cum   cum%
         0     0%     0%      8.10s 92.0%  net/http.(*conn).serve
     0.02s  0.2%   0.2%      7.40s 84.1%  app.(*Handler).Search
     0.05s  0.6%   0.8%      6.90s 78.4%  app.scoreAll
     6.10s 69.3%  70.1%      6.40s 72.7%  app.cosineSim   <-- flat
     0.30s  3.4%  73.5%      0.55s  6.2%  encoding/json.Marshal
Викторина

Читая этот вывод `top -cum`, где реально проводится время и что говорит закон Амдала об оптимизации json.Marshal?

Артефакт 2 — hot path

// app.scoreAll — вызывается раз на поисковый запрос, ~10k кандидатов
func scoreAll(q []float32, candidates []Doc) []Result {
    var results []Result                    // nil slice
    for _, d := range candidates {
        v := append([]float32{}, d.Vector...) // свежая копия на кандидата
        results = append(results, Result{d.ID, cosineSim(q, v)})
    }
    return results
}
Викторина

Учитывая, что Артефакт 1 указал сюда, какой фикс в этом цикле даёт наибольший рычаг, а какой — отвлечение?

Артефакт 3 — лог запросов

SELECT id, total FROM orders WHERE user_id = $1                 -- набор строк, 50 строк
SELECT name FROM customers WHERE id = $1   -- params: 11
SELECT name FROM customers WHERE id = $1   -- params: 12
SELECT name FROM customers WHERE id = $1   -- params: 13
... (ещё 47 запросов той же формы) ...
-- итого: 51 запрос, 1 request
Викторина

Этот лог — один request. Назови паттерн и фикс, который убирает его в корне.

Артефакт 4 — отчёт по bundle

Route /product/[id]   first-load JS
  framework chunk ..............  48.2 KB
  page chunk ...................  19.4 KB
  moment + moment-tz ...........  71.9 KB   <-- форматирование дат
  lodash (full) ................  72.3 KB   <-- used: groupBy, debounce
  ------------------------------------------
  total (gzip) ................. 211.8 KB    budget: 130 KB  ❌ OVER на 81.8 KB
Викторина

Этот route на 82 KB превышает бюджет. Какую цену накладывают эти байты и какой trim даёт наибольший рычаг?

Итог

Четыре артефакта, одна дисциплина. Профиль top -cum отличает корневой фрейм (огромный cumulative, нулевой рычаг) от настоящего хотспота (высокий flat); сниппет hot path показывает трату на аллокацию, которую предсказал профиль; лог запросов вскрывает N+1 по его повторяющейся single-row форме; отчёт по bundle превращает байты в цену CPU устройства. В каждом случае фикс живёт на собственном слое цены — устрани аллокацию, батчи round-trip’ы, обрежь байты — а не на одну ручку в стороне от того, куда указывают улики.

Продолжить восхождение ↑Performance capstone: полное расследование от начала до конца
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.