Встречается на собеседованиях • сегодня
Как оптимизировать медленную страницу, написанную на HTML, CSS, JS
1. **Анализ производительности**: используй Lighthouse или DevTools Performance для выявления узких мест.
2. **Оптимизация загрузки**:
- Минифицируй и объединяй CSS/JS
- Используй lazy loading для изображений:
```html
```
3. **Критический CSS**: встраивай в `` для быстрого отображения контента.
4. **Оптимизация JS**:
- Откладывай неважный код с `defer`/`async`
- Используй виртуальный скролл для длинных списков
- Дебаунс/троттлинг обработчиков событий
5. **Кэширование**: настрой Cache-Control и Service Workers для статики.
6. **Оптимизация рендеринга**:
- Используй `will-change` для сложных анимаций
- Избегай forced synchronous layouts
Пример дебаунса:
```javascript
function debounce(func, timeout = 300) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => func.apply(this, args), timeout);
};
}
window.addEventListener('resize', debounce(handleResize));
```
```
3. **Критический CSS**: встраивай в `` для быстрого отображения контента.
4. **Оптимизация JS**:
- Откладывай неважный код с `defer`/`async`
- Используй виртуальный скролл для длинных списков
- Дебаунс/троттлинг обработчиков событий
5. **Кэширование**: настрой Cache-Control и Service Workers для статики.
6. **Оптимизация рендеринга**:
- Используй `will-change` для сложных анимаций
- Избегай forced synchronous layouts
Пример дебаунса:
```javascript
function debounce(func, timeout = 300) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => func.apply(this, args), timeout);
};
}
window.addEventListener('resize', debounce(handleResize));
```
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы