Как стать автором
Обновить

Торжественное переоткрытие Store: загрузка данных в Android с помощью корутин

Время на прочтение13 мин
Количество просмотров4.7K

Предлагаю вашему вниманию перевод оригинальной статьи от Mike Nakhimovich


Давным-давно я работал в «Нью-Йорк Таймс» и создал библиотеку под названием Store, которая была «библиотекой Java для легкой, реактивной загрузки данных». Мы создали Store, используя RxJava и шаблоны, взятые из реализации Guava’s Cache. Сегодняшние пользователи приложений ожидают, что обновления данных будут происходить в UI без необходимости делать такие вещи, как pull-to-refresh, чтобы обновить данные или переходить между экранами туда-сюда. Реактивный фронтенд заставил меня задуматься о том, как мы можем иметь декларативные хранилища данных с простыми API, которые абстрагируют сложные функции, такие как многозадачный троттлинг и дисковое кэширование, которые необходимы в современных мобильных приложениях. За три года работы у Store 45 контрибьютеров и более 3500 звёзд на GitHub. Отныне я рад объявить, что Dropbox возьмет на себя активное развитие Store и выпустит его полностью на Kotlin с поддержкой Coroutines и Flow. И теперь Store 4 — это возможность воспользоваться тем, что мы узнали, переосмысливая API и текущие потребности экосистемы Android.




Загрузить данные
Всего голосов 3: ↑3 и ↓0+3
Комментарии4

Ускоряем фронтенд. Когда много запросов к серверу — это хорошо

Время на прочтение10 мин
Количество просмотров24K
В этой статье описываются некоторые методы ускорения загрузки фронтенд-приложений, чтобы реализовать отзывчивый, быстрый пользовательский интерфейс.

Мы обсудим общую архитектуру фронтенда, как обеспечить предварительную загрузку необходимых ресурсов и увеличить вероятность того, что они в кэше. Немного порассуждаем, как отдавать ресурсы с бэкенда и когда можно ограничиться статическими страницами вместо интерактивного клиентского приложения.

Процесс загрузки разделим на три этапа. Для каждого этапа сформулируем общие стратегии повышения производительности:

  1. Начальная отрисовка: сколько времени требуется, чтобы пользователь увидел хоть что-то
    • Сократить запросы, блокирующие рендеринг
    • Избегать последовательных цепочек
    • Повторно использовать соединения с сервером
    • Сервис-воркеры для мгновенного рендеринга
  2. Загрузка приложения: сколько времени требуется, чтобы пользователь смог использовать приложение
    • Разбить пакет приложения на части. Загружать только необходимые ресурсы. Максимизация попаданий в кэш
    • Проверить, что хэши частей пакета не меняются без необходимости
    • Запрашивать данные для страницы до загрузки всего приложения
    • Не блокировать рендеринг загрузкой второстепенных данных
    • Рассмотреть рендеринг на стороне сервера
  3. Следующая страница: сколько времени требуется для перехода на следующую страницу
    • Запрашивать дополнительный код до того, как он понадобится
    • Кэшировать и повторно использовать данные на клиенте
Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии4

Визуализация работы сервис-воркеров

Время на прочтение5 мин
Количество просмотров15K


Доброго времени суток, друзья!

Вероятно, многие из вас слышали о таком новшестве в экосистеме JavaScript, как сервис-воркеры (Service Workers), которые являются ключевым элементом современной веб-разработки. Сервис-воркеры становятся все более востребованными, в первую очередь, благодаря популярности прогрессивных веб-приложений (Progressive Web Applications — PWA).

Когда я впервые услышал о них, я задался вопросом: «Когда мы должны использовать сервис-воркеры? В каким сценариях или контексте мы можем их использовать?»

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

Полагаю, прежде чем разбирать практические примеры, необходимо хотя бы в общих чертах рассмотреть теоретические основы работы сервис-воркеров. Для начинающих разработчиков это послужит хорошим подспорьем в дальнейших начинаниях.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии3

