Архітектура, що відчувається швидшою
Повна документація переходу Пісенника з нативного Kotlin і Jetpack Compose на легку гібридну оболонку VF Style V2. Нижче пояснення кожного технічного рішення простими словами, порівняння продуктивності та огляд нової дизайн системи.
До офіційного випуску версії 1.1.5 залишилось
Що саме змінилось
У версії 1.1.4 застосунок був побудований на класичному нативному стеку: Kotlin, Jetpack Compose, Material 3, Hilt та Firebase. Інтерфейс складався з 31 файлу Kotlin і понад 7550 рядків коду. У версії 1.1.5 архітектура стала набагато простішою, легкою та швидкою в роботі.
Один простий шар
Весь нативний код тепер поміщається в одному файлі MainActivity приблизно на 800 рядків. Він лише відкриває вбудований веб перегляд, а вся логіка живе всередині легких веб файлів.
Менше навантаження
Прибравши важкі бібліотеки для впровадження залежностей та аналітики, застосунок почав споживати значно менше пам'яті, залишаючи більше ресурсів для телефону.
Більше приватності
Firebase Analytics і Crashlytics повністю видалені. Застосунок більше не збирає жодних аналітичних даних та не відправляє їх третім сторонам.
Чому нова версія відчувається швидшою
Нижче пояснення кожного з восьми технічних напрямків, за якими стара та нова версія відрізняються. Кожен блок показує як працював старий підхід і чому новий підхід дає кращий результат.
Раніше
Застосунок проходив через складну систему впровадження залежностей, запускав Firebase та завантажував важкий рушій Compose, перш ніж намалювати перший кадр.
Тепер
Одна активність одразу завантажує локальні файли у вбудований веб перегляд, а рушій V8 читає список з 322 пісень швидше, ніж стара система встигала розпакувати свої об'єкти.
Раніше
Кожен новий рядок у списку вимагав перерахунку компонентів на головному потоці, що іноді викликало невеликі затримки під час швидкої прокрутки.
Тепер
Список намальований один раз, а прокрутку повністю бере на себе графічний процесор браузера. Це дає плавні 120 кадрів за секунду без жодних затримок навіть при дуже швидкій прокрутці всіх 322 пісень.
Раніше
Пошук мав штучну затримку у 150 мілісекунд та обробляв результати у фоновому потоці, перш ніж показати їх на екрані.
Тепер
Пошук виконується миттєво в оперативній пам'яті. Фільтрація всіх 322 пісень займає менше однієї мілісекунди, тому результати з'являються одразу під час набору тексту.
Раніше
Кожен перехід створював та знищував елементи інтерфейсу, а обчислення анімацій конкурувало з головним потоком процесора.
Тепер
Усі екрани вже існують в пам'яті одночасно, а перехід між ними це лише перемикання класу та анімація прозорості й зсуву, яка виконується повністю на графічному процесорі.
Раніше
Зміна теми змушувала перерахувати кольори для кожного видимого елементу інтерфейсу одразу.
Тепер
Зміна теми це оновлення одного атрибута, після чого всі кольори плавно переходять до нових значень завдяки змінним CSS.
Раніше
Перегляд нот використовував складні жести масштабування та завантажував важкі несжаті зображення, що навантажувало пам'ять.
Тепер
Ноти показуються у легкому вікні з оптимізованими зображеннями формату webp, а масштабування та гортання працюють миттєво завдяки апаратному прискоренню.
Раніше
Постійне створення тимчасових об'єктів під час взаємодії спричиняло паузи для очищення пам'яті та дрібні підвисання.
Тепер
Нативний шар майже не створює об'єктів, а рушій V8 використовує сучасне покоління збирача сміття, завдяки чому загальне споживання пам'яті впало з приблизно 55 до 32 мегабайтів.
Раніше
Застосунок включав десятки важких бібліотек для інтерфейсу, впровадження залежностей та аналітики.
Тепер
Усі ці бібліотеки повністю видалені, що прибрало близько 15 мегабайтів скомпільованого коду та сотні фонових потоків стеження.
Дизайн мова, створена для читання
Пісенник 1.1.5 це флагманська реалізація VF Style V2, власної дизайн системи студії V Framework, створеної спеціально для зручного читання, ясності та приємних дотиків.
М'якість замість строгості
Гострі кути зникли повністю. Поверхні мають великі заокруглення, від 20 пікселів аж до повністю округлих форм у вигляді таблеток.
Фізична вага та інерція
Елементи не з'являються різко, вони пружинять, розтягуються та плавно заспокоюються за фізичними моделями руху.
Редакційна ієрархія
Виразні жирні заголовки поєднуються з теплими класичними підписами, що створює емоційний зв'язок з піснями.
Тактильний відгук
Кожен дотик до екрана синхронізований з вібрацією пристрою, завдяки чому взаємодія відчувається фізично реальною.
Система кольорів та чотири теми
Вся система кольорів побудована на дев'яти змінних, які автоматично підлаштовуються під кожну з чотирьох доступних тем.
Світла
Чиста та світла, для яскравого денного середовища.
Темна
М'яке глибоке вугільне середовище без напруги для очей.
AMOLED чорна
Повністю чорний фон, що дає максимальну контрастність та економію батареї.
Сепія для читання
Теплий архівний відтінок, натхненний класичними друкованими збірниками гімнів.
Анімації, що відчуваються живими
VF Style V2 описує рух двома основними кривими. Натисніть на будь яку картку нижче, щоб побачити різницю між ними наживо.
Пружинна крива
cubic-bezier(.34, 1.56, .64, 1)
Елемент навмисно проскакує свою ціль, а потім м'яко повертається назад, імітуючи фізичну пружність.
Крива сповільнення
cubic-bezier(.22, 1, .36, 1)
Різкий та впевнений вхід, що використовується для вікон, сповіщень та перемикання екранів.
Пара шрифтів Onest та Lora
Стара версія використовувала звичайний системний шрифт Roboto. Нова версія має власну редакційну типографічну ідентичність.
Onest
Геометричний сучасний шрифт без зарубок, у трьох нарізках 400, 600 та 800. Використовується для заголовків, назв пісень, елементів інтерфейсу та тексту гімнів, забезпечуючи максимальну читабельність навіть у поганому освітленні.
Lora Italic
Класичний редакційний курсив, що розміщується одразу під заголовками Onest як теплий акцент. Він додає інтерфейсу гідність та спадщину класичного друкованого збірника гімнів.
Версія 1.1.4 проти версії 1.1.5
Детальна таблиця усіх технічних характеристик, що змінились між двома версіями застосунку.
| Характеристика | Версія 1.1.4 | Версія 1.1.5 |
|---|---|---|
| Інтерфейс | Jetpack Compose | HTML, CSS, JavaScript |
| Нативний код | 31 файл, 7553 рядки | 1 файл, 801 рядок |
| Архітектура | MVVM, Hilt, корутини | Єдина нативна оболонка |
| Запуск | Hilt, Firebase, Compose | Пряме завантаження файлів |
| Завантаження пісень | Бінарний кеш, потік корутин | Миттєвий масив у пам'яті |
| Прокрутка списку | Розрахунок на головному потоці | Графічний процесор, нуль JS |
| Затримка пошуку | 150 мс та затримка корутин | Менше 1 мс, миттєво |
| Навігація | Обчислення на процесорі | Шар трансформації на GPU |
| Система тем | Material 3 динамічна | Дев'ять змінних CSS |
| Кількість тем | 3 теми | 4 теми |
| Рушій руху | Стандартні специфікації | Фізика пружини з проскоком |
| Фон | Плаский статичний колір | Живі форми на GPU |
| Типографіка | Системний Roboto | Onest та Lora Italic |
| Шрифти ззовні | Системні шрифти | Повністю вбудовані |
| Аналітика | Firebase, Crashlytics | Нуль трекерів |
| Пам'ять | Приблизно 50 до 65 МБ | Приблизно 30 до 38 МБ |
| Офлайн робота | Повна, через бінарний кеш | Повна, через локальні файли |
| Екран увімкнено | Не реалізовано | Нативний прапорець системи |
| Вібрація | Базовий сервіс вібрації | Багаторівнева композиція |
Нова версія вже зовсім близько
Пісенник 1.1.5 поєднує легкість, швидкість та нову дизайн мову VF Style V2 в одному оновленні. Слідкуйте за таймером вгорі сторінки, щоб не пропустити випуск.