Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 661новая вакансия за сутки·92 296вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 192
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 143
  • Облачные технологии14 064
  • QA вакансии3 446
  • Backend вакансии2 095
  • Инженер данных1 792
  • Продакт-менеджер1 233

Разработка

  • Android1 857
  • iOS1 697
  • Fullstack вакансии981
  • AI вакансии949
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 689
  • Java6 529
  • Node.js2 023
  • .NET1 723
  • Kotlin1 596
  • Rust1 462
  • C#710
  • PHP683
  • C++574

DevOps и инфраструктура

  • Kubernetes7 762
  • DevOps вакансии6 052
  • Linux-инфраструктура5 491
  • Terraform / IaC4 268
  • CI/CD3 244
  • Мониторинг и Observability1 789
  • SRE567
  • Кибербезопасность455

Аналитика и данные

  • Data Scientist1 124
  • Бизнес-аналитик917
  • Аналитик данных839
  • Системный аналитик151

Другие направления

  • Проджект-менеджер606
  • UI/UX дизайн142
  • Ручное тестирование14

По регионам

  • Вакансии в США43 473
  • Вакансии в Европе23 552
  • Вакансии в Канаде4 444
  • Работа в России3 901

По формату

  • Удалённые вакансии73 579
  • Релокация в США43 516
  • Гибридная работа12 395
  • Офисная работа7 085

По уровню

  • Senior вакансии42 222
  • Middle вакансии20 589
  • Junior вакансии6 639

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме tRPCВсе вопросы
tRPCMiddleТеория

Что такое links в tRPC? Объясните httpBatchLink, splitLink и loggerLink.

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Links — это middleware-цепочка транспортного слоя tRPC. httpBatchLink группирует запросы в один HTTP-вызов, splitLink направляет запросы по условию на разные ссылки, loggerLink логирует все запросы и ответы для отладки.

httpBatchLink — батчинг запросов

Группирует несколько параллельных tRPC-запросов в один HTTP POST-запрос. Это критически важно для производительности: если компонент дерева вызывает 5 разных процедур одновременно, они отправятся как один запрос вместо пяти.

import { httpBatchLink } from '@trpc/client';

const client = trpc.createClient({
  links: [
    httpBatchLink({
      url: '/api/trpc',
      // Максимальный размер батча (по умолчанию без ограничений)
      maxURLLength: 2083,
      // Добавление заголовков ко всем запросам
      headers() {
        return {
          Authorization: `Bearer ${getToken()}`,
        };
      },
    }),
  ],
});

Батчинг работает с задержкой в одну микрозадачу — все запросы из одного рендер-цикла собираются вместе. Для отключения батчинга используйте httpLink вместо httpBatchLink.

Что такое links в tRPC

Links — это middleware-цепочка, которая обрабатывает каждый запрос клиента перед отправкой на сервер и каждый ответ перед возвратом в приложение. Они аналогичны middleware в Express или Apollo Link в GraphQL. Порядок в массиве links имеет значение: запрос проходит слева направо, ответ — справа налево. Последний link в цепочке должен быть terminating — он выполняет реальный HTTP-запрос.

splitLink — маршрутизация запросов

Направляет запросы на разные links в зависимости от условия. Типичный случай: subscriptions через WebSocket, остальные запросы через HTTP.

import { splitLink, httpBatchLink, wsLink, createWSClient } from '@trpc/client';

const wsClient = createWSClient({
  url: 'ws://localhost:3000/api/trpc',
  retryDelayMs: (attempt) => Math.min(1000 * 2 ** attempt, 30000),
});

const client = trpc.createClient({
  links: [
    splitLink({
      // Subscriptions идут через WebSocket
      condition: (op) => op.type === 'subscription',
      true: wsLink({ client: wsClient }),
      // Queries и mutations — через HTTP с батчингом
      false: httpBatchLink({ url: '/api/trpc' }),
    }),
  ],
});

splitLink можно вкладывать для более сложной маршрутизации, например, разные URL для разных роутеров.

loggerLink — логирование для отладки

Логирует все исходящие запросы и входящие ответы в консоль. Удобен при разработке для понимания, какие процедуры вызываются и что возвращается.

import { loggerLink, httpBatchLink } from '@trpc/client';

const client = trpc.createClient({
  links: [
    loggerLink({
      enabled: (opts) =>
        // Включён в development или при ошибках в любой среде
        process.env.NODE_ENV === 'development' ||
        (opts.direction === 'down' && opts.result instanceof Error),
      colorMode: 'ansi', // или 'css' для браузера
    }),
    httpBatchLink({ url: '/api/trpc' }),
  ],
});

Кастомный link

import { TRPCLink } from '@trpc/client';
import { observable } from '@trpc/server/observable';

const timingLink: TRPCLink<AppRouter> = () =>
  ({ next, op }) =>
    observable((observer) => {
      const start = Date.now();
      return next(op).subscribe({
        next(value) {
          console.log(`${op.path} took ${Date.now() - start}ms`);
          observer.next(value);
        },
        error: observer.error,
        complete: observer.complete,
      });
    });

Подводные камни

  • Порядок links в массиве фиксирован: loggerLink должен быть первым, terminating link (httpBatchLink) — последним. Перестановка нарушит логику.
  • httpBatchLink не работает с subscriptions — без splitLink WebSocket-подписки вызовут ошибку.
  • Батчинг может мешать отладке в DevTools: вместо отдельных запросов виден один POST с массивом. Для отладки временно заменяйте httpBatchLink на httpLink.
  • Слишком большой батч (много параллельных запросов) может превысить лимит размера URL или тела запроса на сервере — настраивайте maxURLLength.
  • loggerLink с включённым логированием в продакшене раскрывает структуру API и данные — ограничивайте его только через enabled: () => process.env.NODE_ENV === 'development'.
  • Кастомные links должны корректно пробрасывать и error, и complete — забытый complete приводит к утечкам памяти в observable-цепочке.

Типичные ошибки

  • Смешивать «links в tRPC» с похожим механизмом без критерия выбора.
  • Игнорировать риск: неверно оценить границы применения темы «links в tRPC» и получить хрупкое решение.
  • Показывать только синтаксис и не объяснять поведение в runtime или сборке.

Что проверяет интервьюер

  • Объясняет цепочка транспорта и побочных возможностей клиента.
  • Показывает на примере, как работает: links образуют pipeline для запроса: loggerLink логирует, splitLink выбирает ветку по operation, httpBatchLink объединяет HTTP-запросы, а subscription link обслуживает потоковые операции.
  • Называет production-нюанс и граничный случай для темы «links в tRPC».

Как вы знаете этот вопрос?

Проверить себя по теме tRPC →

Источники

  • https://trpc.io/docs/client/links
  • https://trpc.io/docs/client/links/httpBatchLink
  • https://trpc.io/docs/client/links/splitLink
  • https://trpc.io/docs/client/links/loggerLink
←Предыдущий вопросКак понять, что проблема в проекте связана с tRPC, а не с API, сетью, дизайном состояния или плохой архитектурой?Следующий вопрос→Как использовать tRPC с Next.js (App Router и Pages Router)?

Связанные темы

tRPCapi-clientsobservability

Частые вопросы на собеседовании

  • Чем tRPC отличается от REST и GraphQL? Когда стоит выбрать tRPC вместо них?
  • Как реализовать защищённые процедуры (protected procedures) с помощью middleware и context?
  • Как добавить валидацию входных данных к процедурам tRPC с помощью Zod?
  • В каких типах frontend-проектов tRPC даёт реальный выигрыш, а где будет избыточен или неудачен?