# Создание банковского приложения, часть 1: HTML-шаблоны и маршруты в веб-приложении ```mermaid journey title Your Banking App Development Journey section SPA Fundamentals Understand single-page apps: 3: Student Learn template concepts: 4: Student Master DOM manipulation: 4: Student section Routing Systems Implement client-side routing: 4: Student Handle browser history: 5: Student Create navigation systems: 5: Student section Professional Patterns Build modular architecture: 5: Student Apply best practices: 5: Student Create user experiences: 5: Student ``` Когда компьютер навигации Apollo 11 направлял корабль на Луну в 1969 году, он переключался между различными программами, не перезапуская всю систему. Современные веб-приложения работают аналогично – они изменяют то, что вы видите, без полной перезагрузки. Это создает плавный и отзывчивый интерфейс, который пользователи ожидают сегодня. В отличие от традиционных веб-сайтов, которые перезагружают целые страницы при каждом взаимодействии, современные веб-приложения обновляют только те части, которые необходимо изменить. Такой подход, как переключение дисплеев в центре управления полетами при постоянной связи, создает тот самый плавный опыт, к которому мы привыкли. Вот что делает эту разницу такой заметной: | Традиционные многостраничные приложения | Современные одностраничные приложения | |-----------------------------------------|---------------------------------------| | **Навигация** | Полная перезагрузка страницы для каждого экрана | Мгновенное переключение контента | | **Производительность** | Медленнее из-за загрузки полного HTML | Быстрее благодаря частичным обновлениям | | **Пользовательский опыт** | Резкие переходы между страницами | Плавные, похожие на приложение переходы | | **Обмен данными** | Сложно между страницами | Легкое управление состоянием | | **Разработка** | Множество HTML-файлов для поддержки | Один HTML с динамическими шаблонами | **Понимание эволюции:** - **Традиционные приложения** требуют запросов к серверу для каждого действия навигации - **Современные SPA** загружаются один раз и динамически обновляют контент с помощью JavaScript - **Ожидания пользователей** теперь ориентированы на мгновенные, бесшовные взаимодействия - **Преимущества производительности** включают уменьшение объема передаваемых данных и более быстрые ответы В этом уроке мы создадим банковское приложение с несколькими экранами, которые плавно переходят друг в друга. Как ученые используют модульные инструменты, которые можно перенастраивать для различных экспериментов, мы будем использовать HTML-шаблоны как повторно используемые компоненты, которые можно отображать по мере необходимости. Вы будете работать с HTML-шаблонами (повторно используемыми чертежами для различных экранов), маршрутизацией на JavaScript (система, которая переключает экраны) и API истории браузера (который обеспечивает корректную работу кнопки "Назад"). Это те же самые основные техники, которые используются в таких фреймворках, как React, Vue и Angular. К концу урока у вас будет рабочее банковское приложение, демонстрирующее профессиональные принципы одностраничных приложений. ```mermaid mindmap root((Single-Page Applications)) Architecture Template System Client-side Routing State Management Event Handling Templates Reusable Components Dynamic Content DOM Manipulation Content Switching Routing URL Management History API Navigation Logic Browser Integration User Experience Fast Navigation Smooth Transitions Consistent State Modern Interactions Performance Reduced Server Requests Faster Page Transitions Efficient Resource Usage Better Responsiveness ``` ## Предварительный тест [Предварительный тест](https://ff-quizzes.netlify.app/web/quiz/41) ### Что вам понадобится Нам понадобится локальный веб-сервер для тестирования нашего банковского приложения – не переживайте, это проще, чем кажется! Если у вас его еще нет, просто установите [Node.js](https://nodejs.org) и выполните команду `npx lite-server` из папки вашего проекта. Эта удобная команда запускает локальный сервер и автоматически открывает ваше приложение в браузере. ### Подготовка На вашем компьютере создайте папку с именем `bank` и файл с именем `index.html` внутри нее. Мы начнем с этого [шаблона HTML](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Что предоставляет этот шаблон:** - **Устанавливает** структуру документа HTML5 с правильным объявлением DOCTYPE - **Настраивает** кодировку символов как UTF-8 для поддержки международного текста - **Включает** адаптивный дизайн с мета-тегом viewport для совместимости с мобильными устройствами - **Устанавливает** описательный заголовок, который отображается на вкладке браузера - **Создает** чистую секцию body, где мы будем строить наше приложение > 📁 **Предварительный обзор структуры проекта** > > **К концу этого урока ваш проект будет содержать:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Ответственность файлов:** > - **index.html**: Содержит все шаблоны и обеспечивает структуру приложения > - **app.js**: Управляет маршрутизацией, навигацией и управлением шаблонами > - **Templates**: Определяют пользовательский интерфейс для входа, панели управления и других экранов --- ## HTML-шаблоны Шаблоны решают фундаментальную проблему веб-разработки. Когда Гутенберг изобрел печатный станок с подвижными литерами в 1440-х годах, он понял, что вместо того, чтобы вырезать целые страницы, он мог создать повторно используемые блоки букв и расставлять их по мере необходимости. HTML-шаблоны работают по тому же принципу – вместо создания отдельных HTML-файлов для каждого экрана вы определяете повторно используемые структуры, которые можно отображать по мере необходимости. ```mermaid flowchart TD A["📋 Template Definition"] --> B["💬 Hidden in DOM"] B --> C["🔍 JavaScript Finds Template"] C --> D["📋 Clone Template Content"] D --> E["🔗 Attach to Visible DOM"] E --> F["👁️ User Sees Content"] G["Login Template"] --> A H["Dashboard Template"] --> A I["Future Templates"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` Представьте шаблоны как чертежи для различных частей вашего приложения. Как архитектор создает один чертеж и использует его несколько раз, вместо того чтобы заново рисовать идентичные комнаты, мы создаем шаблоны один раз и используем их по мере необходимости. Браузер хранит эти шаблоны скрытыми, пока JavaScript не активирует их. Если вы хотите создать несколько экранов для веб-страницы, одним из решений будет создание одного HTML-файла для каждого экрана, который вы хотите отобразить. Однако это решение имеет некоторые неудобства: - Вам придется перезагружать весь HTML при переключении экрана, что может быть медленным. - Сложно обмениваться данными между различными экранами. Другой подход – иметь только один HTML-файл и определить несколько [HTML-шаблонов](https://developer.mozilla.org/docs/Web/HTML/Element/template) с использованием элемента `