================================================================================
  ОПТИМИЗАЦИЯ МОДУЛЯ КОНКУРЕНТОВ - КРАТКАЯ ИНСТРУКЦИЯ
================================================================================

📋 ЧТО БЫЛО СДЕЛАНО:

ВЕРСИЯ 1.0 (Основная оптимизация):
1. ✅ Добавлено кэширование для всех AJAX-запросов модуля конкурентов
2. ✅ Добавлены лимиты на количество загружаемых записей
3. ✅ Добавлена автоматическая очистка кэша при обновлении данных
4. ✅ Создан метод для массовой очистки кэша по префиксу

ВЕРСИЯ 1.1 (Дополнительная оптимизация графиков):
5. ✅ Упрощены SQL-запросы для графиков (убраны подзапросы)
6. ✅ Добавлен LIMIT 365 для графиков (год данных)
7. ✅ Оптимизирован Chart.js (адаптивная отрисовка)
8. ✅ Добавлена децимация данных для больших графиков (LTTB)
9. ✅ Отключена анимация для графиков >50 точек
10. ✅ Скрыты точки для графиков >100 точек

================================================================================

🚀 ЧТО НУЖНО СДЕЛАТЬ:

ШАГ 1: Проверка изменений
--------------------------
Все изменения уже внесены в следующие файлы:
✓ wp-content/plugins/ctr-lab/frontend/class-user-dashboard.php (v1.1)
✓ wp-content/plugins/ctr-lab/includes/class-cache-manager.php (v1.0)
✓ wp-content/plugins/ctr-lab/assets/js/competitors.js (v1.1)

Оптимизация работает сразу после сохранения файлов.


ШАГ 2: Добавление индексов в БД (РЕКОМЕНДУЕТСЯ)
------------------------------------------------
Для максимальной производительности добавьте индексы в базу данных:

1. Откройте файл: database-indexes-competitors.sql

2. ВАЖНО: Замените префикс "wp_" на ваш префикс таблиц WordPress
   (если у вас другой префикс)

3. Выполните SQL-команды через:
   - phpMyAdmin (вкладка SQL)
   - MySQL Workbench
   - Командную строку MySQL
   - или другой инструмент для работы с БД

⏱️ Время выполнения:
   - Маленькая БД (<100K записей): 1-2 минуты
   - Средняя БД (100K-1M записей): 5-10 минут
   - Большая БД (>1M записей): 15-30 минут

⚠️ ВНИМАНИЕ: Выполняйте в период низкой активности сайта


ШАГ 3: Проверка результатов
----------------------------
1. Очистите кэш WordPress:
   - WP-CLI: wp transient delete --all
   - Или через плагин кэширования

2. Откройте раздел "Конкуренты" в админке

3. При первой загрузке данные будут загружаться как обычно (формируется кэш)

4. При повторной загрузке данные должны появляться мгновенно (<200ms)

5. Откройте Chrome DevTools (F12) → Network → XHR
   - Фильтруйте запросы к admin-ajax.php
   - Проверьте время ответа (должно быть ~50-200ms для повторных запросов)


ШАГ 4: Мониторинг (опционально)
--------------------------------
Для проверки использования индексов выполните в MySQL:

EXPLAIN SELECT td.url, COUNT(DISTINCT td.query_id) as queries_count
FROM wp_ctrlabkey_query_top_domains td
INNER JOIN wp_ctrlabkey_queries q ON td.query_id = q.id
WHERE q.project_id = 1 AND td.domain = 'example.com'
GROUP BY td.url;

Результат должен показывать: type = ref (использует индекс)

================================================================================

📊 ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ:

ДО оптимизации:
  • Загрузка URL конкурента: 5-15 секунд
  • Загрузка запросов по URL: 3-10 секунд
  • Графики (SQL): 5-20 секунд
  • Графики (Render): 0.5-3 секунды
  • Общее время: 40-60 секунд

ПОСЛЕ оптимизации v1.0 (кэширование):
  • Первая загрузка: аналогично "ДО" (формируется кэш)
  • Повторные загрузки: 50-200 мс (в 20-100 раз быстрее!)
  • Кэш действует: 1 час
  • Автообновление кэша: при обновлении индекса

