Критические оптимизации для снижения потребления памяти
- Кэширование только текущей недели:
* Кэш хранит только текущие недели (без параметра wk)
* Запросы с конкретной неделей (wk указан) не кэшируются
* Ключ кэша изменен с `${group}_${wk}` на `group`
* Уменьшен maxCacheSize с 100 до 50 записей
- Условный парсинг навигации по неделям:
* Парсинг навигации выполняется только если weekNavigationEnabled === true
* Если навигация выключена, parseWeekNavigation не вызывается
* Экономит память и CPU при выключенной навигации
* Параметр shouldParseWeekNavigation передается через getSchedule -> parsePage
- Результат:
* Значительное снижение потребления памяти
* Кэш содержит только актуальные данные (текущие недели)
* Парсинг навигации выполняется только при необходимости
Измененные файлы:
- src/pages/[group].tsx - логика кэширования только текущей недели
- src/app/agregator/schedule.ts - параметр для условного парсинга
- src/app/parser/schedule.ts - условный вызов parseWeekNavigation
feat: добавлена навигация по неделям с возможностью отключения через админ-панель
Реализована навигация по неделям в расписании с парсингом ссылок из HTML страницы
оригинального сайта. Добавлена возможность управления навигацией через админ-панель
с сохранением настроек в файл.
Основные изменения:
- Парсинг навигации по неделям:
* Добавлены типы WeekInfo и ParseResult в парсер
* Реализована функция parseWeekNavigation для извлечения ссылок с параметром wk
* Парсер ищет ссылки в href, onclick, формах и других атрибутах
* Автоматическое определение номеров недель из текста ссылок и контекста
* Вычисление соседних недель на основе найденных данных
- API и функции:
* Обновлена функция getSchedule для поддержки параметра wk в URL
* Обновлен getServerSideProps для чтения параметра wk из query string
* Кэширование расписания с учетом недели (ключ включает group + wk)
- Компоненты:
* Создан компонент WeekNavigation с кнопками навигации
* Интегрирована навигация в компонент Schedule
* Навигация работает через изменение URL параметра wk
- Система настроек:
* Создан settings-loader для загрузки/сохранения настроек в JSON
* Добавлен API endpoint /api/admin/settings для управления настройками
* Добавлен переключатель в админ-панели для включения/выключения навигации
* Настройки сохраняются в src/shared/data/settings.json и переживают перезапуски
- Файлы:
* src/app/parser/schedule.ts - парсинг навигации по неделям
* src/app/agregator/schedule.ts - поддержка параметра wk
* src/pages/[group].tsx - чтение wk из query и передача настроек
* src/widgets/schedule/week-navigation.tsx - компонент навигации
* src/widgets/schedule/index.tsx - интеграция навигации
* src/pages/admin.tsx - управление настройками
* src/shared/data/settings-loader.ts - загрузка/сохранение настроек
* src/pages/api/admin/settings.ts - API для настроек
* src/shared/data/settings.json - файл с настройками
Основные изменения:
Админ-панель:
- Создана защищенная паролем админ-панель по пути /admin
- Реализована система авторизации с сессионными куками
- Добавлен CRUD для управления группами (создание, редактирование, удаление)
- Добавлено поле "курс" (1-5) для каждой группы с возможностью редактирования
Структура данных:
- Миграция групп из TypeScript файла в JSON формат (groups.json)
- Обновлена структура данных: добавлено поле course
- Реализована автоматическая миграция старых данных в новый формат
- Создан groups-loader для работы с JSON файлом
Главная страница:
- Создана главная страница с аккордеоном по курсам (1-5)
- Группы сгруппированы по курсам для удобной навигации
- Добавлены кнопки: "Добавить группу", переключение темы и GitHub
- Убрана верхняя навигация с главной страницы
Навигация:
- Добавлена кнопка "К группам" в начало навигации на страницах расписания
- На мобильных устройствах скрыты кнопки групп, оставлена только кнопка возврата
- Улучшена адаптивность навигации
Технические улучшения:
- Исправлена проблема с tailwind-scrollbar-hide (заменен плагин на CSS класс)
- Обновлены все компоненты для работы с новой структурой данных групп
- Добавлена поддержка переменных окружения ADMIN_PASSWORD и ADMIN_SESSION_SECRET
- Исправлена мобильная версия: добавлена горизонтальная прокрутка навигации,
оптимизированы отступы и размеры элементов для touch-интерфейсов
- Устранено зависание на мобильных: удален бесконечный цикл в date-serializer.ts
- Улучшена читаемость: сделаны светлее описание пар, дни недели и текст
последнего обновления (текущий день остается выделенным)
- Добавлена автоматическая прокрутка до текущего дня при загрузке страницы
- Добавлено отображение 'Пары нет' для отмененных пар при замене
- Оптимизированы скрипты установки: добавлена проверка зависимостей перед
установкой для ускорения повторных запусков
- Исправлено отображение адреса и аудитории на мобильных устройствах
- Улучшены диалоги и touch-цели для мобильных устройств