Как быстро и просто ускорить доступ к API приложениям?

Время на прочтение9 мин
Количество просмотров3.5K
Ответ прост: используя проверенные инструменты, такие как кэширование и горизонтальное масштабирование. Сразу скажем, что это инструменты не единственные, но чаще всего именно проверенные классические подходы оказываются наиболее действенные даже в современных условиях. Рассмотрим практический пример.
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

От монолита к микросервисам: ускорили банковские релизы в 15 раз

Время на прочтение7 мин
Количество просмотров9.4K
Бывает, что компания использует устаревшую монолитную IT-систему, с которой сложно быстро выпускать обновления и решать свои бизнес-задачи. Как правило, рано или поздно владелец продукта начинает проектировать новое, более гибкое архитектурное решение.

Недавно мы писали о том, как работают IT-архитекторы, а теперь расскажем подробности об одном из наших кейсов и покажем схему работы системы. В этом проекте мы помогли заменить «коробочное» банковское приложение на микросервисное ДБО, при этом наладив быстрый выпуск релизов – в среднем 1 раз в неделю.

Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии34

Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3

Время на прочтение10 мин
Количество просмотров118K


Во всех центральных процессорах любого компьютера, будь то дешёвый ноутбук или сервер за миллионы долларов, есть устройство под названием «кэш». И с очень большой вероятностью он обладает несколькими уровнями.

Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Читать дальше →
Всего голосов 41: ↑39 и ↓2+37
Комментарии40

Рецепты по приготовлению офлайн-приложений

Время на прочтение12 мин
Количество просмотров8.9K


Доброго времени суток, друзья!

Представляю вашему вниманию перевод замечательной статьи Джейка Арчибальда «Offline Cookbook», посвященной различным вариантам использования сервис-воркера (ServiceWorker API, далее по тексту — просто воркер) и интерфейса кэширования (Cache API).

Предполагается, что вы знакомы с основами названных технологий, потому что кода будет много, а слов мало.

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

Без дальнейших предисловий.
Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии2

JavaScript: ускоряем загрузку изображений с помощью Imgproxy, Cache API и Service Worker API

Время на прочтение12 мин
Количество просмотров9.9K



Привет, друзья!


В этой статье я хочу поделиться с вами результатами небольшого эксперимента, связанного с ускорением загрузки изображений с помощью Imgproxy, Cache API (далее — кеш) и Service Worker API (далее — СВ).


Мы с вами разработаем простое приложение на React, в котором используется несколько изображений, и добьемся того, что загружаемые изображения будут более чем в 10 раз легче (меньше по размеру) оригиналов (imgproxy), а также практически мгновенной загрузки (доставки) изображений (СВ и кеш).


Обратите внимание: в части, касающейся imgproxy, особых препятствий на пути использования рассматриваемого в статье подхода к загрузке изображений в продакшне нет, но в части, касающейся СВ, следует проявлять крайнюю осторожность, поскольку данная технология является экспериментальной — это означает, что поведение СВ во многом определяется конкретной реализацией (браузером), что в ряде случаев делает его довольно непредсказуемым. Возможно, для кеширования изображений лучше предпочесть старые-добрые HTTP-заголовки Cache-Control и Etag. Но эксперимент на то и эксперимент, чтобы, в том числе, искать новые ответы на старые вопросы.


Для тех, кого интересует только результат эксперимента, вот репозиторий с исходным кодом проекта.


Остальных прошу под кат.

Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии13

Как BI «купается» в озёрах данных: практика платформы «Форсайт». Часть 4 (заключительная). Кэширование — нужно или нет?

Время на прочтение21 мин
Количество просмотров2.7K

Всем привет.