ПОСЛЕ оптимизации v1.1 (графики):
  • Графики (SQL): в 3-5 раз быстрее
  • Графики (Render): в 2-15 раз быстрее
  • График с 30 точками: ~200-300 мс (первая загрузка)
  • График с 365 точками: ~1.5-2 секунды (первая загрузка)
  • Повторные загрузки: 50-200 мс (из кэша)

С индексами в БД:
  • Первая загрузка: в 3-5 раз быстрее чем "ДО"
  • Графики: в 5-10 раз быстрее чем "ДО"
  • Повторные загрузки: 50-100 мс

================================================================================

🔧 ОБСЛУЖИВАНИЕ:

Кэш автоматически очищается при:
✓ Обновлении индекса конкурентов (кнопка в админке)
✓ Завершении сбора позиций
✓ Истечении времени жизни (1 час)

Для ручной очистки кэша (если нужно):
PHP код:
<?php
CTR_LAB_Cache_Manager::flush_by_prefix('ctr_lab_url_queries_');
CTR_LAB_Cache_Manager::flush_by_prefix('ctr_lab_domain_visibility_');
CTR_LAB_Cache_Manager::flush_by_prefix('ctr_lab_url_visibility_');
CTR_LAB_Cache_Manager::flush_by_prefix('ctr_lab_query_position_');
?>

WP-CLI:
wp transient delete --all

================================================================================

📚 ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Подробная документация: 
  • ОПТИМИЗАЦИЯ_КОНКУРЕНТОВ.md — основная оптимизация (кэш, AJAX)
  • ОПТИМИЗАЦИЯ_ГРАФИКОВ_КОНКУРЕНТОВ.md — оптимизация графиков (SQL, Chart.js)
  • database-indexes-competitors.sql — SQL индексы с комментариями
  • ИЗМЕНЕНИЯ_ОПТИМИЗАЦИЯ.md — резюме всех изменений

================================================================================

❓ ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Q: Нужно ли что-то менять в коде после обновления?
A: Нет, все работает автоматически после сохранения файлов.

Q: Как понять, что кэширование работает?
A: Откройте Chrome DevTools → Network → XHR и посмотрите время ответа.
   Первый запрос ~5-15 сек, повторные ~50-200 мс.

Q: Безопасно ли добавлять индексы на работающий сайт?
A: Да, но лучше делать это в период низкой активности.
   Индексы создаются без блокировки таблиц в MySQL 5.7+.

Q: Что делать, если после оптимизации появились ошибки?
A: 1) Проверьте логи PHP и WordPress (wp-content/debug.log)
   2) Очистите кэш плагина и браузера
   3) Проверьте, что все файлы сохранены правильно

Q: Сколько места займут индексы?
A: Примерно 10-30% от размера таблиц с данными.
   Если таблицы занимают 100MB, индексы добавят ~30-50MB.

Q: Можно ли откатить изменения?
A: Да, в файле database-indexes-competitors.sql есть раздел
   с командами для удаления индексов (закомментирован).

================================================================================

✅ КОНТРОЛЬНЫЙ СПИСОК:

[ ] Файлы обновлены (class-user-dashboard.php, class-cache-manager.php)
[ ] Индексы добавлены в БД (опционально, но рекомендуется)
[ ] Кэш очищен после обновления
[ ] Проверена работа в Chrome DevTools
[ ] Проверено время загрузки данных

================================================================================

Дата создания: 2026-02-16
Версия оптимизации: 1.1
Версия плагина: CTR LAB

================================================================================
ИСТОРИЯ ВЕРСИЙ:

v1.0 (2026-02-16) — Основная оптимизация
  • Кэширование AJAX-запросов
  • Лимиты на выборку данных
  • Автоочистка кэша
  • Метод массовой очистки

v1.1 (2026-02-16) — Оптимизация графиков
  • Упрощение SQL для графиков
  • LIMIT 365 для графиков
  • Chart.js адаптивная отрисовка
  • Децимация больших графиков
  • Отключение анимации для >50 точек

================================================================================
