<MyRusakov.ru />

Программирование на C++ в Unreal Engine 5

Программирование на C++ в Unreal Engine 5

Данный курс научит Вас созданию игр на C++ в Unreal Engine 5. Курс состоит из 12 разделов, в которых Вас ждёт теория и практика. Причём, в качестве практики будет создан весьма крупный проект объёмом свыше 5000 строк качественного кода, который уже на практике познакомит Вас с принципами создания игр на C++ в Unreal Engine 5.

Параллельно с курсом Вы также будете получать домашние задания, результатом которых станет, в том числе, полноценная серьёзная работа для портфолио.

Помимо самого курса Вас ждёт ещё и очень ценный Бонус: «Тестирование Unreal-проектов на Python», в рамках которого Вы научитесь писать очень полезные тесты для тестирования самых разных аспектов разработки игр.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Структура HTML‑документа: правильный head для начинающих и продолжающих

Структура HTML‑документа: правильный head для начинающих и продолжающих

Правильная структура HTML‑документа — это фундамент быстрой, доступной и предсказуемой страницы. Если в head бардак, страница может рендериться медленно, ломаться относительные ссылки, а поисковики неверно интерпретируют содержимое. Разберём «скелет» документа и лучшие практики head: от charset и viewport до base, link и script.

Минимальный каркас страницы

<!doctype html>
<html lang="ru">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Моя первая страница</title>
  </head>
  <body>
    <h1>Привет, мир!</h1>
  </body>
</html>

Здесь всё по минимуму: декларация doctype включает стандартный режим, атрибут lang помогает технологиям доступности и поисковикам, а meta viewport делает страницу адаптивной на мобильных.

Тег html: lang и dir

Указывайте язык документа и направление текста. Это важно для озвучивания экранными читалками и корректного переноса слов.

<html lang="ru"> ... </html>
<!-- Для арабского справа-налево: -->
<html lang="ar" dir="rtl"> ... </html>

Head по пунктам

1) meta charset и meta viewport

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
  • charset первым, чтобы избежать «кракозябр».
  • viewport обязателен для мобильной вёрстки; не используйте user-scalable=no без необходимости — это ухудшает доступность.

2) title: один на страницу

<title>Каталог — Веломагазин «Ротор»</title>
  • Содержательный и уникальный на каждой странице.
  • Избегайте шаблонов вроде «Главная — Главная».

3) base: используем осторожно

Тег base задаёт базовый URL и/или target для всех относительных ссылок и форм на странице. Это удобно при встраивании в подпути или iframe, но легко «сломать» навигацию.

<base href="https://example.com/app/" target="_self">
<!-- Теперь /css/style.css интерпретируется как https://example.com/app/css/style.css -->
  • Старайтесь не использовать base без чёткой причины.
  • Если используете — держите его единственным и помещайте в начале head.

4) link: стили и не только

Классика — подключение CSS. Но link решает и задачи производительности.

<!-- Основная таблица стилей -->
<link rel="stylesheet" href="/css/styles.css">

<!-- Отложенные стили для печати или больших экранов -->
<link rel="stylesheet" href="/css/print.css" media="print">

<!-- Предзагрузка критического шрифта (быстрое появление текста) -->
<link rel="preload" href="/fonts/Inter-Variable.woff2" as="font" type="font/woff2" crossorigin>

<!-- Ускорение первого запроса к CDN -->
<link rel="preconnect" href="https://cdn.example.com" crossorigin>
<link rel="dns-prefetch" href="//cdn.example.com">
  • preload используйте только для действительно критичных ресурсов.
  • preconnect помогает сократить время установки соединения к сторонним доменам.
  • dns-prefetch дёшево уменьшает задержку DNS (актуально для старых браузеров).

Иконки и манифест (кратко, для полноты):

<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="manifest" href="/site.webmanifest">
<meta name="theme-color" content="#0ea5e9">

5) script в head: defer, async и module

Скрипты без атрибутов блокируют парсинг HTML. В head почти всегда подключайте с defer, чтобы загрузка шла параллельно, а выполнение произошло после парсинга.

<!-- Современный модульный JS -->
<script type="module" src="/js/app.js"></script>
<!-- Фоллбэк для старых браузеров -->
<script nomodule src="/js/app.legacy.js" defer></script>

<!-- Скрипт аналитики: можно async (не гарантируется порядок) -->
<script src="https://www.googletagmanager.com/gtag/js?id=G-XXXX" async></script>