Мы завершаем цикл статей о том, как BI-платформа «Форсайт» работает с данными в связке «BI+Data Lake». В этом посте мы поговорим про правильные и уместные применения кэша при работе платформы. Расскажем, чем отличается адаптивный in-memory куб и внутренний файловый MOLAP-сервер в платформе «Форсайт». Поясним, как работает персональный и кросс-сессионный кэш. Определим рекомендации, в каких случаях можно и нужно использовать технологию in-memory в BI-платформе. Также мы будем вам благодарны, если в конце статьи вы проголосуете и укажете, был ли вам полезен подобный цикл статей. Добро пожаловать под кат.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Вышел Git 2.37

Время на прочтение8 мин
Количество просмотров7.8K

27 июня вышел Git 2.37 с новым механизмом очистки файловой системы, её встроенным монитором и другими доработками. Подробности рассказываем к старту курса по Fullstack разработке на Python.

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Комментарии5

Реализация кэш-компрессии по алгоритму base+delta

Время на прочтение29 мин
Количество просмотров2.9K

Существенную часть кристалла современных ЦП занимает кэш-память. Дальнейшее увеличение кэш-памяти без изменения технологических норм приведет к соответствующему увеличению кристалла. Одним из способов увеличения объема хранимой информации в кэше без увеличения самого кэша является использование алгоритмов компрессии. Среди них выделяются алгоритмы Base+Delta и Base-Delta-Immediate. Данная статья посвящена реализации первого алгоритма.

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии8

Как ускорить бинарный поиск

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров10K

Приветствую, сообщество Habr.

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

Читать далее
Всего голосов 26: ↑16 и ↓10+6
Комментарии36

Кэш в JavaScript: не все Map'ы одинаково полезны

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров5.9K

При разработке приложений регулярно возникает задача кэширования каких-то данных, которые из хранилища должны читаться много чаще, чем писаться. Давайте рассмотрим на примере простого теста, когда и на каком механизме эффективнее организовать его для JavaScript-приложения - на Map или на Object.

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии15

5 советов, которые помогут при переносе кода на платформы, отличные от х86

Время на прочтение8 мин
Количество просмотров3.5K

Легко написать код, который компилируется, компонуется и нормально работает на x86, но не работает на других процессорах, например Power. Обычно причина в том, что такой код изначально не был предназначен для платформ, отличных от x86. В статье разбираем отличия x86 и Power, которые могут нарушить сборку или снизить производительность. Делимся инструментами, которые помогут выявить и устранить проблемы.

Читать далее
Всего голосов 21: ↑20 и ↓1+19
Комментарии15

Долгоиграющие приложения на PHP

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров19K

Мы часто сталкиваемся с задачами, которые требуют работы нашего кода дольше, чем длится простой HTTP-запрос. Это могут быть как выгрузки данных для интеграции с партнёрами, так и просто приложения, которые должны реагировать на события в системе в момент их появления. Конечно, можно использовать другие языки программирования, но это увеличит стек и усложнит систему.

Меня зовут Александр Пряхин, я TechUnit Lead в Авито. В IT работаю уже 14 лет. Из них 8 лет руковожу командами. Параллельно с этим преподаю и менторю. Сегодня разберём, как готовить демонов на PHP — от А до Я, и почему это актуально.

Читать далее
Всего голосов 62: ↑60 и ↓2+58
Комментарии17

PostgreSQL: настройка и оптимизация производительности. Часть 1

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров16K

Данная статья посвящена способам повышения производительности PostgreSQL и EDB Postgres Advanced Server (EPAS) с 10 по 13 версии. Мы начнём с аппаратного обеспечения и будем двигаться вверх по стеку, оставив напоследок SQL-запросы. 

Читать далее
Всего голосов 21: ↑20 и ↓1+19
Комментарии5

Делаем отказоустойчивый Asterisk realtime

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров6K

Если вы спросите у прожжённых системных администраторов, используют ли они realtime‑конфигурацию в Asterisk, с вероятностью 90% ответ будет отрицательный. В качестве обоснования, скорее всего, услышите «При недоступности источников данных телефония станет неработоспособной». Если интересно узнать, как мы обошли это ограничение, читайте дальше.

