[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":167,"service-parent:\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":431,"service-children:\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":740,"glossary":741},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Каждое наше приложение выходит и на Android — платформенные API, фоновое выполнение, разрешения и требования магазина вместе с ними.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","Фронтенд-фреймворк, в котором мы работаем, когда продукт уже на Angular, — строгая структура, подходящая большим долгоживущим приложениям.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","Язык, на котором написано каждое наше Flutter-приложение, — строгая null safety, полноценный pattern matching и компиляция в нативный код и веб.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","Python-фреймворк, который мы берём, когда продукту нужны админка, аутентификация и модель данных в первый же день, а не самописный сервис.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Каждый наш сервис поставляется в виде контейнера, поэтому на ноутбуке, в CI и в продакшене работает один и тот же артефакт, а не три разных.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","Автоматизация релизов в нашей мобильной разработке — подпись, сборки и загрузка в сторы идут из CI, а не с ноутбука одного инженера в день релиза.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Наш основной мобильный стек с 2018 года — одна кодовая база на Dart для iOS, Android, веба и десктопа без отдельной команды под каждую платформу.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Все проекты, к которым мы прикасаемся, живут в Git — ревью пул-реквестов, CI на каждой ветке и история, понятная и спустя месяцы.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Наш бэкенд-язык для real-time API и сервисов под нагрузкой — маленькие бинарники, быстрая сборка и конкурентность, которая остаётся читаемой.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","Облако, в котором работают наши продакшен-нагрузки, — управляемый Kubernetes, хранилище и сеть без серверов, которые надо обслуживать руками.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","Система сборки, через которую проходит каждый Android-релиз, — флейворы, конфигурации подписи и вся обвязка зависимостей под Flutter-приложением.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","Так мы упаковываем деплой в Kubernetes — сервис, конфигурация, секреты и ingress как одна версионируемая единица, которую можно выкатить и откатить.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","То, что мы берём, когда Flutter-приложению нужен настоящий Android под ним, — platform channels, фоновые задачи и интеграции с нативными SDK.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Общая бизнес-логика для iOS и Android, а нативный интерфейс у каждой платформы свой, — альтернатива, когда Flutter не подходит.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","Так мы запускаем сервисы в продакшене — деплой в Helm-чартах, откатываемые выкатки и масштабирование, для которого не нужен человек в три ночи.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Лёгкий обмен сообщениями между сервисами — publish\u002Fsubscribe и request\u002Freply без эксплуатационного веса полноценного кластера брокера.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue с серверным рендерингом, роутингом и SEO из коробки — так мы делаем сайты и веб-приложения, которые должны быстро грузиться и индексироваться.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Там, где PHP-бэкенд уже есть: дорабатываем его, интегрируемся с ним и делаем мобильные и веб-клиенты, которые он обслуживает.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Наша база данных по умолчанию — от проектирования схемы до настройки индексов мы берём её, если у продукта нет конкретной причины взять другую.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Наш язык для бэкендов, работы с данными и AI-интеграций — включая Python-биндинги, которые мы выпускаем к собственным инструментам на Rust.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","Фронтенд-библиотека, в которой мы работаем, когда продукт уже на React, — компоненты, хуки и выросшая вокруг них экосистема.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Место для данных, которые должны быть быстрыми и которые не жалко пересчитать, — кэши, сессии, лимиты и очереди фоновых задач.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","Язык, на котором написана автоматизация наших мобильных релизов, — лейны Fastlane, кастомные действия и связка с CI, доставляющая сборки в сторы.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Куда мы идём, когда важны и скорость, и корректность, — рендеринг документов, CLI-инструменты и сервисы, которые обязаны оставаться быстрыми и предсказуемыми.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","База данных, которая поставляется внутри приложения, — локальные кэши, offline-first хранилище и всё, что должно работать без сети.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","Headless CMS, к которой мы обращаемся, когда контент должны вести сами редакторы, — готовая админка и чистый API вместо самописных.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","То, что мы берём, когда Flutter-приложению нужен настоящий iOS под ним, — platform channels, интеграции нативных SDK, виджеты и App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","UI-фреймворк Apple, на котором мы делаем нативные поверхности, недоступные Flutter-приложению, — виджеты, App Clips и расширения.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","Так мы стилизуем весь фронтенд — утилитарные классы и дизайн-токены вместо таблицы стилей, которая только растёт и никогда не чистится.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","Стандарт для всего, что мы пишем для браузера и для Node-сервисов, — типы ловят ошибки интеграции раньше, чем код доходит до ревью.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Наш фронтенд-фреймворк для админок, дашбордов мерчантов и веб-приложений, которые должны оставаться поддерживаемыми годами, а не спринтами.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","Открытая модель распознавания речи от OpenAI — движок транскрипции для голосового ввода, который работает и как бэкенд-сервис, и прямо на устройстве в приложении.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":395,"extension":396,"footerCta":397,"headingCta":411,"image":415,"meta":419,"metaDescription":420,"metaTitle":421,"navigation":422,"ogDescription":423,"parent":424,"path":425,"seo":426,"slug":427,"stem":428,"updated":429,"__hash__":430},"services_ru\u002Fservices\u002Fembeddable-widgets.md","Встраиваемые виджеты и скрипты",{"type":171,"value":172,"toc":375},"minimark",[173,177,180,185,225,230,233,237,245,249,256,260,263,267,270,274,277,281,284,288,291,295,303,307,313,323,326,330,347,350,354,357,361],[174,175,176],"p",{},"Встраиваемый виджет — это код, который ваши клиенты вставляют на собственные сайты: сниппет аналитики, кнопка чата, форма бронирования, измерительный сборщик. Это самый трудный вид фронтенд-инженерии, потому что всё, что обычный веб-проект принимает как данность, здесь отсутствует: вы не выбираете ни фреймворк, ни базовый уровень браузеров, ни соседние скрипты на странице, ни момент, когда ваши пользователи обновятся. Ваш код работает гостем на страницах, которых вы никогда не увидите, и вести себя он обязан на всех сразу.",[174,178,179],{},"Это нишевая дисциплина, и мы в ней работали: построенный нами сборщик сигналов встроен в тысячи сайтов, которые мы не контролируем, и кормит платформу, оценивающую десятки тысяч запросов в минуту.",[181,182,184],"h3",{"id":183},"какие-продукты-мы-делаем","Какие продукты мы делаем",[186,187,188,196,202,208,214],"ul",{},[189,190,191,195],"li",{},[192,193,194],"strong",{},"Измерительные и аналитические сборщики"," — скрипты, которые собирают сигналы со страницы и отправляют их на вашу платформу, как тот, что стоит за нашей работой по детекции ботов",[189,197,198,201],{},[192,199,200],{},"Функциональные виджеты"," — чат, бронирование, формы, калькуляторы: кусочек вашего продукта, живущий внутри страницы вашего клиента",[189,203,204,207],{},[192,205,206],{},"Интеграции, устанавливаемые сниппетом"," — онбординг «добавьте один тег script», который ставит ваш продукт перед посетителями вашего клиента",[189,209,210,213],{},[192,211,212],{},"Приём данных за скриптом"," — бэкенд, принимающий то, что отправляет сниппет, на любом объёме, в который складывается трафик ваших клиентов",[189,215,216,219,220],{},[192,217,218],{},"Дашборд, из которого ваши клиенты за всем этим наблюдают"," — интерфейсы отчётности и настройки разобраны на странице ",[221,222,224],"a",{"href":223},"\u002Fservices\u002Fweb-development\u002Fadmin-dashboards","админ-панелей и дашбордов",[226,227,229],"h2",{"id":228},"кто-будет-делать-ваш-встраиваемый-скрипт","Кто будет делать ваш встраиваемый скрипт",[174,231,232],{},"Одну такую систему мы построили целиком — от сниппета до платформы за ним.",[181,234,236],{"id":235},"сборщик-в-тысячах-враждебных-страниц","Сборщик в тысячах враждебных страниц",[174,238,239,240,244],{},"Для ",[221,241,243],{"href":242},"\u002Fportfolio\u002Frealtime-bot-detection-platform","платформы детекции ботов в реальном времени"," мы построили браузерный сборщик, который собирает доказательства, на основе которых выносится вердикт «человек или бот». Это чистый JavaScript без фреймворка, без рантайма, добавляемого на этапе сборки, и без зависимостей, потому что он работает в тысячах страниц рядом со всем, что эти страницы ещё загружают, не может рассчитывать на модульную систему или набор полифилов и не имеет права конфликтовать с сайтом вокруг себя. Среда активно враждебна: то, что он измеряет, пытается его обойти. И он маленький, потому что каждый килобайт списывается с перформанс-бюджета самого клиента, на каждом просмотре страницы, всегда.",[181,246,248],{"id":247},"и-платформа-принимающая-то-что-он-отправляет","И платформа, принимающая то, что он отправляет",[174,250,251,252,255],{},"Сниппет — это маленькая видимая часть системы. За этим сборщиком мы построили сервисы приёма и скоринга на Go и дата-платформу под ними, потому что успешный встраиваемый скрипт умножает собственный трафик на каждого клиента, который его установил, и бэкенд должен быть рассчитан на эту арифметику с первого дня. Полная архитектура — в ",[221,253,254],{"href":242},"кейсе",".",[226,257,259],{"id":258},"чего-на-самом-деле-требует-встраиваемый-код","Чего на самом деле требует встраиваемый код",[174,261,262],{},"Пять ограничений отделяют эту работу от обычной фронтенд-инженерии.",[181,264,266],{"id":265},"бюджет-размера-измеряемый-в-килобайтах","Бюджет размера, измеряемый в килобайтах",[174,268,269],{},"Ваш скрипт отгружается каждому посетителю каждого клиента. Рантайм фреймворка оказался бы больше целого хорошо сделанного сборщика, поэтому серьёзные встраиваемые скрипты обходятся без зависимостей по замыслу, а не из предпочтений. Размер вашего скрипта ваши клиенты видят в собственных Lighthouse-показателях.",[181,271,273],{"id":272},"ноль-предположений-о-принимающей-странице","Ноль предположений о принимающей странице",[174,275,276],{},"Ни модульной системы, ни базового уровня современных браузеров, ни гарантии, что страница уже не грузит конфликтующую библиотеку, чересчур усердный CSS-reset или вторую копию вашего же скрипта. Всё работает в собственной области видимости, глобальное пространство имён трогается один раз — если вообще трогается, — а любой отказ происходит тихо, вместо того чтобы уронить чужое оформление заказа.",[181,278,280],{"id":279},"защита-по-замыслу","Защита по замыслу",[174,282,283],{},"Страница, в которой работает ваш код, может быть инструментирована, пропатчена или эмулирована вокруг него. В нашей работе по детекции ботов обойти измерение и есть вся работа противника. Даже в более дружелюбных встраиваниях урок тот же: читать браузерные API напрямую, проверять среду, а не доверять ей, и держать каждое суждение на сервере, где логика не видна странице.",[181,285,287],{"id":286},"версионирование-которое-нельзя-навязать","Версионирование, которое нельзя навязать",[174,289,290],{},"Клиенты вставляют ваш сниппет один раз и больше его не трогают. Эта одна строка обязана оставаться стабильным загрузчиком, пока всё за ней эволюционирует: поэтапные раскатки, нерушимый контракт между загрузчиком и полезной нагрузкой и совместимость, поддерживаемая годами, — потому что «пожалуйста, обновите код встраивания» — письмо, на которое никто не отвечает.",[181,292,294],{"id":293},"согласие-и-приватность-как-архитектура","Согласие и приватность как архитектура",[174,296,297,298,302],{},"Сторонний скрипт — это третья сторона, поэтому ",[299,300],"term",{"slug":301},"gdpr"," применяется на каждом сайте, который его устанавливает. Что скрипт собирает, когда ему можно работать относительно состояния согласия на принимающей странице и что уходит по сети — это проектные решения, которые мы фиксируем явно и заранее, чтобы комплаенс-ревью ваших клиентов пропускало ваш встраиваемый код, а не помечало его.",[226,304,306],{"id":305},"как-мы-работаем","Как мы работаем",[174,308,309,312],{},[192,310,311],{},"Проект с фиксированным объёмом."," Сниппет, загрузчик, приём данных и конвейер деплоя, который безопасно их версионирует: всё это оценивается и выпускается как одна система.",[174,314,315,318,319,255],{},[192,316,317],{},"Staff augmentation."," Наши инженеры входят в команду, которая владеет вашей платформой, — см. ",[221,320,322],{"href":321},"\u002Fservices\u002Fteam-augmentation","расширение команды",[174,324,325],{},"В обоих случаях смету под задачу мы присылаем в течение двух рабочих дней после того, как разберёмся в требованиях.",[226,327,329],{"id":328},"сколько-стоит-встраиваемый-виджет","Сколько стоит встраиваемый виджет",[174,331,332,333,337,338,343,344,255],{},"Сниппет маленький, система — нет. Встраиваемый скрипт оценивается по тем же опубликованным тарифам, что и страница ",[221,334,336],{"href":335},"\u002Fservices\u002Fweb-development","веб-разработки",". Сборщик или виджет вместе с загрузчиком и компактным приёмом данных попадает в тариф веб-приложения, ",[339,340],"service-price",{"format":341,"service":342},"full","web-development\u002Fapp","; когда платформа за ним несёт настоящий масштаб (скоринг, аналитику, клиентские дашборды), система оценивается как работа уровня SaaS, ",[339,345],{"format":341,"service":346},"web-development\u002Fsaas",[174,348,349],{},"Это те же ключи, из которых рисуется таблица цен пилларной страницы, поэтому разойтись они не могут. Что двигает цифру: насколько враждебны среды, которые ваш скрипт должен пережить, в какой суммарный трафик складываются страницы ваших клиентов и какая часть принимающей платформы уже существует.",[226,351,353],{"id":352},"частые-вопросы","Частые вопросы",[174,355,356],{},"Что чаще всего спрашивают команды, отправляющие код в чужие страницы.",[358,359],"questions",{":items":360},"[{\"title\":\"Почему нельзя собрать наш виджет на React или Vue?\",\"text\":\"Потому что рантайм фреймворка оказался бы больше всего виджета целиком, и потому что принимающая страница может уже выполнять другую версию того же фреймворка или глобальное окружение, которое воюет с вашим. Встраиваемый код, который отгружается каждому посетителю каждого клиента, измеряется относительно перформанс-бюджета каждого из этих клиентов, поэтому серьёзные встраиваемые скрипты — это чистый JavaScript без зависимостей по замыслу. Собственный сайт вашего продукта может быть сколь угодно тяжёлым на фреймворки; код, который путешествует, обязан быть самодостаточным.\"},{\"title\":\"Как встраиваемый скрипт не ломает сайты, которые его устанавливают?\",\"text\":\"Ничего не предполагая и ничего не трогая. Всё работает внутри собственной области видимости, глобальное пространство имён трогается один раз — если вообще трогается, — стили изолированы, чтобы CSS принимающей страницы не протекал ни внутрь, ни наружу, а каждый путь отказа деградирует тихо: сломанный виджет никогда не должен утащить за собой оформление заказа клиента. Мы строим в расчёте на враждебные страницы с самого начала, потому что сборщик, который мы эксплуатируем, работает рядом со всем, что загружают тысячи никак не связанных сайтов.\"},{\"title\":\"Как вы обновляете скрипт, который клиенты вставили годы назад?\",\"text\":\"Вставленная строка никогда не является продуктом. Это крошечный стабильный загрузчик, который подтягивает актуальную полезную нагрузку. Контракт между загрузчиком и нагрузкой — тот единственный интерфейс, который нельзя ломать, а всё за ним может эволюционировать: поэтапные раскатки сначала на долю трафика, версионированные нагрузки и мгновенный откат, когда релиз браузера преподносит сюрприз. Правильно спроектированный в первый день, этот шов и делает «пожалуйста, обновите код встраивания» письмом, которое вам никогда не придётся отправлять.\"},{\"title\":\"Что с GDPR и согласием на cookie для встраиваемых скриптов?\",\"text\":\"Сторонний скрипт — это третья сторона по GDPR на каждом сайте, который его устанавливает, поэтому под согласие мы проектируем с самого начала. Мы явно фиксируем, что скрипт собирает, идентифицирует ли что-то из этого человека и как он ведёт себя относительно состояния согласия принимающей страницы — включая режим работы без согласия там, где этого требует комплаенс. Цель — встраиваемый код, который приватность-ревью ваших клиентов одобряет без совещания.\"},{\"title\":\"Можете ли вы построить и бэкенд, который принимает данные?\",\"text\":\"Да, и мы охотнее строим обе стороны, чем любую из них по отдельности. Успешный встраиваемый скрипт умножает свой трафик на каждого клиента, который его установил, поэтому приём данных должен быть рассчитан на суммарный объём с самого начала: платформа за нашим сборщиком оценивает десятки тысяч запросов в минуту в реальном времени, на сервисах на Go, которые мы построили целиком. Сниппет и его бэкенд — одна система, и её отказы живут на их стыке.\"},{\"title\":\"Сколько стоит разработка встраиваемого виджета?\",\"text\":\"Виджет или сборщик с загрузчиком и компактным приёмом данных обычно стоит от 1 200 000 до 3 200 000 рублей и занимает один-три месяца: это опубликованный тариф веб-приложения на нашей странице веб-разработки. Когда настоящий продукт — принимающая платформа со скорингом в реальном времени, аналитикой и клиентскими дашбордами, система оценивается как работа уровня SaaS, свыше 4 000 000. Сам сниппет редко бывает дорогой частью; дорог трафик, который он порождает.\"}]",[174,362,363,364,367,368,372,373,255],{},"Прочитайте, как сборщик встроен в систему целиком, в ",[221,365,366],{"href":242},"кейсе детекции ботов",", посмотрите на ",[221,369,371],{"href":370},"\u002Ftechnologies\u002Fgo","сервисы на Go"," за ним или начните с пилларной страницы ",[221,374,336],{"href":335},{"title":376,"searchDepth":377,"depth":377,"links":378},"",2,[379,381,385,392,393,394],{"id":183,"depth":380,"text":184},3,{"id":228,"depth":377,"text":229,"children":382},[383,384],{"id":235,"depth":380,"text":236},{"id":247,"depth":380,"text":248},{"id":258,"depth":377,"text":259,"children":386},[387,388,389,390,391],{"id":265,"depth":380,"text":266},{"id":272,"depth":380,"text":273},{"id":279,"depth":380,"text":280},{"id":286,"depth":380,"text":287},{"id":293,"depth":380,"text":294},{"id":305,"depth":377,"text":306},{"id":328,"depth":377,"text":329},{"id":352,"depth":377,"text":353},"JavaScript, который работает внутри чужих страниц, — без зависимостей, защищённый и маленький, от команды, чей сборщик встроен в тысячи сторонних сайтов","md",{"heading":398,"text":399,"buttons":400},"Отправляете код в страницы, которые не контролируете?","Расскажите, что ваш сниппет должен делать и где ему предстоит работать. Мы честно опишем бюджет ограничений — и то, что должен выдерживать бэкенд за ним.",[401,407],{"to":402,"label":403,"leadingIcon":404,"color":405,"variant":406},"\u002Fcontact?intent=web-development","Записаться на консультацию","lucide:message-circle","neutral","outline",{"to":242,"label":408,"color":409,"variant":410},"Смотреть сборщик детекции ботов","primary","solid",[412,413],{"to":402,"label":403,"leadingIcon":404,"color":409,"variant":410},{"to":242,"label":414,"color":405,"variant":406},"Смотреть наши работы",{"url":416,"alt":417,"text":418},"\u002Fservices\u002Fembeddable-widgets.webp","Разработка встраиваемых виджетов и сторонних скриптов","Ваш код — в чужих страницах",{},"Разработка встраиваемых виджетов и сторонних скриптов: JavaScript без зависимостей для чужих страниц — и бэкенд, принимающий то, что они отправляют.","Разработка встраиваемых виджетов и скриптов",true,"Код, который уходит в страницы, которые вы не контролируете, — от команды, чей сборщик работает в тысячах сторонних сайтов на десятках тысяч запросов в минуту.","web-development","\u002Fservices\u002Fweb-development\u002Fembeddable-widgets",{"title":169,"description":395},"embeddable-widgets","services\u002Fembeddable-widgets","2026-09-05","04BuSUd_PHg5IgK2VvNPZPDuK7CDjt1ObhB7XArwSvc",{"id":432,"title":433,"body":434,"description":712,"extension":396,"footerCta":713,"headingCta":723,"image":729,"meta":732,"metaDescription":733,"metaTitle":734,"navigation":422,"ogDescription":735,"parent":736,"path":335,"seo":737,"slug":424,"stem":738,"updated":429,"__hash__":739},"services_ru\u002Fservices\u002Fweb-development.md","Веб-разработка",{"type":171,"value":435,"toc":699},[436,440,443,465,469,473,476,480,483,487,490,494,504,508,521,526,539,543,546,590,594,597,603,609,620,650,654,657,661,668,670,673,696],[226,437,439],{"id":438},"современная-веб-разработка-на-nuxt-и-ssr","Современная веб-разработка на Nuxt и SSR",[174,441,442],{},"Мы создаём быстрые, понятные поисковикам веб-приложения на современном стеке с серверным рендерингом. Не конструктор сайтов и не раздутый single-page app, который отдаёт Google пустой экран, — настоящие приложения, которые рендерятся на сервере, быстро грузятся на телефоне и ранжируются.",[174,444,445,446,449,450,454,455,459,460,464],{},"Насколько мы уверены в этом стеке? ",[192,447,448],{},"Этот самый сайт собран на нём"," — Nuxt 4, ",[299,451,453],{"slug":452},"server-side-rendering","серверный рендеринг",", Tailwind CSS и Nuxt Content. Мы выбрали эти инструменты не для лендинга — мы ведём на них собственный бизнес. И делали на них проекты для клиентов, включая ",[221,456,458],{"href":457},"\u002Fportfolio\u002Fformtastic","Formtastic",", платформу для создания форм на Nuxt, и ",[221,461,463],{"href":462},"\u002Fportfolio\u002Fcashback-loyalty-platform","платформу лояльности с кешбэком",", чья админка на Nuxt запускает брендированные приложения поверх PHP-сервисов.",[466,467],"statistics-grid",{":items":468},"[{\"icon\": \"lucide:search\", \"value\": \"SSR\", \"label\": \"Индексируется сразу\", \"description\": \"Серверный HTML, который краулеры читают без запуска JavaScript\"}, {\"icon\": \"lucide:gauge\", \"value\": \"90+\", \"label\": \"Цель по Lighthouse\", \"description\": \"Мы строим под Core Web Vitals, а не против них\"}, {\"icon\": \"lucide:smartphone\", \"value\": \"Mobile-First\", \"label\": \"Адаптивно везде\", \"description\": \"Сначала под телефоны, затем — десктоп\"}, {\"icon\": \"lucide:code\", \"value\": \"Type-Safe\", \"label\": \"TypeScript насквозь\", \"description\": \"От слоя API до пропсов компонентов\"}]",[226,470,472],{"id":471},"наш-стек-и-почему-nuxt-ssr","Наш стек — и почему Nuxt + SSR",[174,474,475],{},"Выбор фреймворка — это разница между сайтом, который Google читает мгновенно, и тем, который он с трудом рендерит. Вот на чём мы строим и почему.",[181,477,479],{"id":478},"серверный-рендеринг-для-seo","Серверный рендеринг для SEO",[174,481,482],{},"Классический single-page app отдаёт пустую HTML-оболочку и просит браузер собрать страницу с помощью JavaScript. От этого страдают краулеры, превью ссылок и медленные устройства. Nuxt рендерит полный HTML на сервере, поэтому контент присутствует уже в первом ответе — мета-теги, заголовки, структурированные данные и текст, всё до того, как выполнится хоть строка клиентского JavaScript. Это самый мощный рычаг внутренней SEO-оптимизации, который может дать фреймворк, и здесь он по умолчанию, а не как надстройка.",[181,484,486],{"id":485},"tailwind-для-быстрого-единообразного-ui","Tailwind для быстрого, единообразного UI",[174,488,489],{},"Мы стилизуем на Tailwind CSS — utility-first, без хаотичных глобальных стилей, без мёртвого CSS, который грузится пользователю. Он держит дизайн-систему единой на всех страницах, делает адаптивные брейкпоинты явными и отгружает только реально используемые классы. Результат — UI, который быстро собирать, легко поддерживать и который мало весит.",[181,491,493],{"id":492},"nuxt-content-для-контентных-сайтов","Nuxt Content для контентных сайтов",[174,495,496,497,503],{},"Для маркетинговых сайтов, документации и блогов ",[221,498,502],{"href":499,"rel":500},"https:\u002F\u002Fcontent.nuxt.com",[501],"nofollow","Nuxt Content"," превращает Markdown в полностью отрендеренные на сервере страницы с типобезопасными схемами — ровно так работают блог и страницы услуг этого сайта. Редакторы пишут Markdown; сайт остаётся быстрым и индексируемым; разработчики держат всё под контролем версий. База данных не нужна.",[181,505,507],{"id":506},"strapi-когда-нужна-headless-cms","Strapi, когда нужна headless CMS",[174,509,510,511,515,516,520],{},"Когда контентом должны владеть нетехнические редакторы — товары, объявления, кампании, — мы подключаем ",[221,512,134],{"href":513,"rel":514},"https:\u002F\u002Fstrapi.io",[501],", open-source ",[299,517,519],{"slug":518},"headless-cms","headless CMS",". Ваша команда получает удобную админку; фронтенд на Nuxt получает данные через чистый API и рендерит их на сервере. Вы получаете редакторскую свободу без потери производительности и SEO, а данные и хостинг остаются вашими.",[522,523],"features",{":items":524,":title":525},"[{\"label\": \"Мобильная совместимость\", \"description\": \"Mobile-first, адаптивные макеты, которые работают на любом экране от телефона до широкоформатного — протестировано, а не на авось\"}, {\"label\": \"Правильная аутентификация\", \"description\": \"Сессии, OAuth и JWT с реальными серверными проверками авторизации — а не экран входа с открытым бэкдором\"}, {\"label\": \"Безопасные cookie и согласие\", \"description\": \"httpOnly, secure, SameSite cookie для сессий плюс обработка согласия по GDPR для аналитики и трекинга\"}, {\"label\": \"SEO встроено\", \"description\": \"Серверные мета-теги, Open Graph, canonical и hreflang, структурированные данные JSON-LD на каждой странице\"}, {\"label\": \"Производительность и Core Web Vitals\", \"description\": \"Оптимизация изображений, code splitting и кеширование, настроенные под прохождение Core Web Vitals на реальных устройствах\"}, {\"label\": \"Интеграция headless CMS\", \"description\": \"Nuxt Content или Strapi, чтобы команда публиковала контент, не трогая код\"}]","Что мы делаем правильно",[527,528,531],"info-box",{":leading-icon":529,":title":530},"lucide:shield-check","Безопасность — часть сборки",[174,532,533,534,538],{},"Аутентификация, cookie и работа с данными — именно здесь большинство веб-приложений незаметно даёт утечки. Мы делаем это правильно с самого начала — а если вам досталось приложение, в котором вы не уверены, наш ",[221,535,537],{"href":536},"\u002Fservices\u002Fai-code-audit","аудит AI-кода"," проверит аутентификацию, безопасность сессий и утечки данных, пока они не стали инцидентом.",[226,540,542],{"id":541},"что-мы-строим","Что мы строим",[174,544,545],{},"Четыре вида веб-работы возвращаются в наших проектах снова и снова, и теперь у каждого есть собственная страница с доказательствами за ней:",[186,547,548,559,571,580],{},[189,549,550,555,556,255],{},[192,551,552],{},[221,553,554],{"href":223},"Админ-панели и дашборды"," — бэк-офисы, стоящие за продуктами: ролевой доступ, формы, которые управляют реальной машинерией, таблицы, остающиеся удобными на любом объёме. Опорный пример — админка, запускающая брендированные приложения нашей ",[221,557,558],{"href":462},"платформы кэшбэка и лояльности",[189,560,561,567,568,570],{},[192,562,563],{},[221,564,566],{"href":565},"\u002Fservices\u002Fweb-development\u002Fnuxt-development","Разработка на Nuxt"," — маркетинговые сайты, контентные платформы и миграции на серверный рендеринг, как переезд ",[221,569,458],{"href":457}," с шаблонов Django на Nuxt. Этот сайт — постоянная демонстрация.",[189,572,573,579],{},[192,574,575],{},[221,576,578],{"href":577},"\u002Fservices\u002Fweb-development\u002Fcompanion-web-app","Парные веб-приложения"," — браузерная сторона продукта, который живёт прежде всего в мобильном приложении и делит с ним один API и один бэкенд.",[189,581,582,586,587,255],{},[192,583,584],{},[221,585,169],{"href":425}," — JavaScript, работающий внутри страниц, которые вы не контролируете, без зависимостей и защищённый по замыслу, как сборщик за нашей ",[221,588,589],{"href":242},"платформой детекции ботов",[226,591,593],{"id":592},"flutter-для-веба-плюсы-и-минусы","Flutter для веба — плюсы и минусы",[174,595,596],{},"Flutter умеет компилироваться в веб, и клиенты с мобильным приложением на Flutter часто спрашивают, не переиспользовать ли его и для сайта. Честный ответ: иногда — но редко для публичного, контентного веба. Вот в чём компромисс.",[598,599],"features-table",{":heading":600,":rows":601,":top-left-label":602},"[{\"label\": \"Nuxt + SSR\", \"hightlightLabel\": \"Публичный веб\"}, {\"label\": \"Flutter Web\"}, {\"label\": \"Классический SPA\"}]","[{\"label\": \"SEO \u002F индексация\",\"cells\": [{\"text\": \"Отлично (SSR)\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Плохо (canvas)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Слабо (пустая оболочка)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Размер первой загрузки\",\"cells\": [{\"text\": \"Маленький\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Тяжёлый бандл\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Средний\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Общий код с мобильным\",\"cells\": [{\"text\": \"Нет\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Почти 100%\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Частично (React Native)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"UI как в приложении\",\"cells\": [{\"text\": \"Хорошо\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Отлично\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Хорошо\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Контентные \u002F маркетинговые сайты\",\"cells\": [{\"text\": \"Идеально\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Плохо подходит\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Сносно\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Доступность\",\"cells\": [{\"text\": \"Нативный HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Улучшается, ограничена\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Нативный HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Лучше всего для\",\"cells\": [{\"text\": \"Сайты и веб-приложения\", \"color\": \"success\"},{ \"text\": \"Внутренние инструменты в духе приложения\", \"color\": \"warning\"},{ \"text\": \"Дашборды\", \"color\": \"warning\"}]}]","Аспект",[174,604,605,608],{},[192,606,607],{},"Где Flutter web силён:"," продукт, который ведёт себя как приложение, где у вас уже есть мобильная кодовая база на Flutter и вы хотите, чтобы одна команда выпускала продукт на всех платформах — внутренние дашборды, инструменты за логином, сильно интерактивные или canvas-ориентированные интерфейсы за стеной авторизации, где SEO не важно, а пользователи ждут приложение, а не страницу.",[174,610,611,614,615,619],{},[192,612,613],{},"Где он подводит:"," всё, что нужно находить в Google. Flutter web рендерит в canvas, который краулеры читают с трудом, отгружает тяжёлый стартовый бандл и конфликтует с браузером в части доступности и ",[299,616,618],{"slug":617},"deep-linking","диплинков",". Для маркетинговых сайтов, блогов, e-commerce и лендингов это дисквалифицирующий недостаток.",[527,621,622],{},[174,623,624,627,628,631,632,635,636,640,641,645,646,255],{},[192,625,626],{},"Итог:"," используйте ",[192,629,630],{},"Nuxt + SSR"," для всего публичного и SEO-зависимого — маркетинговых сайтов, контента, e-commerce, маркетинговых страниц SaaS. Используйте ",[192,633,634],{},"Flutter web",", когда расширяете мобильное Flutter-приложение в веб-инструмент, который ведёт себя как приложение, а охват через поиск не цель. Мы делаем и то, и другое и честно подскажем, что нужно вашему проекту. Если на повестке и мобильное приложение, посмотрите услугу ",[221,637,639],{"href":638},"\u002Fservices\u002Fflutter-app-development","разработки на Flutter"," и разбор компромиссов в ",[221,642,644],{"href":643},"\u002Fblog\u002Fflutter-vs-react-native-2026","Flutter против React Native в 2026"," и ",[221,647,649],{"href":648},"\u002Fblog\u002Fflutter-vs-native-2026","Flutter против нативной разработки",[226,651,653],{"id":652},"стоимость-веб-разработки","Стоимость веб-разработки",[174,655,656],{},"Прозрачные диапазоны на основе объёма и сложности",[658,659],"pricing-table",{":items":660},"[{\"title\": \"Маркетинговый сайт \u002F лендинг\", \"subtitle\": \"Быстрый, готовый к SEO, контентный\", \"price\": \"web-development\u002Flanding\", \"terms\": \"2-4 недели\", \"lines\": [\"Nuxt + SSR для полной индексации\", \"Адаптивный, mobile-first дизайн\", \"SEO-мета, Open Graph и структурированные данные\", \"Nuxt Content или Markdown-CMS\", \"Формы обратной связи и аналитика\", \"Настройка под Core Web Vitals\", \"Деплой и настройка домена\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}},{\"highlight\": \"Популярно\",\"title\": \"Веб-приложение\", \"subtitle\": \"Интерактивный продукт с авторизацией\", \"price\": \"web-development\u002Fapp\", \"terms\": \"1-3 месяца\", \"lines\": [\"Всё из маркетингового сайта\", \"Аутентификация пользователей (OAuth \u002F JWT)\", \"Безопасные сессии и работа с cookie\", \"Интеграция REST или GraphQL API\", \"Ролевой контроль доступа\", \"Проектирование и интеграция БД\", \"Админ-панель\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}},{\"title\": \"Платформа на headless CMS\", \"subtitle\": \"Контент в руках редакторов, в любом объёме\", \"price\": \"web-development\u002Fheadless-cms\", \"terms\": \"2-4 месяца\", \"lines\": [\"Бэкенд на Strapi или Nuxt Content\", \"Кастомная редакторская админка\", \"Поддержка многоязычного контента\", \"Индексируемые страницы с серверным рендерингом\", \"Управление медиа и ассетами\", \"Процесс превью и публикации\", \"Архитектура API-first\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}},{\"title\": \"SaaS \u002F E-commerce\", \"subtitle\": \"Сложный, масштабируемый веб-продукт\", \"price\": \"web-development\u002Fsaas\", \"terms\": \"4+ месяца\", \"lines\": [\"Все платформы и интеграции\", \"Платежи и подписки\", \"Мультитенантная архитектура\", \"Продвинутая безопасность и комплаенс\", \"Масштабируемая инфраструктура бэкенда\", \"Мониторинг и наблюдаемость\", \"Выделенная поддержка\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Начать\"}}]",[527,662,665],{":leading-icon":663,":title":664},"lucide:dollar-sign","Доступна индивидуальная оценка",[174,666,667],{},"Каждый проект уникален. Эти диапазоны приблизительны и основаны на типовом объёме. Мы подготовим детальную оценку, когда разберёмся в ваших требованиях, интеграциях и сроках. Свяжитесь с нами для бесплатной консультации и точной оценки.",[226,669,353],{"id":352},[174,671,672],{},"Распространённые вопросы о наших услугах веб-разработки",[358,674,676],{":items":675},"[{\"title\":\"Почему вы строите на Nuxt, а не на WordPress или конструкторе сайтов?\",\"text\":\"Nuxt даёт серверный рендеринг — это значит, что поисковики и превью ссылок видят полностью собранный HTML в первом ответе, а не пустую оболочку. Вы получаете скорость и индексируемость статического сайта с мощью настоящего приложения, полный контроль версий над кодом — и никакой раздутости от плагинов и поверхности атаки, свойственных типичной установке WordPress. Для контентных сайтов мы соединяем Nuxt с headless CMS, чтобы у редакторов всё равно была удобная админка.\"},{\"title\":\"Действительно ли серверный рендеринг улучшает SEO?\",\"text\":\"Да, существенно. При SSR контент страницы, мета-теги, данные Open Graph и структурированные данные присутствуют в HTML, который отдаёт сервер, поэтому краулеры читают их без выполнения JavaScript. Single-page приложения, которые рендерятся целиком в браузере, индексируются медленнее, а некоторые краулеры и превью ссылок в соцсетях могут вовсе их пропустить. SSR — самое значимое решение на уровне фреймворка, которое можно принять ради органического поиска.\"},{\"title\":\"Можете ли вы сделать моё веб-приложение на Flutter для веба?\",\"text\":\"Можем, и для подходящего проекта это отличный вариант. Flutter web хорош для продуктов, которые ведут себя как приложение, и внутренних инструментов за логином, особенно когда у вас уже есть мобильное приложение на Flutter и вы хотите общую кодовую базу. Он плохо подходит для всего, что должно ранжироваться в Google, потому что рендерит в canvas, который краулеры читают с трудом, и отгружает тяжёлый стартовый бандл. Для публичных, контентных или e-commerce сайтов мы рекомендуем Nuxt с серверным рендерингом.\"},{\"title\":\"Как вы обеспечиваете безопасность аутентификации и данных?\",\"text\":\"Мы реализуем реальную серверную авторизацию, а не просто экран логина. Сессии используют httpOnly, secure, SameSite cookie, чтобы токены нельзя было украсть клиентскими скриптами, и мы поддерживаем потоки OAuth и JWT с ролевым контролем доступа. Согласие на cookie обрабатывается по GDPR. Если у вас есть готовое приложение, наш аудит AI-кода отдельно проверяет аутентификацию, работу с сессиями и утечки данных.\"},{\"title\":\"Что выбрать — Nuxt Content или Strapi?\",\"text\":\"Зависит от того, кто редактирует контент. Nuxt Content идеален, когда контентом управляют разработчики или технические авторы в Markdown под контролем версий, например блог или документация, без базы данных. Strapi — правильный выбор, когда нетехническим редакторам нужна удобная админка для управления товарами, объявлениями или кампаниями. Оба рендерятся на сервере через фронтенд на Nuxt, так что в любом случае сайт остаётся быстрым и индексируемым. Мы поможем выбрать под вашу команду.\"},{\"title\":\"Сколько стоит проект веб-разработки?\",\"slot\":\"cost\",\"text\":\"Быстрый маркетинговый или контентный сайт обычно стоит от 400 000 до 960 000 рублей, веб-приложение с авторизацией от 1 200 000 до 3 200 000, платформа на headless CMS от 1 600 000 до 4 000 000, а сложный SaaS или e-commerce продукт свыше 4 000 000. Итоговая сумма зависит от числа функций, интеграций и объёма дизайна. Мы даём фиксированную оценку после бесплатной консультации.\"}]",[677,678,679],"template",{"v-slot:cost_body":376},[174,680,681,682,685,686,688,689,692,693,695],{},"Быстрый маркетинговый или контентный сайт обычно стоит ",[339,683],{"format":341,"service":684},"web-development\u002Flanding",", веб-приложение с авторизацией ",[339,687],{"format":341,"service":342},", платформа на headless CMS ",[339,690],{"format":341,"service":691},"web-development\u002Fheadless-cms",", а сложный SaaS или e-commerce продукт — ",[339,694],{"format":341,"service":346},". Итоговая сумма зависит от числа функций, интеграций и объёма дизайна. Мы даём фиксированную оценку после бесплатной консультации.",[174,697,698],{},"::",{"title":376,"searchDepth":377,"depth":377,"links":700},[701,702,708,709,710,711],{"id":438,"depth":377,"text":439},{"id":471,"depth":377,"text":472,"children":703},[704,705,706,707],{"id":478,"depth":380,"text":479},{"id":485,"depth":380,"text":486},{"id":492,"depth":380,"text":493},{"id":506,"depth":380,"text":507},{"id":541,"depth":377,"text":542},{"id":592,"depth":377,"text":593},{"id":652,"depth":377,"text":653},{"id":352,"depth":377,"text":353},"Быстрые, готовые к SEO веб-приложения на Nuxt, SSR и Tailwind",{"heading":714,"text":715,"buttons":716},"Готовы сделать веб-приложение, которое ранжируется и быстро работает?","Расскажите о задаче — соберём быстрое веб-приложение, удобное пользователям и понятное поисковикам.",[717,720],{"to":718,"label":719,"leadingIcon":404,"color":405,"variant":406},"\u002Fcontact","Начать проект",{"to":721,"label":722,"color":409,"variant":410},"\u002Fportfolio","Наши работы",[724,726],{"to":718,"label":725,"leadingIcon":404,"color":409,"variant":410},"Бесплатная консультация",{"to":727,"label":728,"color":405,"variant":406},"#стоимость-веб-разработки","Посмотреть цены",{"url":730,"alt":433,"text":731},"\u002Fservices\u002Fweb-development.webp","Собрано на том же стеке, что и этот сайт",{},"Веб-разработка на Nuxt, SSR и Tailwind: быстрые, готовые к SEO, мобильные веб-приложения с аутентификацией, headless CMS и Strapi. Бесплатная консультация.","Веб-разработка — Nuxt, SSR и SEO","Веб-приложения на Nuxt и SSR, которые быстро грузятся и хорошо индексируются: авторизация, headless CMS и mobile-first вёрстка, не воюющая с браузером.",null,{"title":433,"description":712},"services\u002Fweb-development","sc_PnwHiO-YqVwRhGTp1eA5fuAk0LTgq1mdlIiW3J8A",[],[742,757,769,784,798,813,829,842,855,871,884,895,905,916,928,939,948,962,975,982,996,1011,1024,1037,1050,1061,1072,1083,1096,1106,1119,1130,1144,1155,1169,1178,1189,1202,1215,1228,1241,1253,1265,1277,1289,1301,1312,1326,1337,1349,1360,1373,1385],{"slug":743,"term":744,"definition":745,"category":746,"aliases":747,"links":749,"related":753,"readMore":-1,"target":755,"hasArticle":756},"aosp","AOSP","Android Open Source Project — Android без надстройки Google, который может форкнуть кто угодно. На его форках работают кассовые терминалы, киоски и автомобильные системы, а работа на этом уровне открывает части ОС, которых прикладной разработчик не видит.","platform",[748],"Android Open Source Project",[750],{"kind":751,"url":752},"website","https:\u002F\u002Fsource.android.com\u002F",[754],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":758,"term":759,"definition":760,"category":746,"aliases":761,"links":762,"related":766,"readMore":-1,"target":768,"hasArticle":756},"app-clips","App Clips","Функция Apple, позволяющая запустить небольшую часть iOS-приложения — до 15 МБ — не устанавливая его целиком. Вызывается по QR-коду, NFC-метке или ссылке: для случаев, когда первое действие пользователя не должно требовать похода в App Store.",[],[763],{"kind":764,"url":765},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[617,767],"install-referrer","\u002Fglossary#app-clips",{"slug":770,"term":771,"definition":772,"category":746,"aliases":773,"links":774,"related":780,"readMore":-1,"target":783,"hasArticle":756},"bigquery","BigQuery","Аналитическое хранилище Google Cloud. Вы запускаете SQL по миллиардам строк, и они сканируются за секунды, а данные при этом лежат отдельно от машин, выполняющих запросы. Именно это снимает отчётность и исследование данных с базы, обслуживающей живой трафик.",[],[775,777],{"kind":751,"url":776},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":778,"url":779},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[781,782],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":785,"term":786,"definition":787,"category":788,"aliases":789,"links":793,"related":796,"readMore":-1,"target":797,"hasArticle":756},"ci-cd","CI\u002FCD","Автоматизация, которая собирает, тестирует и выкладывает каждое изменение без ручного запуска команд. В мобильной разработке это то, что превращает релиз в нажатие кнопки вместо полудня ожидания, пока освободится нужный человек.","practice",[790,791,792],"CI","непрерывная интеграция","непрерывная поставка",[794],{"kind":778,"url":795},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":799,"term":800,"definition":801,"category":802,"aliases":803,"links":806,"related":809,"readMore":-1,"target":812,"hasArticle":756},"crud","CRUD","Create, read, update, delete — четыре операции, стоящие почти за каждой формой и админкой. Собирательное название для рутинной половины приложения, которая управляет данными, в отличие от частей с реальной предметной логикой.","architecture",[804,805],"Create, Read, Update, Delete","создание, чтение, обновление, удаление",[807],{"kind":778,"url":808},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[810,811],"rest","graphql","\u002Fglossary#crud",{"slug":814,"term":815,"definition":816,"category":788,"aliases":817,"links":821,"related":826,"readMore":-1,"target":828,"hasArticle":756},"dev-container","Dev Container","Среда разработки, описанная один раз в devcontainer.json — ОС, инструменты и версии рантаймов, которые нужны проекту, — и открываемая одинаково внутри контейнера в редакторе любого участника, вместо инструкции по установке, которую каждый понимает по-своему.",[818,819,820],"devcontainer.json","Dev Containers","VS Code Dev Containers",[822,824],{"kind":751,"url":823},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":764,"url":825},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[827],"container-registry","\u002Fglossary#dev-container",{"slug":782,"term":830,"definition":831,"category":746,"aliases":832,"links":835,"related":840,"readMore":-1,"target":841,"hasArticle":756},"Elasticsearch","Поисковый и аналитический движок, который индексирует записи, чтобы их можно было интерактивно фильтровать и искать, а не сканировать. К нему обращаются, когда вопрос звучит как «покажи вот эти сессии с шестью фильтрами», а не «просуммируй колонку».",[833,834],"Elastic","ELK",[836,838],{"kind":751,"url":837},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":778,"url":839},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[770],"\u002Fglossary#elasticsearch",{"slug":843,"term":844,"definition":845,"category":802,"aliases":846,"links":849,"related":850,"readMore":-1,"target":854,"hasArticle":756},"fan-out","Fan-out","Чтение источника один раз и доставка каждого обновления всем подписанным на него клиентам. Наивная версия пишет подписчикам в цикле и встаёт, как только один из сокетов начинает тормозить; рабочая — держит отдельный буфер на каждого клиента и отключает тех, кто не успевает.",[847,848],"веерная рассылка","фан-аут",[],[851,852,853],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":301,"term":856,"definition":857,"category":788,"aliases":858,"links":861,"related":866,"readMore":-1,"target":870,"hasArticle":756},"GDPR","Регламент ЕС о персональных данных людей в ЕС: законное основание для сбора, настоящее согласие на трекинг, право увидеть и удалить свои данные. Он следует за вашими пользователями, а не за вашими серверами: где зарегистрирована компания, значения не имеет.",[859,860],"Общий регламент по защите данных","General Data Protection Regulation",[862,864],{"kind":751,"url":863},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":778,"url":865},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[867,868,869],"pci-dss","soc-2","hipaa","\u002Fglossary#gdpr",{"slug":872,"term":873,"definition":874,"category":788,"aliases":875,"links":879,"related":882,"readMore":-1,"target":883,"hasArticle":756},"golden-test","Golden-тест","Тест, который отрисовывает виджет и сравнивает результат попиксельно с эталонным изображением. Во Flutter это самый дешёвый способ узнать, не сломал ли редизайн пустое состояние на 320pt, в тёмной теме, при 200% масштабе текста.",[876,877,878],"golden test","золотой тест","скриншотный тест",[880],{"kind":764,"url":881},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[785],"\u002Fglossary#golden-test",{"slug":811,"term":885,"definition":886,"category":802,"aliases":887,"links":888,"related":893,"readMore":-1,"target":894,"hasArticle":756},"GraphQL","Язык запросов к API, где клиент сам перечисляет нужные поля и получает один ответ ровно такой формы. Он снимает избыточную выдачу, к которой дрейфуют REST-эндпоинты, и добавляет собственный режим отказа: неограниченный запрос, обходящий всю модель данных.",[],[889,891],{"kind":751,"url":890},"https:\u002F\u002Fgraphql.org\u002F",{"kind":778,"url":892},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[810],"\u002Fglossary#graphql",{"slug":869,"term":896,"definition":897,"category":788,"aliases":898,"links":900,"related":903,"readMore":-1,"target":904,"hasArticle":756},"HIPAA","Закон США о защищённой медицинской информации: как её можно хранить, передавать, логировать и раскрывать. Как и PCI-DSS, это архитектурное ограничение, которое выбирают в начале, а не документ, который дописывают перед запуском.",[899],"Health Insurance Portability and Accountability Act",[901],{"kind":778,"url":902},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[867,301,868],"\u002Fglossary#hipaa",{"slug":518,"term":906,"definition":907,"category":802,"aliases":908,"links":911,"related":914,"readMore":-1,"target":915,"hasArticle":756},"Headless CMS","Система управления контентом с админкой и API, но без собственного фронтенда. Редакторы публикуют в одном месте, а сайт или приложение отрисовывает контент само — слой представления принадлежит вам, а не вендору CMS.",[909,910],"безголовая CMS","контентное API",[912],{"kind":778,"url":913},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[452,810],"\u002Fglossary#headless-cms",{"slug":754,"term":917,"definition":918,"category":746,"aliases":919,"links":923,"related":926,"readMore":-1,"target":927,"hasArticle":756},"Host Card Emulation","Режим, в котором Android-телефон программно эмулирует бесконтактную карту по NFC, без аппаратного защищённого элемента. Так платит приложение-кошелёк на терминале: телефон говорит с ним по тому же протоколу EMV Contactless, что и пластиковая карта.",[920,921,922],"HCE","EMV Contactless","бесконтактные платежи",[924],{"kind":764,"url":925},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[867,743],"\u002Fglossary#host-card-emulation",{"slug":929,"term":930,"definition":931,"category":746,"aliases":932,"links":933,"related":936,"readMore":-1,"target":938,"hasArticle":756},"impeller","Impeller","Движок рендеринга, на котором Flutter работает сегодня: по умолчанию на iOS с 2023 года и на Android с 2024-го. Он компилирует шейдеры заранее, а не во время первой анимации, что убрало главную видимую проблему Flutter в проде — джанк на компиляции шейдеров.",[],[934],{"kind":764,"url":935},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[937],"skia","\u002Fglossary#impeller",{"slug":767,"term":940,"definition":941,"category":746,"aliases":942,"links":943,"related":946,"readMore":-1,"target":947,"hasArticle":756},"Install Referrer","API Google Play, который передаёт только что установленному Android-приложению параметры кампании из ссылки, приведшей к установке. Android-половина отложенного диплинкинга и надёжный способ понять, откуда пришёл пользователь.",[],[944],{"kind":764,"url":945},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[617,758],"\u002Fglossary#install-referrer",{"slug":949,"term":950,"definition":951,"category":952,"aliases":953,"links":955,"related":960,"readMore":-1,"target":961,"hasArticle":756},"jwt","JWT","Подписанный токен, несущий свои данные внутри: сервер понимает, кому принадлежит запрос, не обращаясь к хранилищу сессий. Стандарт мобильной аутентификации. Подпись доказывает, что токен не меняли, но не скрывает его содержимое.","protocol",[954],"JSON Web Token",[956,958],{"kind":751,"url":957},"https:\u002F\u002Fjwt.io\u002F",{"kind":778,"url":959},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[867],"\u002Fglossary#jwt",{"slug":963,"term":964,"definition":965,"category":788,"aliases":966,"links":970,"related":973,"readMore":-1,"target":974,"hasArticle":756},"kyc","KYC","Know Your Customer — проверки личности, которые регулируемый финансовый продукт проводит, прежде чем разрешить переводить деньги: съёмка документов, liveness, санкционный и антиотмывочный скрининг. На онбординг это влияет сильнее любого дизайн-решения.",[967,968,969],"Know Your Customer","AML","KYC\u002FAML",[971],{"kind":778,"url":972},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[867,301],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":976,"category":746,"aliases":977,"links":979,"related":980,"readMore":981,"target":981,"hasArticle":756},"Переиспользование бизнес-логики на Kotlin между Android, iOS и сервером, при этом интерфейс на каждой платформе остаётся нативным. Альтернатива Flutter, когда UI обязан быть нативным, а правила за ним — нет.",[978],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":983,"term":984,"definition":985,"category":986,"aliases":987,"links":990,"related":993,"readMore":-1,"target":995,"hasArticle":756},"mvp","MVP","Минимальная версия продукта, которую можно показать реальным пользователям и которая при этом отвечает на вопрос, ради которого его делали. Решение об объёме, а не о качестве: MVP всё равно обязан работать.","business",[988,989],"минимально жизнеспособный продукт","minimum viable product",[991],{"kind":778,"url":992},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[994],"white-label","\u002Fglossary#mvp",{"slug":997,"term":998,"definition":999,"category":952,"aliases":1000,"links":1004,"related":1009,"readMore":-1,"target":1010,"hasArticle":756},"oauth","OAuth","Стандарт, на котором держатся «Вход через Apple», Google и остальные: пользователь авторизует ваше приложение у провайдера, которому уже доверяет, а приложение получает токен вместо пароля. Никто не заводит новый пароль, и вы его не храните.",[1001,1002,1003],"OAuth 2.0","вход через соцсети","Sign in with Apple",[1005,1007],{"kind":751,"url":1006},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":778,"url":1008},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[949],"\u002Fglossary#oauth",{"slug":867,"term":1012,"definition":1013,"category":788,"aliases":1014,"links":1017,"related":1022,"readMore":-1,"target":1023,"hasArticle":756},"PCI-DSS","Стандарт безопасности карточной индустрии, обязательный для всех, кто хранит, обрабатывает или передаёт данные карт. Большинство приложений намеренно остаются вне зоны его действия, отдавая ввод карты сертифицированному платёжному провайдеру.",[1015,1016],"PCI DSS","Payment Card Industry Data Security Standard",[1018,1020],{"kind":751,"url":1019},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":778,"url":1021},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[949],"\u002Fglossary#pci-dss",{"slug":1025,"term":1026,"definition":1027,"category":986,"aliases":1028,"links":1031,"related":1034,"readMore":-1,"target":1036,"hasArticle":756},"product-market-fit","Product-market fit","Момент, когда продукт доказуемо нашёл своих людей: они им пользуются, возвращаются и платят. До него разработка отвечает на вопрос, после — на спрос.",[1029,1030],"PMF","соответствие продукта рынку",[1032],{"kind":778,"url":1033},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[983,1035],"time-to-market","\u002Fglossary#product-market-fit",{"slug":1038,"term":1039,"definition":1040,"category":788,"aliases":1041,"links":1044,"related":1047,"readMore":-1,"target":1049,"hasArticle":756},"prompt-injection","Prompt injection","Атака, при которой текст от пользователя языковая модель читает как инструкции, а не как данные, и уходит в обход собственных правил. Родственник SQL-инъекции в эпоху LLM: возникает везде, где пользовательский ввод склеивается в промпт.",[1042,1043],"инъекция промпта","инъекция в промпт",[1045],{"kind":778,"url":1046},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[1048],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":852,"term":1051,"definition":1052,"category":802,"aliases":1053,"links":1056,"related":1059,"readMore":-1,"target":1060,"hasArticle":756},"Pub\u002FSub","Шаблон обмена сообщениями: производитель публикует событие, а любое число потребителей независимо читает его через стоящий между ними брокер. Производитель никогда их не ждёт — так путь запроса остаётся быстрым, а более медленная работа выполняется в фоне.",[1054,1055],"публикация\u002Fподписка","Google Cloud Pub\u002FSub",[1057],{"kind":778,"url":1058},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":810,"term":1062,"definition":1063,"category":802,"aliases":1064,"links":1067,"related":1070,"readMore":-1,"target":1071,"hasArticle":756},"REST","Общепринятый стиль HTTP-API: URL называет ресурс, а HTTP-метод говорит, что с ним сделать. Способ по умолчанию, которым приложение общается с бэкендом, и то, что ожидает найти большинство сторонних интеграций.",[1065,1066],"REST API","Representational State Transfer",[1068],{"kind":778,"url":1069},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[851,853],"\u002Fglossary#rest",{"slug":868,"term":1073,"definition":1074,"category":788,"aliases":1075,"links":1078,"related":1081,"readMore":-1,"target":1082,"hasArticle":756},"SOC 2","Отчёт внешнего аудитора о том, как компания обращается с данными клиентов — безопасность, доступность, конфиденциальность, — а не сертификат, который можно купить. Корпоративные заказчики его требуют, а архитектуру он ограничивает задолго до самого аудита.",[1076,1077],"SOC2","System and Organization Controls",[1079],{"kind":778,"url":1080},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[867,301,869],"\u002Fglossary#soc-2",{"slug":1084,"term":1085,"definition":1086,"category":986,"aliases":1087,"links":1090,"related":1093,"readMore":-1,"target":1095,"hasArticle":756},"saas","SaaS","Софт, который продают как постоянную подписку на размещённый у поставщика продукт, а не как разовую лицензию для установки у себя. Поставщик держит серверы, непрерывно выкатывает обновления и берёт плату за пользователя или за объём.",[1088,1089],"Software as a Service","ПО как услуга",[1091],{"kind":778,"url":1092},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[1094,994],"multi-tenancy","\u002Fglossary#saas",{"slug":853,"term":1097,"definition":1098,"category":952,"aliases":1099,"links":1101,"related":1104,"readMore":-1,"target":1105,"hasArticle":756},"Server-Sent Events","Односторонний поток от сервера к клиенту поверх обычного HTTP-соединения. Проще, чем WebSocket, и достаточен там, где только серверу есть что сказать: прогресс операции, ответ AI, приходящий токен за токеном.",[1100],"SSE",[1102],{"kind":778,"url":1103},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[851,810],"\u002Fglossary#server-sent-events",{"slug":937,"term":1107,"definition":1108,"category":746,"aliases":1109,"links":1112,"related":1117,"readMore":-1,"target":1118,"hasArticle":756},"Skia","Открытая 2D-графическая библиотека Google, которая рисует Chrome, Android и — до появления Impeller — каждый кадр Flutter. Она умеет выводить не только на экран, но и в PDF: именно это делает «печать в PDF» в Chrome.",[1110,1111],"Skia Graphics Engine","skia-safe",[1113,1115],{"kind":751,"url":1114},"https:\u002F\u002Fskia.org\u002F",{"kind":778,"url":1116},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[929],"\u002Fglossary#skia",{"slug":1120,"term":1121,"definition":1122,"category":986,"aliases":1123,"links":1126,"related":1127,"readMore":-1,"target":1129,"hasArticle":756},"staff-augmentation","Staff augmentation","Модель найма, при которой инженеры внешнего партнёра входят в вашу команду и работают под вашим управлением — в вашем репозитории, ваших спринтах, вашем процессе, — а не сдают отдельный проект. Вы покупаете ресурс; код и контекст остаются у вас.",[1124,322,1125],"аутстаффинг","выделенные разработчики",[],[1128,1035],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":1131,"term":1132,"definition":1133,"category":952,"aliases":1134,"links":1138,"related":1141,"readMore":-1,"target":1143,"hasArticle":756},"tls","TLS","Слой шифрования под HTTPS. Он подтверждает, что сервер именно тот, о ком говорит его сертификат, согласует свежий ключ на сессию и шифрует всё дальнейшее — сеть между вами видит шифртекст и не может незаметно его изменить.",[1135,1136,1137],"SSL","HTTPS","Transport Layer Security",[1139],{"kind":778,"url":1140},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[1142,949],"end-to-end-encryption","\u002Fglossary#tls",{"slug":1035,"term":1145,"definition":1146,"category":986,"aliases":1147,"links":1150,"related":1153,"readMore":-1,"target":1154,"hasArticle":756},"Time to market","Время от решения строить продукт до момента, когда им пользуются настоящие люди. Большинство споров о стеке и объёме работ — на самом деле споры об этом числе: каждая сэкономленная неделя — это неделя выручки, обратной связи и позиции на рынке.",[1148,1149],"TTM","время выхода на рынок",[1151],{"kind":778,"url":1152},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[983,1128],"\u002Fglossary#time-to-market",{"slug":1156,"term":1157,"definition":1158,"category":952,"aliases":1159,"links":1161,"related":1166,"readMore":-1,"target":1168,"hasArticle":756},"webrtc","WebRTC","Браузерный и мобильный стандарт для передачи аудио, видео и данных напрямую между двумя устройствами; серверы участвуют только в том, чтобы их познакомить. На нём строят видеозвонок внутри приложения, когда не берут готовый SDK.",[1160],"Web Real-Time Communication",[1162,1164],{"kind":751,"url":1163},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":778,"url":1165},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[1167,851],"xmpp","\u002Fglossary#webrtc",{"slug":851,"term":1170,"definition":1171,"category":952,"aliases":1172,"links":1173,"related":1176,"readMore":-1,"target":1177,"hasArticle":756},"WebSocket","Протокол, который держит одно соединение между клиентом и сервером открытым, чтобы любая сторона могла отправить данные в любой момент, а не клиент спрашивал снова и снова. На нём работают живые котировки, чаты и статусы присутствия.",[],[1174],{"kind":778,"url":1175},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[853,810],"\u002Fglossary#websocket",{"slug":994,"term":1179,"definition":1180,"category":986,"aliases":1181,"links":1184,"related":1187,"readMore":1188,"target":1188,"hasArticle":422},"White-label","Один продукт, выпускаемый под многими брендами. White-label платформа собирает каждому клиенту готовое к публикации приложение со своим названием, оформлением и контентом из общей кодовой базы, а не форкает проект под заказчика.",[1182,1183],"белый лейбл","мультитенантное приложение",[1185],{"kind":778,"url":1186},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[983],"\u002Fglossary\u002Fwhite-label",{"slug":1167,"term":1190,"definition":1191,"category":952,"aliases":1192,"links":1195,"related":1200,"readMore":-1,"target":1201,"hasArticle":756},"XMPP","Открытый федеративный протокол обмена сообщениями и давняя альтернатива тому, чтобы писать чат-бэкенд самому или арендовать чужой. Он покрывает статусы присутствия, индикаторы набора и передачу файлов, а зрелые клиентские библиотеки есть под любую платформу.",[1193,1194],"Jabber","Extensible Messaging and Presence Protocol",[1196,1198],{"kind":751,"url":1197},"https:\u002F\u002Fxmpp.org\u002F",{"kind":778,"url":1199},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[1156,851],"\u002Fglossary#xmpp",{"slug":1203,"term":1204,"definition":1205,"category":986,"aliases":1206,"links":1210,"related":1213,"readMore":-1,"target":1214,"hasArticle":756},"in-app-purchase","Встроенные покупки","Продажа цифровых товаров и подписок через биллинг Apple и Google, который оба стора требуют для цифрового контента и с которого берут комиссию. Сложность никогда не в самой покупке, а в её восстановлении на новом устройстве и в честном учёте прав доступа.",[1207,1208,1209],"in-app purchase","IAP","внутренние покупки",[1211],{"kind":764,"url":1212},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[1025],"\u002Fglossary#in-app-purchase",{"slug":617,"term":1216,"definition":1217,"category":746,"aliases":1218,"links":1223,"related":1226,"readMore":1227,"target":1227,"hasArticle":422},"Диплинкинг","Ссылка, которая открывает конкретный экран внутри установленного приложения, а не его главную или веб-страницу. Отложенный диплинкинг переживает установку: нажатие, прошедшее через магазин приложений, всё равно приводит на нужный экран.",[1219,1220,1221,1222],"deep linking","отложенный диплинкинг","Universal Links","Android App Links",[1224],{"kind":778,"url":1225},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[758,767],"\u002Fglossary\u002Fdeep-linking",{"slug":1229,"term":1230,"definition":1231,"category":802,"aliases":1232,"links":1236,"related":1239,"readMore":-1,"target":1240,"hasArticle":756},"multi-arch-image","Мультиархитектурный образ","Один тег образа, который разрешается в разные бинарники для каждой архитектуры процессора — обычно это пара linux\u002Famd64 и linux\u002Farm64, — так что один и тот же docker pull работает без изменений и на серверах Intel\u002FAMD, и на ноутбуках с Apple Silicon.",[1233,1234,1235],"мультиарх-сборка","multi-arch build","linux\u002Famd64 + linux\u002Farm64",[1237],{"kind":764,"url":1238},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[827],"\u002Fglossary#multi-arch-image",{"slug":1094,"term":1242,"definition":1243,"category":802,"aliases":1244,"links":1247,"related":1250,"readMore":-1,"target":1252,"hasArticle":756},"Мультитенантность","Один развёрнутый бэкенд обслуживает много клиентов, и каждый видит только свои данные, конфигурацию и включённые функции, потому что контекст тенанта определяется для каждого запроса. Именно это делает линейку брендированных приложений одним продуктом, а не набором форков.",[1094,1245,1246],"мультиарендность","тенант",[1248],{"kind":778,"url":1249},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[994,1251],"feature-flags","\u002Fglossary#multi-tenancy",{"slug":781,"term":1254,"definition":1255,"category":802,"aliases":1256,"links":1260,"related":1263,"readMore":-1,"target":1264,"hasArticle":756},"Объектное хранилище","Хранилище, которое держит файл целиком под ключом, а не в дереве файловой системы, — Amazon S3 и множество сервисов, совместимых с его API. Дешёвое, практически безграничное, привычное место для сырых событий, бэкапов и медиа: пишется один раз, читается редко, хранится вечно.",[1257,1258,1259],"S3","S3-совместимое хранилище","блоб-хранилище",[1261],{"kind":778,"url":1262},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[770],"\u002Fglossary#object-storage",{"slug":1048,"term":1266,"definition":1267,"category":788,"aliases":1268,"links":1272,"related":1275,"readMore":-1,"target":1276,"hasArticle":756},"Ограничение частоты запросов","Предел на число запросов от одного клиента за заданный интервал. Именно он не даёт одному увлечённому пользователю, скраперу или боту потратить месячный бюджет платного API за вечер, и стоять он должен на вашей стороне интеграции.",[1269,1270,1271],"rate limiting","рейт-лимит","троттлинг",[1273],{"kind":778,"url":1274},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[1038],"\u002Fglossary#rate-limiting",{"slug":1278,"term":1279,"definition":1280,"category":746,"aliases":1281,"links":1284,"related":1287,"readMore":-1,"target":1288,"hasArticle":756},"platform-channels","Платформенные каналы","Мост, через который Flutter-приложение вызывает нативный код iOS и Android — Keychain и Keystore, биометрию, платёжные шторки, любой SDK без Dart-пакета. Работа рутинная, но настоящая, и первое место, где споткнётся инженер, не выходивший за пределы Dart.",[1282,1283],"platform channels","method channel",[1285],{"kind":764,"url":1286},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":1290,"term":1291,"definition":1292,"category":952,"aliases":1293,"links":1296,"related":1299,"readMore":-1,"target":1300,"hasArticle":756},"post-quantum-cryptography","Постквантовая криптография","Алгоритмы шифрования, рассчитанные на устойчивость к будущему квантовому компьютеру; стандарты уже финализированы NIST. Мигрировать нужно до появления железа: трафик, записанный сегодня, расшифруют, когда такая машина появится.",[1294,1295],"PQC","постквантовое шифрование",[1297],{"kind":778,"url":1298},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[1131,1142],"\u002Fglossary#post-quantum-cryptography",{"slug":1302,"term":1303,"definition":1304,"category":788,"aliases":1305,"links":1309,"related":1310,"readMore":-1,"target":1311,"hasArticle":756},"staged-rollout","Поэтапная раскатка","Релиз сначала на небольшой процент пользователей и расширение только тогда, когда доля сессий без падений держится. Плохая сборка, пойманная на десяти процентах, — испорченный вечер; она же на ста процентах — испорченная неделя.",[1306,1307,1308],"staged rollout","phased release","канареечный релиз",[],[1251,785],"\u002Fglossary#staged-rollout",{"slug":827,"term":1313,"definition":1314,"category":802,"aliases":1315,"links":1321,"related":1324,"readMore":-1,"target":1325,"hasArticle":756},"Реестр контейнеров","Хранилище образов контейнеров, адресуемых по имени и тегу, — Docker Hub, GitHub Container Registry или собственный реестр облачного провайдера. Публикация сборки в реестр превращает «у меня работает» в образ, который любой может скачать и запустить без изменений.",[1316,1317,1318,1319,1320],"реестр образов","Docker registry","GHCR","ghcr.io","container registry",[1322],{"kind":764,"url":1323},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[814,1229],"\u002Fglossary#container-registry",{"slug":452,"term":1327,"definition":1328,"category":802,"aliases":1329,"links":1332,"related":1335,"readMore":-1,"target":1336,"hasArticle":756},"Серверный рендеринг","Сборка страницы в готовый HTML на сервере, чтобы первый же ответ содержал контент, заголовки, метатеги и структурированные данные. Краулеры, превью ссылок и медленные устройства читают это, не выполняя JavaScript.",[1330,1331],"SSR","server-side rendering",[1333],{"kind":778,"url":1334},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[518],"\u002Fglossary#server-side-rendering",{"slug":1142,"term":1338,"definition":1339,"category":802,"aliases":1340,"links":1344,"related":1347,"readMore":-1,"target":1348,"hasArticle":756},"Сквозное шифрование","Шифрование, которое накладывается на устройстве отправителя и снимается только на устройстве получателя, так что сервис, передающий сообщение, не может его прочитать — ни по решению суда, ни после взлома. Оно защищает содержимое, но никогда — метаданные.",[1341,1342,1343],"E2EE","end-to-end encryption","оконечное шифрование",[1345],{"kind":778,"url":1346},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[1131,949],"\u002Fglossary#end-to-end-encryption",{"slug":1128,"term":1350,"definition":1351,"category":986,"aliases":1352,"links":1355,"related":1358,"readMore":-1,"target":1359,"hasArticle":756},"Совокупная стоимость владения","Во что продукт обходится за всю жизнь, а не только на этапе разработки: поддержка, обновления, ежегодные миграции на новые ОС и правила сторов, вторая команда, чтобы две кодовые базы не расходились. Обычно больше сметы на разработку и почти никогда в неё не входит.",[1353,1354],"TCO","total cost of ownership",[1356],{"kind":778,"url":1357},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[1035],"\u002Fglossary#total-cost-of-ownership",{"slug":1361,"term":1362,"definition":1363,"category":802,"aliases":1364,"links":1368,"related":1371,"readMore":-1,"target":1372,"hasArticle":756},"state-management","Управление состоянием","То, как приложение решает, где живёт значение, кому позволено его менять и какие части экрана перерисовываются, когда оно меняется. Во Flutter выбор между Riverpod, BLoC и Provider — одно из первых архитектурных решений и одно из самых трудных для пересмотра.",[1365,1366,1367],"state management","BLoC","Riverpod",[1369],{"kind":764,"url":1370},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[872],"\u002Fglossary#state-management",{"slug":1251,"term":1374,"definition":1375,"category":788,"aliases":1376,"links":1380,"related":1383,"readMore":-1,"target":1384,"hasArticle":756},"Фиче-флаги","Переключатели, которые включают и выключают функциональность из конфигурации, а не из релиза. Один бинарник ведёт себя по-разному для разных брендов, рынков и пользователей, а рискованную фичу можно погасить, не отправляя новую сборку на ревью.",[1377,1378,1379],"feature flags","фиче-флаги","feature toggle",[1381],{"kind":778,"url":1382},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[1302,994,1094],"\u002Fglossary#feature-flags",{"slug":1386,"term":1387,"definition":1388,"category":802,"aliases":1389,"links":1393,"related":1396,"readMore":-1,"target":1397,"hasArticle":756},"floating-point","Числа с плавающей точкой","Двоичный формат IEEE 754, стоящий за double и float. Он не хранит 0.1 точно, поэтому 0.1 + 0.2 даёт 0.30000000000000004 — незаметно в графике и фатально в деньгах, которым место в целых минорных единицах или в decimal-типе.",[1390,1391,1392],"IEEE 754","double","плавающая запятая",[1394],{"kind":778,"url":1395},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point"]