<!-- Ваш бандл без модулей -->
<script src="/js/bundle.js" defer></script>
  • defer сохраняет порядок загрузки, выполняется после парсинга, перед DOMContentLoaded.
  • async хорошо для независимых скриптов (аналитика, виджеты).
  • type="module" автоматически делает загрузку не блокирующей, поддерживает импорт.

Body: базовый каркас

Не углубляясь в семантическую разметку, покажем типовой каркас. Один h1 на страницу, основные области — header, main, footer.

<body>
  <header class="site-header">...</header>
  <main id="content" tabindex="-1">
    <h1>Каталог</h1>
    <!-- Контент страницы -->
  </main>
  <footer class="site-footer">...</footer>
</body>

Атрибут tabindex="-1" на main помогает быстро перейти к содержимому по ссылке «Пропустить к контенту» — плюс к доступности.

Чеклист «правильного head»

  • doctype: <!doctype html>
  • <html lang="..."> указан, при необходимости dir="rtl"
  • meta charset="utf-8" стоит в начале
  • meta viewport задан корректно
  • <title> уникален для страницы
  • Нет дубликатов meta charset/viewport/title
  • CSS подключены через link rel="stylesheet"; критичные шрифты preloaded
  • Скрипты не блокируют парсинг: defer / async / module
  • preconnect/dns-prefetch добавлены только к реально используемым доменам
  • base отсутствует либо настроен осознанно

Частые ошибки и как их избежать

  • Отсутствует lang → добавьте <html lang="ru"> для корректной локализации и TTS.
  • Дубли meta viewport (особенно в SPA) → оставьте один, самый общий.
  • Блокирующие скрипты в head → используйте defer или переносите в конец body.
  • Неверное использование base → ломаются относительные пути. Либо не используйте, либо покрывайте тестами ссылки и формы.
  • Одинаковые title на всех страницах → ухудшается навигация и кликабельность сниппетов.
  • Избыточный preload (всё подряд) → перегруз сети и ухудшение LCP. Прелоадьте только критичное.

Готовый шаблон head для продакшна

<!doctype html>
<html lang="ru">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Название страницы — Проект</title>
  <meta name="description" content="Короткое описание страницы: что это и зачем пользователю.">

  <!-- Иконки и манифест -->
  <link rel="icon" href="/favicon.ico" sizes="any">
  <link rel="icon" href="/icon.svg" type="image/svg+xml">
  <link rel="manifest" href="/site.webmanifest">
  <meta name="theme-color" content="#0ea5e9">

  <!-- Производительность -->
  <link rel="preconnect" href="https://cdn.example.com" crossorigin>
  <link rel="dns-prefetch" href="//cdn.example.com">
  <link rel="preload" href="/fonts/Inter-Variable.woff2" as="font" type="font/woff2" crossorigin>

  <!-- Стили -->
  <link rel="stylesheet" href="/css/styles.css">

  <!-- Скрипты -->
  <script type="module" src="/js/app.js"></script>
  <script nomodule src="/js/app.legacy.js" defer></script>
</head>
<body>
  <header>...</header>
  <main id="content" tabindex="-1">...</main>
  <footer>...</footer>
</body>
</html>

Этот шаблон закрывает 90% кейсов: корректная кодировка, адаптивность, быстрый текст за счёт предзагруженного шрифта, неблокирующие скрипты, базовые иконки и манифест.

Практические советы

  • Проверяйте head в Lighthouse/Pagespeed: подсказки помогут найти блокирующие ресурсы.
  • Если видите «Render‑blocking resources», подумайте о критическом CSS inline и defer для JS.
  • Пересматривайте head при каждом релизе: особенно title/description и лишние подключения.
  • Держите единый шаблон head (layout), чтобы избежать дубликатов и расхождений.

Что дальше изучить

Закрепить навык и быстро перейти к уверенной вёрстке поможет практический курс. Рекомендую начать с «Вёрстка сайта с нуля 2.0» — там вы шаг за шагом соберёте проект и отработаете структуру документа на реальных макетах.  Посмотреть программу и стартовать сегодня »

Итог: чёткая структура HTML‑документа и аккуратный head не только ускоряют загрузку и улучшают доступность, но и делают проект предсказуемым в поддержке. Начинайте с минимума, добавляйте только нужное и регулярно ревизируйте подключённые ресурсы.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.