Привет! Давно ничего не писал в этот канал. Прошло уже 8 месяцев с тех пор, как я работаю в Reality Labs (Meta) и занимаюсь разработкой Quest Store — это место, где люди покупают приложения для устройств Quest. За это время я успел пережить один лэйофф и получить высокую оценку EE (Exceeds Expectations, «выше ожиданий») за 2024 год.
В основном я занимался производительностью и надежностью (Reliability) — тем, чем, собственно, и занимался последние 10 лет. И в этих аспектах особенно заметно, чем большие компании отличаются от остального мира. Например, в Т-Банке и Booking использовались общепринятые стандарты производительности и подходы SRE от Google. Google активно вкладывался в развитие/продвижение своих идей.
Meta же пошла во многом своим путем. Она появилась давно и, как и Google, параллельно развивала внутренние подходы, затачивая их под свои нужды. За годы требования к метрикам и инструментам росли, и в итоге базовый уровень здесь значительно выше, чем, например, в Booking.com или Тинькофф и подкреплено отличным инструментарием.
Для меня тоже многое изменилось в подходе к улучшению производительности. В Тинькофф я много работал над оптимизацией фреймворка Tramvai: как загружаются JS/CSS на клиенте, как происходит инициализация приложения и так далее. Это были довольно низкоуровневые оптимизации.
В Meta же я работаю в продуктовой команде, которая отвечает за оптимизацию самих приложений. Мой фокус сместился с низкого уровня на уровень приложений — как сделать так, чтобы они выглядели и загружались быстро для пользователей.
Это сильно изменило мои приоритеты. Вот несколько ключевых моментов:
- @defer
и @stream
. В статье https://engineering.fb.com/2020/05/08/web/facebook-redesign/ хорошо описаны подходы к загрузке данных. Например, при загрузке ленты постов бэкенд может отдавать данные как поток: по мере готовности посты отправляются клиенту. В итоге первые два поста загружаются максимально быстро и сразу показываются пользователю, а остальное подгружается в фоне в том же запросе. @defer
работает похоже: приоритет отдается данным для экрана, который пользователь видит первым, а остальное загружается в фоне. Эти продвинутые подходы значительно ускоряют визуальную производительность приложения.
- Meta создала GraphQL, чтобы решить проблему избыточной загрузки данных (оверфетчинга) на клиенте. На бумаге это работает: клиенты могут выбирать, какие данные загружать. Но на практике компоненты обрастают множеством сценариев, становятся монолитными, и в итоге оверфетчинг всё равно возникает. С этим приходится бороться через рефакторинг.
- Близость к командам, разрабатывающим React, React Native и Relay. Это похоже на то, как в Тинькофф я мог бы обсуждать задачи с разработчиками Tramvai и просить у них помощи. Здесь то же самое. При этом внести улучшения довольно просто. Например, мои правки для производительности React Native: https://github.com/facebook/react-native/pull/46103/files и https://github.com/facebook/react-native/pull/47965.
В итоге за 8 месяцев в Meta я как минимум посмотрел на тему производительности с другой стороны — с продвинутым инструментарием и подходами, где не пришлось строить этот процесс с нуля, как это было, например, в Тинькофф. И увидел изнутри огромную компанию с десятками тысяч инженеров и гигантским офисом MPK 22, 21, 12, где можно идти пешком с одного конца до другого 30 минут, а между концами офисов ходят шаттлы.
Андрей Марченко Dev заметки

類似チャンネル



