Я включив мініатюрну версію цього запиту сюди, бо серія «Мої улюблені підказки» має бути компактними, компактними, самодостатніми самородками. Але сьогодні я перетворив це на справді божевільну систему. Це не має значення, якщо ви створюєте ще одну CRUD-програму в React або список завдань, але якщо ви робите щось досить складне в Rust чи Golang, або щось із складними даними, цей підхід майже лякає своїми можливостями. Це процес із двох раундів. Ось перший раунд: --- Спочатку дуже уважно прочитайте ВСІ файли AGENTS dot md і README dot md і зрозумійте ВСІ обидва! Потім використовуйте режим агента для дослідження коду, щоб повністю зрозуміти код, технічну архітектуру та призначення проєкту. Потім, коли ви виконаєте надзвичайно ретельну і ретельну роботу і глибоко зрозумієте всю існуючу систему, її призначення, як вона реалізована і як усі частини пов'язані між собою, мені потрібно, щоб ви надзвичайно інтенсивно дослідили, вивчили і обмірковували ці питання, що стосуються цього проєкту: Чи є ще якісь грубі неефективності в основній системі? місця в коді, де 1) зміни фактично змінять загальну затримку/відгук і пропускну здатність; 2) щоб наші зміни були доведено ізоморфними з точки зору функціональності, щоб ми точно знали, що це не змінює отримані вихідні дані за однакових входів; 3) коли у вас чітке бачення очевидно кращого підходу з точки зору алгоритмів або структур даних (зверніть увагу, що для цього ви можете включити у свої роздуми менш відомі структури даних і більш езотеричні/складні/математичні алгоритми, а також способи переосмислення проблеми(ів), щоб інша парадигма була відкрита, наприклад, наведений нижче список (Примітка: Перед пропозицією будь-якої оптимізації встановіть базові метрики (затримка, пропускна здатність, пікова пам'ять p50/p95/p99) і зафіксуйте профілі CPU/виділення/I/O для ідентифікації фактичних гарячих точок: - N+1 усунення шаблону запиту/вилучення - нульове копіювання / повторне використання буфера / ввод/вивід з розсіюванням - витрати на формати серіалізації (накладні витрати на аналіз/кодування) - обмежені черги + зворотний тиск (запобігання розриву пам'яті та затримки хвоста) - шардинг / смугасті замки для зменшення конфлікту - Мемоїзація за допомогою стратегій інвалідації кешу - Методи динамічного програмування - Теорія опуклої оптимізації - ліниве обчислення / відкладені обчислення - шаблони ітераторів/генераторів для уникнення матеріалізації великих колекцій - потоковий/фрагментований обробка для роботи з обмеженням пам'яті - таблиці попередніх обчислень і пошуку - пошук на основі індексу проти лінійного розпізнавання сканування - бінарний пошук (за даними та у просторі відповідей) - техніки двохпунктного та ковзного вікна - префіксні суми / кумулятивні агрегати - топологічне сортування та DAG-обізнаність для графів залежностей...