SPA (Single Page Application) — это современный подход к разработке веб-приложений, при котором вся логика приложения загружается одной страницей, а последующие взаимодействия с пользователем происходят без полной перезагрузки страницы. Это достигается за счет динамического обновления контента с помощью JavaScript.
Единая загрузка страницы
Клиентский рендеринг
Плавный UX
Разделение frontend и backend
┌─────────────────┐ ┌─────────────────┐
│ │ │ │
│ Браузер │<----->│ API Сервер │
│ (SPA) │ │ (Backend) │
│ │ │ │
└─────────────────┘ └─────────────────┘
↑
│
┌─────┴─────┐
│ │
│ Пользователь │
│ │
└───────────┘
Frontend фреймворки:
Backend для SPA:
Пример связки:
// ASP.NET Core Controller
[ApiController]
[Route("api/[controller]")]
public class TodosController : ControllerBase
{
[HttpGet]
public IEnumerable<Todo> Get() { ... }
[HttpPost]
public IActionResult Post([FromBody] Todo todo) { ... }
}
✔ Плавный пользовательский опыт
✔ Быстрая реакция на действия пользователя
✔ Меньшая нагрузка на сервер (рендеринг на клиенте)
✔ Легче разрабатывать сложные интерфейсы
✔ Хорошая основа для PWA (Progressive Web Apps)
✖ Первоначальная загрузка может быть долгой
✖ Сложности с SEO (решаются SSR)
✖ Требуется управление состоянием на клиенте
✖ Более сложная отладка
const routes: Routes = [
{ path: 'products', component: ProductsComponent },
{ path: 'products/:id', component: ProductDetailComponent }
];
// Redux-подобное хранилище
const store = createStore({
state: { count: 0 },
mutations: {
increment(state) { state.count++ }
}
});
function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Clicked {count} times
</button>
);
}
const routes: Routes = [
{
path: 'admin',
loadChildren: () => import('./admin.module').then(m => m.AdminModule)
}
];
Server-Side Rendering (SSR)
Pre-rendering
// Blazor компонент
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount() { currentCount++; }
}
SPA — это мощная архитектура для создания современных веб-приложений с богатым UX, которая требует правильного подхода к маршрутизации, управлению состоянием и производительности. В экосистеме .NET разработчики могут использовать как традиционные JavaScript-фреймворки, так и инновационные решения вроде Blazor.