В Lighthouse константы используются для хранения фиксированных
значений, которые применяются во многих местах кода, обеспечивая
единообразие и удобство поддержки. Обычно они объявляются через
const или через объект, замороженный методом
Object.freeze(), чтобы предотвратить случайное изменение
значений.
Пример объявления констант:
const NETWORK_TIMEOUTS = Object.freeze({
DEFAULT: 30000,
LONG: 60000,
SHORT: 10000
});
Ключевые особенности констант:
Object.freeze
делает объект неизменяемым, что снижает вероятность ошибок при
использовании этих значений в различных частях проекта.В Lighthouse константы широко применяются для настройки сетевых запросов, определения уровней логирования, идентификации категорий аудита и типовых сценариев тестирования.
Константы в Lighthouse используются в таких контекстах:
const CATEGORIES = Object.freeze({
PERFORMANCE: 'performance',
ACCESSIBILITY: 'accessibility',
BEST_PRACTICES: 'best-practices',
SEO: 'seo',
PWA: 'pwa'
});
Использование констант для категорий позволяет избежать ошибок при написании строк вручную в коде анализа.
const RESOURCE_TYPES = Object.freeze({
DOCUMENT: 'document',
SCRIPT: 'script',
IMAGE: 'image',
STYLESHEET: 'stylesheet',
OTHER: 'other'
});
Такой подход обеспечивает строгую типизацию логики работы с различными типами ресурсов и упрощает фильтрацию данных.
В Lighthouse enum реализуются через объекты с замороженными
значениями (Object.freeze) или через TypeScript
enum, если проект использует строгую типизацию. Enum
позволяет определить набор возможных значений, которые можно
использовать вместо строк или чисел, что предотвращает ошибки и упрощает
рефакторинг.
Пример enum через объект:
const THROTTLING_METHOD = Object.freeze({
DEVTOOLS: 'devtools',
SIMULATED: 'simulated'
});
Пример enum через TypeScript:
enum ThrottlingMethod {
DevTools = 'devtools',
Simulated = 'simulated'
}
Особенности enum:
Enum активно применяются в следующих областях:
const throttling = THROTTLING_METHOD.SIMULATED;
const AUDIT_SEVERITY = Object.freeze({
INFO: 'info',
WARNING: 'warning',
CRITICAL: 'critical'
});
const LOAD_STATUS = Object.freeze({
PENDING: 'pending',
SUCCESS: 'success',
FAILURE: 'failure'
});
Object.freeze для неизменяемых объектов,
чтобы защитить константы и enum от изменений.enum для строгой типизации,
что уменьшает вероятность ошибок на этапе компиляции.// Категории аудита
const CATEGORIES = Object.freeze({
PERFORMANCE: 'performance',
ACCESSIBILITY: 'accessibility',
BEST_PRACTICES: 'best-practices',
SEO: 'seo',
PWA: 'pwa'
});
// Типы ресурсов
const RESOURCE_TYPES = Object.freeze({
DOCUMENT: 'document',
SCRIPT: 'script',
IMAGE: 'image',
STYLESHEET: 'stylesheet',
OTHER: 'other'
});
// Методы троттлинга
const THROTTLING_METHOD = Object.freeze({
DEVTOOLS: 'devtools',
SIMULATED: 'simulated'
});
// Уровни аудита
const AUDIT_SEVERITY = Object.freeze({
INFO: 'info',
WARNING: 'warning',
CRITICAL: 'critical'
});
Эта структура обеспечивает согласованность, предотвращает ошибки и упрощает расширение функционала Lighthouse.