Читать далее
Всего голосов 34: ↑34 и ↓0+34
Комментарии12

Экспериментальное определение характеристик кэш-памяти

Время на прочтение6 мин
Количество просмотров5K
В ряде случаев (например, для тонкой оптимизации программы под конкретный компьютер) полезно знать характеристики кэш-подсистемы: количество уровней, время доступа к каждому уровню, их размер и ассоциативность, и т.п.
Для одноразовой оптимизации необходимые значения можно посмотреть в спецификации на компьютер, но когда требуется автоматическая оптимизация (например, во время сборки и установки программы), характеристики приходится определять косвенно, по результатам прогона специального набора тестов.
Удобная тестовая программа для Linux — lat_mem_rd из пакета тестов lmbench. Её работа заключается в том, что она выделяет в памяти массив и читает его элементы с заданным шагом, циклически проходя по массиву снова и снова. Затем выделяется массив большего размера, и т.д. Для каждого значения шага и размера массива подсчитывается среднее время доступа.
Пример графика, который был получен этой программой на реальной системе:

Как по полученным данным определить характеристики кэша?
Всего голосов 33: ↑33 и ↓0+33
Комментарии10

Экспериментальное определение характеристик кэш-памяти: практикум

Время на прочтение9 мин
Количество просмотров5.8K
Первая статья об экспериментальном определении характеристик кэш-памяти появилась на свет несколько необычным образом. Играясь с утилитами из lmbench, я получил те самые три графика, и задался вопросом, сколько же информации об исследуемой системе можно из них вытянуть. Определив некоторые характеристики кэша и TLB, я затем задал эти графики студентам как домашнее задание — предвкушая, что им удастся обнаружить что-то такое, что я проглядел. В целом, студенты меня разочаровали, и не заметили даже связь ассоциативности с наклоном ступенек на графике. В конце семестра я собираюсь рассказать им своё решение; а чтобы оно к тому времени не забылось, я написал на скорую руку ту статью.

Затем Yekver предложил мне идею простой программы для Windows, которая определяла бы характеристики кэша автоматически, не требуя ручного анализа графиков. (Тем более, что версии lmbench для Windows не существует.) Для замера времени будем использовать функцию __rdtsc, которая возвращает 64-битное количество тактов с момента последнего сброса процессора. Сначала определим тактовую частоту процессора, замерив на произвольной нагрузке время выполнения и количество потребовавшихся тактов. Затем для расчёта времени доступа к памяти будем делить количество потраченных тактов на тактовую частоту процессора.

Подобно прошлому эксперименту, мы будем брать данные различного объёма от 4КБ до 512МБ, и проходить по массиву миллионы раз с последующим усреднением результата. Чтобы минимизировать влияние дополнительных операций в цикле нагрузки, следуя примеру авторов lat_mem_rd, используем для тела нагрузки операцию p=(void**)*p;, которая компилируется в одну машинную команду, и развернём её 256 раз, чтобы возврат к началу цикла выполнялся относительно редко.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии21

Производительность и оптимизация отрисовки графики во Flash

Время на прочтение3 мин
Количество просмотров12K

Во время создания нашей игры на флэше (осторожно — вконтакт!), в определенный момент мы столкнулись с проблемой производительности.

FPS начал падать даже на весьма производительных системах… Проблема была типична для всех флэш-игр — большое количество векторной графики. Как вы понимаете, векторная графика — это весьма ресурсоемкая штука. Ведь при рендере плееру приходится заново рассчитывать разнообразные хитрые кривые и т.п., что явно проигрывает по скорости работе с растровой графикой. При чем — проигрывает на порядок (а то и несколько порядков).

По старой доброй традиции в зубы был взят Google и начался поиск решения…
Читать дальше →
Всего голосов 47: ↑34 и ↓13+21
Комментарии49