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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 686
  • Вакансии в Европе23 668
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 889
  • Релокация в США43 686
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Как Blazor управляет повторным рендерингом компонентов и как его оптимизировать?

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

Blazor рендерит компонент при изменении параметров или вызове StateHasChanged(). Оптимизация: переопределить ShouldRender(), использовать @key в списках, компонент Virtualize для длинных коллекций и разбивку на мелкие изолированные компоненты.

ShouldRender() — ручной контроль

Переопределите ShouldRender(), чтобы пропускать ненужные ре-рендеры:

private bool _forceRender = false;

protected override bool ShouldRender()
{
    if (_forceRender)
    {
        _forceRender = false;
        return true;
    }
    return false; // Рендеримся только по явному запросу
}

private void OnImportantChange()
{
    _forceRender = true;
    StateHasChanged();
}

Управление повторным рендерингом в Blazor

Blazor автоматически перерендеривает компонент при изменении параметров или вызове StateHasChanged(). Это удобно, но при сложном дереве компонентов неоптимальные ре-рендеры становятся узким местом производительности.

Когда происходит ре-рендер

  • Вызван StateHasChanged() (явно или через EventCallback).
  • Изменились входящие параметры (SetParametersAsync).
  • Родительский компонент перерендерился (по умолчанию тянет дочерние).

ComponentBase vs IComponent — разница в частоте рендеров

ComponentBase рендерится дважды при изменении параметров: один раз синхронно, второй после await. Если хотите один рендер — используйте флаг или реализуйте IComponent напрямую (редкий сценарий).

Мемоизация через @key

При рендеринге списков используйте @key чтобы Blazor переиспользовал DOM-узлы, а не пересоздавал их:

@foreach (var job in Jobs)
{
    <JobCard @key="job.Id" Job="job" />
}

EventCallback автоматически вызывает StateHasChanged

EventCallback у родителя вызывает StateHasChanged автоматически. Если нужно избежать лишних ре-рендеров, используйте Action вместо EventCallback, но тогда вам самим нужно управлять обновлением UI.

Виртуализация длинных списков

<Virtualize Items="AllJobs" Context="job" OverscanCount="5">
    <ItemContent>
        <JobCard Job="job" />
    </ItemContent>
    <Placeholder>
        <div class="skeleton">Loading...</div>
    </Placeholder>
</Virtualize>

Разбивка на мелкие компоненты

Выносите «дорогие» части UI в отдельные компоненты и переопределяйте в них ShouldRender(). Так ре-рендер родителя не затрагивает изолированный дочерний компонент.

StateHasChanged из фонового потока

// Правильно — через InvokeAsync
await InvokeAsync(StateHasChanged);

// Неправильно — прямой вызов из другого потока может вызвать исключение
StateHasChanged(); // опасно вне UI-потока

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

  • Двойной рендер ComponentBase. После каждого async-метода жизненного цикла Blazor рендерится повторно. Используйте ShouldRender(), чтобы подавить промежуточные рендеры.
  • EventCallback вызывает рендер родителя. Даже если данные не изменились, родитель перерендерится. При высокочастотных событиях (mousemove, scroll) это критично — используйте дебаунс или Action.
  • Отсутствие @key в списках. Без @key при сортировке/фильтрации Blazor пересоздаёт DOM-элементы вместо их перемещения — это медленно и ломает анимации.
  • Глубокое дерево и параметры-объекты. Если передаётся объект по ссылке, Blazor сравнивает ссылки, а не значения. Неизменённый объект всё равно вызовет ре-рендер если ссылка новая (например, при LINQ ToList()).
  • CascadingValue без IsFixed. Каждое изменение каскадного значения вызывает ре-рендер всех потребителей. Для статичных значений устанавливайте IsFixed="true".
  • Virtualize и высота элементов. Virtualize требует фиксированной высоты или ItemSize. Динамические высоты нарушают расчёт видимой области.
  • ShouldRender не вызывается при первом рендере. Метод вызывается только при последующих обновлениях, не при первоначальной отрисовке компонента.

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

  • В чём разница между Blazor Server и Blazor WebAssembly?
  • Что такое Blazor и каковы его основные модели хостинга?
  • В каких типах frontend-проектов Blazor даёт реальный выигрыш, а где будет избыточен или неудачен?
  • Каковы ключевые lifecycle-методы компонента Blazor?

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

  • Путать render tree diffing и оптимизация повторного рендеринга с похожим механизмом из другой версии или платформы.
  • Игнорировать runtime-границы Blazor: lifecycle, DI scope, SQL translation, UI thread или platform API.
  • Не обсуждать null/empty/error cases и поведение под нагрузкой.

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

  • Кандидат объясняет render tree diffing и оптимизация повторного рендеринга на конкретном примере, а не только определением.
  • Указывает последствия для производительности, тестируемости и поддержки.
  • Различает документированное поведение текущего стека и устаревшие практики.

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

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

Источники

  • https://learn.microsoft.com/en-us/aspnet/core/blazor/components/rendering
←Предыдущий вопросЧто такое Blazor и каковы его основные модели хостинга?Следующий вопрос→В каких типах frontend-проектов Blazor даёт реальный выигрыш, а где будет избыточен или неудачен?

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

Blazorperformance-debuggingruntime-reasoning