Обзор современных технологий в разработке: Node.js и веб-процессы
Современный мир разработки программного обеспечения постоянно меняется, и технологии, используемые для создания веб-приложений, становятся все более сложными и многообразными. Одной из таких технологий является Node.js, среда выполнения JavaScript, которая позволяет разработчикам создавать быстрые и масштабируемые сетевые приложения. С момента своего появления Node.js завоевал широкую популярность благодаря своей способности обрабатывать большое количество одновременных соединений с высокой производительностью и в реальном времени. Использование этого фреймворка в веб-разработке открыло новые горизонты для разработчиков, улучшая опыт пользователей и сокращая время на разработку. В данной статье мы обсудим ключевые аспекты работы с Node.js, его преимущества и недостатки, а также ответим на популярные вопросы, связанные с использованием этой технологии в веб-разработке.
Что такое Node.js?
Node.js – это серверная платформа, основанная на JavaScript, которая помогает разработчикам создавать масштабируемые сетевые приложения. Она работает на основе движка V8 от Google Chrome, который переводит JavaScript-код в машинный код, что обеспечивает высокую производительность и скорость выполнения. Node.js позволяет обрабатывать множество соединений одновременно, что делает его идеальным для приложений в реальном времени, таких как чаты и игры.
Платформа поддерживает событийно-ориентированную модель, что делает разработку асинхронных приложений более удобной. Благодаря этому, приложения могут продолжать свою работу без блокировки потока, что значительно улучшает пользовательский опыт. Node.js также предлагает большое количество модулей и библиотек через менеджер пакетов npm, что ускоряет процесс разработки.
Какие преимущества у Node.js в веб-разработке?
Одним из главных преимуществ Node.js является его высокая производительность. Возможность обрабатывать большое количество запросов одновременно без блокировки потоков делает его подходящим для создания высоконагруженных приложений. Кроме того, использование JavaScript как на клиенте, так и на сервере способствует лучшему взаимодействию между командами разработчиков, так как они могут работать в одном и том же языке.
Также стоит отметить активное сообщество разработчиков и богатую экосистему пакетов. Это позволяет легко находить готовые решения для распространенных задач, экономя время и ресурсы. Node.js также хорошо интегрируется с другими популярными технологиями, такими как MongoDB, что делает его универсальным инструментом для разработки.
С какими недостатками сталкиваются разработчики при использовании Node.js?
Несмотря на свои преимущества, Node.js имеет и некоторые недостатки. Одним из них является проблема с производительностью при обработке тяжелых вычислительных задач. Когда приложение сталкивается с интенсивными вычислениями, оно может блокировать поток событий, что негативно сказывается на его производительности.
Другим недостатком является отсутствие стандартных библиотек для некоторых задач. Хотя сообщество Node.js активно разрабатывает и улучшает библиотеки, разработчикам может потребоваться время, чтобы найти подходящие решения для специфических проблем, особенно в случае экзотических технологий.
Как Node.js улучшает взаимодействие с клиентом в веб-приложениях?
Node.js обеспечивает быстрое и эффективное взаимодействие с клиентом благодаря своей асинхронной и неблокирующей архитектуре. Это позволяет серверу обрабатывать запросы и отправлять данные пользователю в реальном времени, что особенно полезно для приложений, требующих постоянного обновления, таких как социальные сети и игры.
Используя технологии, такие как WebSocket, разработчики могут осуществлять двустороннее соединение между клиентом и сервером, передавая данные мгновенно. Это существенно улучшает пользовательский опыт, так как изменения на сервере сразу же отображаются на клиентской стороне.
Как начать работу с Node.js?
Чтобы начать работу с Node.js, необходимо сначала установить платформу на вашем компьютере. Для этого необходимо загрузить и установить последнюю версию с официального сайта Node.js. После этого вы сможете использовать npm для установки нужных вам библиотек и модулей, а также разрабатывать свои собственные приложения.
Существует множество ресурсов и руководств, которые помогут вам начать. Кроме того, рекомендуется познакомиться с основами JavaScript, так как это основной язык, используемый в Node.js. Как только вы освоите основы, вы сможете создать простое приложение и постепенно усложнять его, изучая новые концепции и возможности, которые предлагает Node.js.
Андрей Марченко Dev заметки テレグラムチャンネル
Вы когда-нибудь задумывались над тем, как улучшить свои навыки в IT, Node.js, Web разработке или оптимизации рабочих процессов? Тогда канал «Андрей Марченко Dev заметки» (@andrey_marchenko_notes) идеально подойдет для вас! Здесь собраны заметки и рекомендации от опытного специалиста по разработке - Андрея Марченко
Канал предлагает уникальные и качественные материалы о различных аспектах связанных с IT индустрией. Вы сможете найти здесь полезные советы, инструкции, статьи и обзоры о Node.js, веб-разработке и оптимизации бизнес-процессов
Если вы хотите быть в курсе последних тенденций в мире разработки, а также улучшить свои навыки и знания в этой сфере, не упустите возможность подписаться на канал «Андрей Марченко Dev заметки» прямо сейчас! Получайте актуальную информацию, участвуйте в обсуждениях и развивайтесь вместе с лучшими экспертами.