Я включил миниатюрную версию этого запроса здесь, потому что серия "Мои любимые запросы" должна быть компактной, лакомой, самодостаточной. Но сегодня я превратил это в поистине безумную систему. Это не имеет значения, если вы создаете другую программу CRUD на React или список дел, но если вы делаете что-то довольно сложное на Rust или Golang, или что-то, связанное со сложными данными, этот подход почти пугает тем, что он может сделать. Это процесс из 2 этапов. Вот Этап 1: --- Сначала внимательно прочитайте все файлы AGENTS dot md и README dot md и полностью поймите их! Затем используйте режим агента для расследования кода, чтобы полностью понять код, техническую архитектуру и цель проекта. Затем, как только вы выполните крайне тщательную и скрупулезную работу и глубоко поймете всю существующую систему и то, что она делает, ее цель, и как она реализована, и как все части соединяются друг с другом, мне нужно, чтобы вы гиперинтенсивно исследовали, изучали и размышляли над этими вопросами, касающимися этого проекта: Есть ли другие грубые неэффективности в основной системе? Места в кодовой базе, где 1) изменения действительно повлияют на общую задержку/отзывчивость и пропускную способность; 2) так, что наши изменения будут доказуемо изоморфными с точки зрения функциональности, чтобы мы точно знали, что это не изменит результирующие выходные данные при тех же входных данных; 3) где у вас есть четкое видение явно лучшего подхода с точки зрения алгоритмов или структур данных (обратите внимание, что для этого вы можете включить в свои размышления менее известные структуры данных и более эзотерические/софистицированные/математические алгоритмы, а также способы переформулировать проблему(ы), чтобы другой парадигма была раскрыта, как показано в списке ниже (Примечание: перед предложением любой оптимизации установите базовые метрики (p50/p95/p99 задержка, пропускная способность, пиковая память) и захватите профили CPU/выделения/I/O, чтобы выявить фактические горячие точки): - Устранение паттерна N+1 запросов/выборок - нулевое копирование / повторное использование буфера / разрозненный ввод-вывод - затраты на формат сериализации (накладные расходы на разбор/кодирование) - ограниченные очереди + обратное давление (предотвращение увеличения памяти и задержки в хвосте) - шардирование / полосатые блокировки для уменьшения конкуренции - мемоизация с стратегиями недействительности кэша - техники динамического программирования - теория выпуклой оптимизации - ленивое вычисление / отложенные вычисления - паттерны итераторов/генераторов, чтобы избежать материализации больших коллекций - потоковая/пакетная обработка для работы с ограниченной памятью - предварительное вычисление и таблицы поиска - индексированный поиск против линейного сканирования - бинарный поиск (по данным и по пространству ответов) - техники двух указателей и скользящего окна - префиксные суммы / кумулятивные агрегаты...