---
title: "Персональные веб-приложения"
description: "Как веб-приложение может хранить личные данные на устройствах пользователя, синхронизировать их и уменьшать роль центрального сервера."
date: 2024-03-24
---

До веба приложения обычно хранили данные на компьютере владельца. С
распространением веба данные переехали на корпоративные серверы, а
приватности стало меньше. Что изменится, если личные данные
веб-приложения будут прежде всего храниться на телефоне или компьютере
самого пользователя?

## Чем веб-приложение отличается от нативного

Главные отличия просты: веб-приложение работает в браузере, а для его
доставки обычно нужен сервер. Браузер стал своего рода операционной
системой для таких программ: у него есть Web API, правила безопасности и
доступ к экрану, клавиатуре, мыши, камере и другим возможностям
устройства. Этот доступ ограничен сильнее, чем у нативной ОС, но его
достаточно для взаимодействия человека, устройства и других программ.

Когда-то программы приносили на дискетах и CD, теперь почти всё приходит
по сети. Но браузерные ограничения пока не позволяют полноценно
запускать веб-приложение просто с флешки: нужен безопасный origin,
откуда браузер получит код.

<zoom-img src="/medium/img/3787d028d653/image-01.png" alt="Обычное веб-приложение с сервером и браузером" width="100%"></zoom-img>

В привычной схеме и код, и основные данные пользователей находятся на
сервере.

## Личное хранилище

Современные браузеры умеют сохранять и обрабатывать значительные объёмы
данных на клиенте через
[IndexedDB](https://en.wikipedia.org/wiki/Indexed_Database_API). Лимиты
зависят от устройства и браузера и могут измеряться десятками гигабайт.
Поэтому личную информацию приложения можно хранить непосредственно на
устройстве владельца.

<zoom-img src="/medium/img/3787d028d653/image-02.png" alt="Персональное веб-приложение с данными на устройстве" width="100%"></zoom-img>

Часть данных, например для начальной аутентификации, всё ещё может быть
на сервере. Но перенос основной личной обработки на устройство снижает
требования к центральной инфраструктуре и уменьшает объём информации,
который она видит.

## Роль сервера

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

<zoom-img src="/medium/img/3787d028d653/image-03.png" alt="Сервер временно передаёт данные между пользователями" width="100%"></zoom-img>

## WebRTC

Когда оба участника онлайн, [WebRTC](https://webrtc.org/?hl=en) может
передать данные напрямую; сервер нужен лишь для первоначального
согласования соединения. Нагрузка тогда распределяется между парами
пользователей, а не проходит через один центральный узел.

<zoom-img src="/medium/img/3787d028d653/image-04.png" alt="Прямая передача данных через WebRTC" width="100%"></zoom-img>

При асимметричном шифровании участники обмениваются публичными ключами,
шифруют и проверяют сообщения. Сервер может пересылать зашифрованный
буфер офлайн-получателю, не имея ключей к содержимому. На практике нужны
также защита ключей, проверка личности, резервное копирование и
продуманное восстановление доступа.

## Облака и pods

У одного человека часто несколько устройств с одним приложением. Если
каждое держит собственную базу, необходима репликация — личное облако
или pod, через который синхронизируются данные ноутбука и телефона.

<zoom-img src="/medium/img/3787d028d653/image-05.png" alt="Одно приложение на нескольких устройствах пользователя" width="100%"></zoom-img>

<zoom-img src="/medium/img/3787d028d653/image-06.png" alt="Репликация данных через облако или pod" width="100%"></zoom-img>

Эту роль уже играют Dropbox, Google Drive, OneDrive и подходы вроде
[Solid](https://solidproject.org/about). Даже для одного устройства
внешнее хранилище полезно как резервная копия на случай потери телефона
или компьютера.

## Вывод

Персональное веб-приложение не отказывается от сервера: оно меняет
распределение ответственности. Устройство пользователя держит и
обрабатывает личные данные, сервер доставляет код и координирует обмен,
а выбранное владельцем хранилище синхронизирует и резервирует данные.
Такая архитектура перспективна, если вместе с приватностью проектируются
надёжная синхронизация, шифрование и восстановление данных.

Личное хранилище, профиль и связь нескольких устройств — одна из граней
более общей модели браузера как персональной среды. Она собрана в книге
[«Браузер как операционная система для разработки современных
приложений»](/ru/books/browser-as-operating-system.html).
