🤔 Когда используются теги div и span?
- div — это блочный элемент, используется для структурирования больших участков контента;
- span — строчный элемент, применяется для выделения текста внутри других блоков без создания новой строки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- div — это блочный элемент, используется для структурирования больших участков контента;
- span — строчный элемент, применяется для выделения текста внутри других блоков без создания новой строки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍14🔥1
🤔 Зачем необходим DOM?
DOM (Document Object Model) представляет HTML-документ в виде дерева объектов. Он необходим для доступа, изменения и взаимодействия с элементами веб-страницы с помощью JavaScript.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
DOM (Document Object Model) представляет HTML-документ в виде дерева объектов. Он необходим для доступа, изменения и взаимодействия с элементами веб-страницы с помощью JavaScript.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍8🔥2
🤔 Что такое dispatch?
В контексте Frontend-разработки,
🟠`dispatch` в Redux
В Redux
🟠`dispatchEvent` в JavaScript (EventTarget API)
В нативном JavaScript метод
🟠`dispatch` в React (useReducer)
В React-хуке
Ставь 👍 и забирай 📚 Базу знаний
В контексте Frontend-разработки,
dispatch — это метод, который отправляет (диспатчит) событие или действие. В зависимости от технологии dispatch может использоваться в Redux, EventTarget или React. 🟠`dispatch` в Redux
В Redux
dispatch(action) используется для отправки (диспатча) действий (actions) в хранилище (store). import { useDispatch } from 'react-redux';
const Counter = () => {
const dispatch = useDispatch();
return (
<button onClick={() => dispatch({ type: 'INCREMENT' })}>
Увеличить
</button>
);
};🟠`dispatchEvent` в JavaScript (EventTarget API)
В нативном JavaScript метод
dispatchEvent() используется для генерации пользовательских событий на DOM-элементах. const button = document.querySelector("button");
// Создаём событие
const event = new Event("myCustomEvent");
// Добавляем слушатель событий
button.addEventListener("myCustomEvent", () => {
console.log("Событие вызвано!");
});
// Диспатчим событие
button.dispatchEvent(event); // Выведет: "Событие вызвано!"🟠`dispatch` в React (useReducer)
В React-хуке
useReducer dispatch используется для изменения состояния компонента. import { useReducer } from 'react';
const reducer = (state, action) => {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
default:
return state;
}
};
const Counter = () => {
const [state, dispatch] = useReducer(reducer, { count: 0 });
return (
<button onClick={() => dispatch({ type: 'increment' })}>
{state.count}
</button>
);
};Ставь 👍 и забирай 📚 Базу знаний
👍10
🤔 В чём отличие box-sizing: border-box от box-sizing: content-box?
- border-box включает padding и border в размер элемента — проще контролировать итоговую ширину.
- content-box — по умолчанию: ширина задаётся только для содержимого, а padding и border добавляются отдельно.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- border-box включает padding и border в размер элемента — проще контролировать итоговую ширину.
- content-box — по умолчанию: ширина задаётся только для содержимого, а padding и border добавляются отдельно.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍10🔥1
🤔 Зачем мы используем React.Fragment?
React.Fragment позволяет оборачивать несколько JSX-элементов без лишнего тега в DOM. Он нужен, когда требуется вернуть несколько элементов из компонента, не создавая дополнительных обёрток (<div> и т.п.).
Вот подробные текстовые ответы на твои вопросы, охватывающие темы React, Redux, верстку, TypeScript и веб-разработку в целом:
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
React.Fragment позволяет оборачивать несколько JSX-элементов без лишнего тега в DOM. Он нужен, когда требуется вернуть несколько элементов из компонента, не создавая дополнительных обёрток (<div> и т.п.).
Вот подробные текстовые ответы на твои вопросы, охватывающие темы React, Redux, верстку, TypeScript и веб-разработку в целом:
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊14👍6🔥3🤔3
🤔 Какие есть альтернативы SSR?
- SPA + пререндеринг (Scully, React Static, Nuxt generate) — хорош для статического контента.
- JAMStack + CDN — готовая сборка без сервера.
- Edge rendering — через CDN-функции (например, Cloudflare Workers).
- Hybrid rendering (ISR/SSG) — как в Next.js, где часть страниц SSR, часть — SSG.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- SPA + пререндеринг (Scully, React Static, Nuxt generate) — хорош для статического контента.
- JAMStack + CDN — готовая сборка без сервера.
- Edge rendering — через CDN-функции (например, Cloudflare Workers).
- Hybrid rendering (ISR/SSG) — как в Next.js, где часть страниц SSR, часть — SSG.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥15👍2
🤔 Что такое функциональное программирование?
Функциональное программирование (FP) — это парадигма программирования, в которой основной единицей кода являются функции. В FP функции работают с данными без изменения внешнего состояния и без побочных эффектов.
🚩Основные принципы функционального программирования
🟠Чистые функции (Pure Functions)
Функция называется чистой, если:
При одинаковых входных данных всегда возвращает одинаковый результат.
Не изменяет внешние переменные (нет побочных эффектов).
Нечистая функция (изменяет внешнюю переменную)
Чистая функция (зависит только от аргументов)
🟠Иммутабельность (Immutable Data)
Данные не изменяются, а создаются новые версии объектов.
Изменение объекта (нефункциональный подход)
Создание нового объекта (функциональный подход)
🟠Функции высшего порядка (Higher-Order Functions)
Функция, которая принимает другую функцию в аргумент или возвращает функцию.
Пример: Функция, возвращающая другую функцию
🟠Функциональные методы массивов (map, filter, reduce)
Функциональные методы позволяют не мутировать массив, а создавать новый.
Используем
Используем
Используем
🟠Каррирование (Currying)
Разделение функции на несколько функций, каждая принимает по одному аргументу.
Пример: Каррированная функция
Ставь 👍 и забирай 📚 Базу знаний
Функциональное программирование (FP) — это парадигма программирования, в которой основной единицей кода являются функции. В FP функции работают с данными без изменения внешнего состояния и без побочных эффектов.
🚩Основные принципы функционального программирования
🟠Чистые функции (Pure Functions)
Функция называется чистой, если:
При одинаковых входных данных всегда возвращает одинаковый результат.
Не изменяет внешние переменные (нет побочных эффектов).
Нечистая функция (изменяет внешнюю переменную)
let count = 0;
function increment() {
count += 1; // изменяет внешнюю переменную
return count;
}
Чистая функция (зависит только от аргументов)
function increment(num) {
return num + 1; // не меняет внешнее состояние
}
console.log(increment(5)); // 6
console.log(increment(5)); // 6 (всегда одинаковый результат)🟠Иммутабельность (Immutable Data)
Данные не изменяются, а создаются новые версии объектов.
Изменение объекта (нефункциональный подход)
const user = { name: "Alice", age: 25 };
user.age = 26; // изменяет объектСоздание нового объекта (функциональный подход)
const user = { name: "Alice", age: 25 };
const updatedUser = { ...user, age: 26 }; // создаём новый объект🟠Функции высшего порядка (Higher-Order Functions)
Функция, которая принимает другую функцию в аргумент или возвращает функцию.
const numbers = [1, 2, 3];
const squared = numbers.map(n => n * n); // [1, 4, 9]
Пример: Функция, возвращающая другую функцию
const multiplyBy = (factor) => (num) => num * factor;
const double = multiplyBy(2);
console.log(double(5)); // 10
🟠Функциональные методы массивов (map, filter, reduce)
Функциональные методы позволяют не мутировать массив, а создавать новый.
Используем
map() для изменения элементов const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2); // [2, 4, 6]
Используем
filter() для фильтрации const words = ["apple", "banana", "kiwi"];
const shortWords = words.filter(word => word.length < 6); // ["kiwi"]
Используем
reduce() для вычислений const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, num) => acc + num, 0); // 10
🟠Каррирование (Currying)
Разделение функции на несколько функций, каждая принимает по одному аргументу.
function sum(a, b) {
return a + b;
}
console.log(sum(2, 3)); // 5Пример: Каррированная функция
const sum = (a) => (b) => a + b;
console.log(sum(2)(3)); // 5
Ставь 👍 и забирай 📚 Базу знаний
1👍17
🤔 Какие хуки добавляют для подключения роутера?
Во Vue с Vue Router:
- beforeRouteEnter — до создания компонента;
- beforeRouteUpdate — при смене параметров маршрута;
- beforeRouteLeave — при уходе с маршрута; Используются для логики навигации, авторизации и пр.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Во Vue с Vue Router:
- beforeRouteEnter — до создания компонента;
- beforeRouteUpdate — при смене параметров маршрута;
- beforeRouteLeave — при уходе с маршрута; Используются для логики навигации, авторизации и пр.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊7👍4🤔2🔥1
🤔 Какое свойство Flexbox отвечает за направление flex items?
Свойство flex-direction:
- row (по горизонтали),
- column (по вертикали),
- и их обратные варианты (row-reverse, column-reverse).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Свойство flex-direction:
- row (по горизонтали),
- column (по вертикали),
- и их обратные варианты (row-reverse, column-reverse).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍10🔥2
🤔 Какие методологии есть?
Методологии в верстке и CSS:
- BEM (Block Element Modifier) — строгая иерархия классов;
- SMACSS — деление стилей на категории (base, layout, module, state);
- OOCSS (Object-Oriented CSS) — повторное использование объектов;
- Atomic CSS / Utility-first — минималистичные, многоклассовые подходы (Tailwind).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Методологии в верстке и CSS:
- BEM (Block Element Modifier) — строгая иерархия классов;
- SMACSS — деление стилей на категории (base, layout, module, state);
- OOCSS (Object-Oriented CSS) — повторное использование объектов;
- Atomic CSS / Utility-first — минималистичные, многоклассовые подходы (Tailwind).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1🔥10👍2
🤔 Когда нужно использовать кнопки а когда ссылки?
В веб-разработке часто возникает вопрос: использовать кнопку (
🟠Когда использовать `<button>`?
Когда действие выполняется на странице без перехода на другую
Когда нужна интерактивность (отправка формы, открытие модального окна, запуск скрипта)
Отправка формы
Открытие/закрытие модального окна
Включение/выключение чего-то на странице
Взаимодействие с JavaScript (AJAX-запросы, события)
Пример кнопки в форме:
🟠Когда использовать `<a>`?
Когда нужно перейти на другую страницу (или секцию сайта)
Когда ссылка ведет на внешний или внутренний ресурс
Навигация по сайту
Переход на другую страницу
Ссылки на соцсети, статьи, файлы
Ссылка внутри страницы (якорь)
Открытие в новом окне
🟠Ошибки и неправильное использование
Ошибка: использовать
Ставь 👍 и забирай 📚 Базу знаний
В веб-разработке часто возникает вопрос: использовать кнопку (
<button>) или ссылку (<a>) для взаимодействий? Хотя они внешне могут выглядеть одинаково, у них разные назначения и поведение. 🟠Когда использовать `<button>`?
Когда действие выполняется на странице без перехода на другую
Когда нужна интерактивность (отправка формы, открытие модального окна, запуск скрипта)
Отправка формы
Открытие/закрытие модального окна
Включение/выключение чего-то на странице
Взаимодействие с JavaScript (AJAX-запросы, события)
<button onclick="alert('Нажато!')">Кликни</button>Пример кнопки в форме:
<form>
<input type="text" placeholder="Введите имя">
<button type="submit">Отправить</button>
</form>
🟠Когда использовать `<a>`?
Когда нужно перейти на другую страницу (или секцию сайта)
Когда ссылка ведет на внешний или внутренний ресурс
Навигация по сайту
Переход на другую страницу
Ссылки на соцсети, статьи, файлы
<a href="https://example.com">Перейти на сайт</a>
Ссылка внутри страницы (якорь)
<a href="#section">Перейти вниз</a>
<section id="section">Контент</section>
Открытие в новом окне
<a href="https://example.com" target="_blank" rel="noopener noreferrer">
Открыть в новой вкладке
</a>
🟠Ошибки и неправильное использование
Ошибка: использовать
<button> вместо ссылки<button onclick="window.location.href='https://example.com'">Перейти</button>
Ставь 👍 и забирай 📚 Базу знаний
👍11
🤔 Зачем мы разбиваем код на компоненты?
Чтобы улучшить читаемость, переиспользуемость и поддержку. Компоненты упрощают тестирование, изоляцию логики и позволяют собирать интерфейс как из конструктора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Чтобы улучшить читаемость, переиспользуемость и поддержку. Компоненты упрощают тестирование, изоляцию логики и позволяют собирать интерфейс как из конструктора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍12
🤔 Что такое псевдоэлемент?
Это специальный синтаксис, позволяющий стилизовать определенные части элемента или добавлять специальные элементы (как бы "элементы-призраки"), не создавая для этого дополнительные теги в HTML. Псевдоэлементы предоставляют удобный способ внесения изменений в структуру документа, не затрагивая HTML.
🚩Синтаксис
Начинается с двойного двоеточия (
🟠Распространенные псевдоэлементы
🚩Особенности работы
Работают как часть документа, но на самом деле не существуют в DOM-дереве, а создаются стилями.
Чтобы псевдоэлементы
Могут быть стилизованы почти так же, как обычные элементы, но есть некоторые ограничения, например, связанные с взаимодействием с JavaScript.
Ставь 👍 и забирай 📚 Базу знаний
Это специальный синтаксис, позволяющий стилизовать определенные части элемента или добавлять специальные элементы (как бы "элементы-призраки"), не создавая для этого дополнительные теги в HTML. Псевдоэлементы предоставляют удобный способ внесения изменений в структуру документа, не затрагивая HTML.
🚩Синтаксис
Начинается с двойного двоеточия (
::), за которым следует название псевдоэлемента. Например, ::before или ::after.🟠Распространенные псевдоэлементы
::before и ::after: Позволяют вставлять содержимое до или после содержимого выбранного элемента соответственно. Очень часто используются для добавления декоративных элементов. p::before {
content: "«";
color: blue;
}
p::after {
content: "»";
color: blue;
}
::first-line: Применяет стили к первой строке текста в блочном элементе. p::first-line {
font-weight: bold;
}
::first-letter: Применяет стили к первой букве текста в блочном элементе. p::first-letter {
font-size: 200%;
}
::selection: Применяет стили к части текста, которую пользователь выделил. p::selection {
background: yellow;
}
🚩Особенности работы
Работают как часть документа, но на самом деле не существуют в DOM-дереве, а создаются стилями.
Чтобы псевдоэлементы
::before и ::after отображались, необходимо задать свойство content, даже если оно пустое (content: "";).Могут быть стилизованы почти так же, как обычные элементы, но есть некоторые ограничения, например, связанные с взаимодействием с JavaScript.
Ставь 👍 и забирай 📚 Базу знаний
👍4
🤔 Как можно заставить Git что-то забыть?
Использовать git rm --cached файл, если нужно убрать файл из индекса, но оставить на диске. Для полной очистки из истории — git filter-branch, BFG Repo-Cleaner или git reset.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Использовать git rm --cached файл, если нужно убрать файл из индекса, но оставить на диске. Для полной очистки из истории — git filter-branch, BFG Repo-Cleaner или git reset.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
8👍7🔥3
🤔 Что такое массив?
Это структура данных, которая представляет собой упорядоченный список элементов. В JavaScript массивы могут содержать любые типы данных: числа, строки, объекты, другие массивы и даже функции.
🚩Почему массивы нужны?
Массивы помогают удобно хранить и обрабатывать наборы данных. Вместо того чтобы создавать множество переменных, можно использовать массив, чтобы хранить сразу несколько значений и работать с ними с помощью специальных методов.
🚩Как используются массивы?
Массивы позволяют:
Хранить несколько значений в одной переменной
Перебирать элементы с помощью циклов
Добавлять, удалять, изменять элементы
Выполнять операции, например, сортировку и фильтрацию
🚩Как создать массив?
В JavaScript массив можно создать разными способами:
С использованием литерала массива
С использованием конструктора
🚩Как обращаться к элементам массива?
Доступ к элементу массива осуществляется по индексу (начинается с 0):
🚩Основные методы работы с массивами
Добавление элемента в конец
Удаление последнего элемента
Добавление элемента в начало
Удаление первого элемента
Перебор массива
Фильтрация элементов
Ставь 👍 и забирай 📚 Базу знаний
Это структура данных, которая представляет собой упорядоченный список элементов. В JavaScript массивы могут содержать любые типы данных: числа, строки, объекты, другие массивы и даже функции.
🚩Почему массивы нужны?
Массивы помогают удобно хранить и обрабатывать наборы данных. Вместо того чтобы создавать множество переменных, можно использовать массив, чтобы хранить сразу несколько значений и работать с ними с помощью специальных методов.
🚩Как используются массивы?
Массивы позволяют:
Хранить несколько значений в одной переменной
Перебирать элементы с помощью циклов
Добавлять, удалять, изменять элементы
Выполнять операции, например, сортировку и фильтрацию
🚩Как создать массив?
В JavaScript массив можно создать разными способами:
С использованием литерала массива
let fruits = ["яблоко", "банан", "апельсин"];
С использованием конструктора
Array let numbers = new Array(1, 2, 3, 4, 5);
🚩Как обращаться к элементам массива?
Доступ к элементу массива осуществляется по индексу (начинается с 0):
let fruits = ["яблоко", "банан", "апельсин"];
console.log(fruits[0]); // "яблоко"
console.log(fruits[1]); // "банан"
🚩Основные методы работы с массивами
Добавление элемента в конец
push() let arr = [1, 2, 3];
arr.push(4);
console.log(arr); // [1, 2, 3, 4]
Удаление последнего элемента
pop() arr.pop();
console.log(arr); // [1, 2, 3]
Добавление элемента в начало
unshift() arr.unshift(0);
console.log(arr); // [0, 1, 2, 3]
Удаление первого элемента
shift() arr.shift();
console.log(arr); // [1, 2, 3]
Перебор массива
forEach() arr.forEach(item => console.log(item));
Фильтрация элементов
filter() let evenNumbers = arr.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2]
Ставь 👍 и забирай 📚 Базу знаний
👍8
🤔 Как отследить изменение модели?
Способы:
- watch: следим за конкретным полем или выражением.
-@input или @update :modelValue — события от v-model.
- computed с геттером и сеттером — можно ловить изменения при записи.
- emit из компонента — в родителе можно слушать события.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Способы:
- watch: следим за конкретным полем или выражением.
-
- computed с геттером и сеттером — можно ловить изменения при записи.
- emit из компонента — в родителе можно слушать события.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊4🔥2👍1
🤔 В чём преимущество синтаксического сахара в виде async await над promise?
Оба способа позволяют работать с асинхронным кодом в JavaScript, но
🟠`async/await` проще читать и писать
Код на
Решение:
Иногда
Ставь 👍 и забирай 📚 Базу знаний
Оба способа позволяют работать с асинхронным кодом в JavaScript, но
async/await делает код чище, проще и удобнее. 🟠`async/await` проще читать и писать
Код на
Promise.then() часто становится вложенным и запутанным fetch("https://api.example.com/user")
.then(response => response.json())
.then(user => {
return fetch(`https://api.example.com/orders/${user.id}`);
})
.then(response => response.json())
.then(orders => {
console.log("Заказы:", orders);
})
.catch(error => console.error("Ошибка:", error));Решение:
async/awaitasync function getUserOrders() {
try {
const response = await fetch("https://api.example.com/user");
const user = await response.json();
const ordersResponse = await fetch(`https://api.example.com/orders/${user.id}`);
const orders = await ordersResponse.json();
console.log("Заказы:", orders);
} catch (error) {
console.error("Ошибка:", error);
}
}
getUserOrders();async/await лучше обрабатывает ошибкиfetch("https://api.example.com/data")
.then(response => response.json())
.then(data => {
throw new Error("Ошибка в обработке данных");
})
.catch(error => console.error("Ошибка:", error));async/await + try/catch – мощная обработка ошибокasync function fetchData() {
try {
const response = await fetch("https://api.example.com/data");
if (!response.ok) throw new Error("Ошибка HTTP " + response.status);
const data = await response.json();
console.log(data);
} catch (error) {
console.error("Ошибка:", error);
}
}
fetchData();async/await удобен в for и try/catch const urls = ["url1", "url2", "url3"];
urls.forEach(url => {
fetch(url)
.then(response => response.json())
.then(data => console.log(data));
});
async/await в for ofasync function fetchAll(urls) {
for (const url of urls) {
const response = await fetch(url);
const data = await response.json();
console.log(data);
}
}
fetchAll(["url1", "url2", "url3"]);async/await работает с try/finally async function fetchData() {
try {
console.log("Запрос данных...");
const response = await fetch("https://api.example.com");
const data = await response.json();
console.log("Данные:", data);
} catch (error) {
console.error("Ошибка:", error);
} finally {
console.log("Закрываем соединение...");
}
}
fetchData();async/await можно использовать внутри Promise.all()Иногда
Promise.all() быстрее, потому что запускает промисы параллельно. async function fetchMultiple() {
const [user, orders] = await Promise.all([
fetch("https://api.example.com/user").then(res => res.json()),
fetch("https://api.example.com/orders").then(res => res.json())
]);
console.log(user, orders);
}
fetchMultiple();Ставь 👍 и забирай 📚 Базу знаний
👍9💊2
🤔 В чём разница между event.preventDefault и event.stopPropagation?
1. event.preventDefault: предотвращает стандартное поведение элемента (например, отправку формы).
2. event.stopPropagation: останавливает дальнейшее распространение события по дереву DOM.
3. Часто используются совместно для полной обработки события без влияния на другие элементы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. event.stopPropagation: останавливает дальнейшее распространение события по дереву DOM.
3. Часто используются совместно для полной обработки события без влияния на другие элементы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍8🔥3
🤔 Как работает HTTP?
HTTP — это протокол клиент-серверного взаимодействия. Клиент отправляет запрос (метод, заголовки, тело) на сервер, сервер возвращает ответ (статус-код, заголовки, данные). Протокол работает на основе TCP, чаще всего используется для работы с вебом.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
HTTP — это протокол клиент-серверного взаимодействия. Клиент отправляет запрос (метод, заголовки, тело) на сервер, сервер возвращает ответ (статус-код, заголовки, данные). Протокол работает на основе TCP, чаще всего используется для работы с вебом.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍8🔥2
🤔 Зачем нужен nginx?
Nginx — это мощный веб-сервер, который используется для раздачи статических файлов, балансировки нагрузки, проксирования запросов и обеспечения безопасности.
🟠Как Nginx раздаёт фронтенд-приложение?
Когда мы билдим SPA-приложение (например, React/Vue/Angular), в папке
🟠Как Nginx проксирует запросы к бэкенду?
Если фронтенд (
🟠Как Nginx балансирует нагрузку?
Если у нас несколько бэкенд-серверов, Nginx может распределять нагрузку между ними.
🟠Как Nginx ускоряет сайт с кэшем?
Кэширование уменьшает нагрузку на сервер и ускоряет загрузку страниц.
Ставь 👍 и забирай 📚 Базу знаний
Nginx — это мощный веб-сервер, который используется для раздачи статических файлов, балансировки нагрузки, проксирования запросов и обеспечения безопасности.
🟠Как Nginx раздаёт фронтенд-приложение?
Когда мы билдим SPA-приложение (например, React/Vue/Angular), в папке
dist появляются статические файлы (index.html, app.js, styles.css). server {
listen 80;
server_name myapp.com;
root /var/www/myapp/dist;
index index.html;
location / {
try_files $uri /index.html;
}
}🟠Как Nginx проксирует запросы к бэкенду?
Если фронтенд (
myapp.com) и бэкенд (api.myapp.com) находятся на разных серверах, Nginx может перенаправлять запросы на API. server {
listen 80;
server_name myapp.com;
root /var/www/myapp/dist;
index index.html;
location / {
try_files $uri /index.html;
}
# Проксирование API-запросов
location /api/ {
proxy_pass http://localhost:5000/; # Node.js, Python, PHP и т. д.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}🟠Как Nginx балансирует нагрузку?
Если у нас несколько бэкенд-серверов, Nginx может распределять нагрузку между ними.
upstream backend {
server backend1.myapp.com;
server backend2.myapp.com;
}
server {
listen 80;
server_name api.myapp.com;
location / {
proxy_pass http://backend;
}
}🟠Как Nginx ускоряет сайт с кэшем?
Кэширование уменьшает нагрузку на сервер и ускоряет загрузку страниц.
location /static/ {
expires 7d; # Кэшировать файлы на 7 дней
add_header Cache-Control "public, max-age=604800";
}Ставь 👍 и забирай 📚 Базу знаний
🔥6👍3
🤔 Что такое позднее статическое связывание в PHP?
Это механизм, при котором PHP определяет класс, откуда был вызван статический метод, даже если он унаследован. Используется для того, чтобы self:: и static:: работали по-разному в иерархии классов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это механизм, при котором PHP определяет класс, откуда был вызван статический метод, даже если он унаследован. Используется для того, чтобы self:: и static:: работали по-разному в иерархии классов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥6