Porady

22
Paź

Przyśpieszenie aplikacji w React Native

Obecne aplikacje mobilne są coraz bardziej zaawansowane pod względem funkcjonalności jak i prezentują większy poziom skomplikowania. Z powodu dużej konkurencji użytkownicy aplikacji nie powinni odczuwać jakichkolwiek niedogodności podczas użytkowania aplikacji. Ważnym celem dla programisty jest więc zapewnienie, by aplikacja działała w sposób płynny oraz by jej uruchomienie następowało w bardzo krótkim czasie oraz by funkcjonowała w satysfakcjonujący użytkownika sposób – niezależnie od urządzenia, na którym jest uruchamiana.

Rozmiar aplikacji w obliczu obecnych urządzeń o dużym rozmiarze pamięci nie wydaje się być tak istotny, ale jeśli aplikacja zajmuje dużo miejsca, może być świadomie ignorowana przez użytkowników.

Aplikacje mobilne oparte o Javascript (w technologiach takich jak React Native, Ionic czy NativeScript) wykorzystują silnik, który użytkują również przeglądarki internetowe. Nie zawsze jednak cele, na które powinny stawiać przeglądarki, są takie same jak w przypadku aplikacji mobilnych.

By zapewnić developerom tworzenie wydajnych aplikacji, programiści Facebooka stworzyli całkiem nowy silnik Javascriptu – Hermes. Aby go użyć, musimy korzystać z frameworka React Native umożliwiającego tworzenie wieloplatformowych aplikacji mobilnych i nie tylko – również webowych, desktopowych czy na konsole.

Statystyki

Podczas prac nad Hermesem, przeprowadzono liczne testy, których wyniki przedstawiono w poniższych metrykach.

Czas reakcji (TTI) – czas od włączenia, po którym aplikacja jest gotowa do użytku.

Rozmiar aplikacji – rozmiar pliku instalacyjnego APK

Mowa tu o tzw. uniwersalnym pakiecie, czyli takim, który jest przeznaczony na wszystkie dostępne architektury.

Użycie aplikacji

Pamięć, którą aplikacja wykorzystuje podczas działania.

Warto dodać, że statystyki były przeprowadzone na modelu Google Pixel oraz na domyślnej, startowej wersji aplikacji. Po wykorzystaniu silnika w już istniejącej aplikacji z pewnymi funkcjonalnościami, wyniki mają jeszcze większą amplitudę oraz są jeszcze bardziej imponujące.

Sposób działania

Zazwyczaj silnik Javascriptu generuje tzw. bytecode dopiero po załadowaniu kodu. Tutaj strategia jest zupełnie inna. Hermes przenosi tą część uruchamiania aplikacji do czynności wykonywanych przed instalacją i przed uruchomieniem, co powoduje znacznie krótszy czas uruchamiania aplikacji.

źródło: engineering.fb.com

Inną nowością w silniku jest to, że w przeciwieństwie do większości obecnych silników Hermes nie używa JIT (just-in-time Compiler). Jest to kompilator, który przyśpiesza pracę aplikacji. Jego brak programiści tłumaczą znacznym przyśpieszeniem czasu potrzebnego na uruchomienie aplikacji (TTI) i poprawą innych metryk, na których im zależało bardziej i które są najistotniejsze z punktu użytkowania aplikacji mobilnych.

Sposób uruchomienia silnika

Aby wykorzystać silnik Hermes w naszej aplikacji, musimy posiadać projekt w React Native w wersji 0.60 lub wyższej.

Następnie w pliku android/app/build.gradle zmieniamy wartość enableHermes na true:

project.ext.react = [
entryFile: "index.js",
enableHermes: true
]

Jeśli w aplikacji używamy ProGuarda, konieczne będzie dodanie poniższej linii w pliku jego reguł (proguard-rules.pro):

-keep class com.facebook.hermes.unicode.** { *; }

Jeśli już kiedyś uruchamialiśmy aplikację, musimy użyć komendy:

cd android && ./gradlew clean

I dopiero później, aby uruchomić aplikację wpisujemy:

react-native run-android

 

Warto dodać, że prawdziwy progres w działaniu aplikacji zauważymy dopiero po jej zbuildowaniu do wersji release. Czynność ta spowoduje skompilowanie kodu Javascriptu do bytecode i pozwoli na realne przyśpieszenie startu aplikacji.

 

Źródła:

https://facebook.github.io/react-native/docs/hermes/

https://hermesengine.dev/

https://github.com/facebook/hermes

React Native EU 2019: Tzvetan Mikov – Improving React Native Performance

 

27
Wrz

Jak pisać specyfikację techniczną?

Specyfikację techniczną powinniśmy rozpatrywać pod kątem dokumentu techniczno-biznesowego.

W kwestii informatycznej, treści muszą być sformułowane precyzyjnie. Dzięki temu będą fundamentem do dalszej pracy programistycznej.

Biznesowo, specyfikacja będzie pomocna w oszacowaniu kosztów. Stanie się
również podstawą do konfrontacji wizji klienta w kontekście funkcjonalności tworzonego systemu.

Z doświadczenia, przed podjęciem się pracy nad specyfikacją, rekomenduję zrobić research branży, której dotyczy system. Wizualizacji treści pomaga naszkicowanie mapy myśli. Wpisuje się to w kanon dobrych praktyk, które gwarantują sukces podczas rozmów z klientem.

Kontrowersje dotyczące specyfikacji dotyczą podziału założeń na potrzeby analizy. Możemy rozpatrywać system pod kątem funkcjonalności. Wyróżniamy poszczególne funkcjonalności, a następnie opisujemy, jak realizują się w każdym z dostępnych profili. Drugą opcją jest wyróżnienie użytkowników i opisanie dostępnych opcji. Nie możemy jednoznacznie określić, który sposób analizy powinniśmy przyjąć. Należy go dobrać indywidualnie do projektu, w zależności od stopnia jego złożoności.

Żeby jednak ułatwić pracę na specyfikacją, proponuję przyjąć pięć głównych punktów takiego dokumentu i zadbać o staranne ich rozwinięcie.

Wspomniane punkty to:

  1. Informacje ogólne
  2. Specyfikacja techniczna i konfiguracja
  3. Założenia pozafunkcjonalne
  4. Założenia funkcjonalne
  5. Scenariusze funkcjonalności

W “Informacjach ogólnych” dobrze jest nakreślić zarys branży oraz zawrzeć kluczowe założenia systemu.

W punkcie drugim, należy wyróżnić wykorzystane technologie, szczegółowe informacje o wdrażaniu oraz utrzymaniu serwisu.

Założenia pozafunkcjonalne” powinny określać wersje językowe i kwestie z nimi związane (przykładowo miejsce, z którego będzie możliwa edycja wersji).

W “Założeniach funkcjonalnych” zaczyna się analiza właściwa. Proponuję zacząć od określenia typów danych obsługiwanych przez system oraz określenia jego struktury. Kolejne informacje będą zależne od formy analizy, którą zdecydowaliśmy się przyjąć. Należy pamiętać, żeby sporządzać specyfikację z dbałością o szczegóły. Każdy niesprecyzowany element pozostawia pole do domniemywać, a tego staramy się unikać.

Punkt “Scenariusze funkcjonalności” służy podsumowaniu i opisaniu use casów, czyli przypadków użycia systemu. Pomocne mogą być diagramy oraz schematy, które ułatwią zrozumienie obsługi systemu osobie spoza branży informatycznej. Należy również wystrzegać się słownictwa specjalistycznego.

Podsumowując, podążanie według opisanego scenariusza pracy nad specyfikacją techniczną powinno zminimalizować ryzyko niepowodzenia. Oprócz strony teoretycznej, warto jest wziąć pod uwagę formatowanie, które nada tekstu przejrzystości i poprawi jego czytelność.

9
Maj

Integracja aplikacji: jak tworzyć aplikacje, które łączą się z innymi?

Integracja aplikacji, najogólniej ujmując, jest procesem dostarczania zasobów lub możliwości z jednej aplikacji do drugiej. W miarę ewolucji świata aplikacji, integracja aplikacji jest oczekiwana w wielu kontekstach. Na przykład, jeśli kiedykolwiek używałeś poświadczeń Facebooka do zalogowania się do innej aplikacji, skorzystałeś z integracji aplikacji. Deweloper drugiej aplikacji oszczędził Ci kłopotów z dostarczaniem danych osobowych, integrując proces uwierzytelniania z Facebookiem.

Tworzenie aplikacji może nie tylko przynieść korzyści deweloperowi wykorzystującemu integrację aplikacji, ale można również utworzyć aplikację w taki sposób, aby można ją było zintegrować z innymi aplikacjami. Może to prowadzić do możliwości uzyskania przychodu lub zwiększenia zasięgu Twojej aplikacji lub platformy.

Integracja aplikacji: Podstawy


Prawie każda nowa aplikacja jest zazwyczaj połączeniem trzech ogólnych typów kodu: kodu źródłowego dostarczonego przez system operacyjny, kodu napisanego przez programistę, który jest specyficzny tylko dla tworzonej aplikacji, oraz kodu napisanego przez inne strony, które programista wykorzystuje w nowej aplikacji.

Kod zintegrowany z innych źródeł jest określany na różne sposoby, takie jak frameworki, biblioteki lub pakiety SDK (Software Development Kits). Chociaż istnieją różnice między tymi typami kodu, na potrzeby tego artykułu będziemy traktować je tak samo i używać terminu framework.

Framework to partia kodu, który żyje samodzielnie i jest kompilowany osobno. Jest napisany w konkretnym celu i zazwyczaj ma wąski zakres. Nowa aplikacja może nie integrować żadnych zewnętrznych struktur lub może wykorzystywać wiele. Opracowując projekt, twórca aplikacji rozważa, ile kodu musi napisać sam i ile będzie w stanie zintegrować.

Doświadczeni twórcy wiedzą jakie frameworki dostępne są aktualnie na rynku. Wiedzą, jak korzystać z istniejących frameworków w sposób, który przyniesie korzyść budowanej aplikacji – i kiedy tego nie robić. I wiedzą, jak zbudować swoją aplikację, aby jej części mogły stać się także częścią dla innych, jeśli jest taka potrzeba

Integracja aplikacji: Dostawcy frameworków


Wiele frameworków jest dostarczanych przez Apple i Google. Na przykład  dla rzeczy takich jak przyciski, pola i obrazy. Kodują i zachowują podstawowe zachowanie tych elementów interfejsu, zapewniając ogromną funkcjonalność programistom zewnętrznym. Frameworki pozwalają programistom skupić się na rozwiązywaniu problemów biznesowych, a nie na określaniu szczegółów, które już zostały określone, np. na ile czasu między dwoma kolejnymi dotknięciami stanowi podwójne dotknięcie. Korzystanie z tych istniejących ram pomaga również zapewnić spójne zachowanie w różnych aplikacjach.

Zdjęcie

Frameworki mogą być również dystrybuowane przez osoby trzecie. Niektóre z tych frameworków mogą być edytowane przez innych programistów i nazywane są kodem „open source”. Kod źródłowy to oprogramowanie, którego większość użytkowników nigdy nie widzi. To sprawia, że ​​aplikacja działa tak, jak działa. Oprogramowanie Open Source to oprogramowanie z kodem, który każdy może sprawdzać, modyfikować i ulepszać. Innymi słowy, gdy framework jest dystrybuowany jako open source, programiści mogą zmienić kod źródłowy, aby odpowiadał ich potrzebom. Niektóre frameworki są jednak rozpowszechniane bez kodu źródłowego. Ten typ dystrybucji umożliwia programistom zewnętrznym korzystanie z ich funkcji, ale nie może ich zmieniać. W tym przypadku kod źródłowy jest chroniony i niedostępny.

Integracja aplikacji: Funkcjonalność frameworków


Czasami frameworki zapewniają funkcjonalność, ale nie zawierają interfejsu użytkownika. Jeśli to konieczne, od niezależnego programisty zależy zapewnienie interfejsu. Na przykład aplikacja może wymagać od bieżącej lokalizacji użytkownika przedstawienia listy pobliskich sklepów detalicznych. Inna aplikacja może wykorzystywać te informacje o lokalizacji do gromadzenia ich i przekazywać informacje o tym, jak zatłoczony jest dany obszar. Frameworki udostępniają tylko informacje o lokalizacji, ale aplikacja określa, w jaki sposób wykorzystać te informacje w sposób cenny dla użytkowników.

Innym razem struktura zapewnia funkcjonalność i interfejs użytkownika. Mapy są tego doskonałym przykładem. Mapy Google i Mapy Apple zapewniają ogromną funkcjonalność, często wymagającą niewielkiej dodatkowej pracy dla programistów zewnętrznych. Deweloper może przydzielić obszar ekranu (lub cały ekran) do mapy, dodać trochę informacji o konfiguracji, takich jak to, czy bieżąca lokalizacja użytkownika powinna być wyświetlana, czy opcjonalnie podać listę pinezek, które mają być wyświetlane. Struktura map obsługuje prawie wszystkie ciężkie operacje, a deweloper nie musi pisać dodatkowego kodu.

Integracja aplikacji: Korzyści dla Twojej aplikacji


Jak już wspomniano, Apple i Google zapewniają ogromne frameworki, które sprawiają, że programiści mogą tworzyć aplikacje mobilne bez wysokich kosztów, które byłyby wymagane do „klepania kodu” każdego elementu. Podobnie wiele znanych aplikacji zorientowanych społecznie, które programiści mogą wykorzystać do ułatwienia połączeń między aplikacjami. Obejmuje to wszystko, od sieci relacji (np. LinkedIn, Tinder), po sieci udostępniania multimediów (np. YouTube, Flickr), sieci blogów lub publikowania (np. Reddit, Medium).

Istnieje również wiele innych firm oferujących mniejsze funkcje, podobne do frameworków, które można osadzić w aplikacji. Analityka użytkowania jest jedną z takich funkcji. Amazon, Google, Mixpanel i inne oferują frameworki, które będą rejestrować aktywność użytkowników w aplikacji i dostarczać te dane na serwer, na którym możesz przeglądać raporty i ulepszać swoją aplikację na podstawie wyników, które widzisz.

Ważne jest, aby pamiętać, że wykorzystanie istniejących danych nie zawsze jest możliwe. Na przykład, wyobraź sobie, że chcesz stworzyć kolejną świetną aplikację do współdzielenia jazdy. Mógłbyś skorzystać z algorytmów planowania trasy Uber lub Lyft. Pozwoliłoby to zaoszczędzić znaczne koszty rozwoju, ale nie jest możliwe, ponieważ firmy te nie oferują tej funkcji we frameworku. Ten kod jest dla nich przewagą konkurencyjną, więc utrzymują go jako prywatny.

Czasami nie jest rozsądnie korzystać z dostępnych danych. Należy upewnić się, że pochodzą one z wiarygodnego źródła, które będzie nadal obsługiwane tak długo, jak Twoja aplikacja istnieje. Kiedy framework jest dostarczany przez firmę lub niezależnego programistę, który traci zainteresowanie produktem, możesz zostać z wyzwaniem zastąpienia go lub usunięcia, gdy nie jest już kompatybilny ze zaktualizowanymi bazowymi platformami Apple i Google. To, co w krótkim okresie wydawało się szybkim i niedrogim rozwiązaniem, może stać się kosztowną propozycją, jeśli zostaniesz zmuszony do zastąpienia go później.

Integracja aplikacji: Budowanie aplikacji w celu użyczenia danych


A co, jeśli Twoja firma chce, aby programiści umieścili w swoich aplikacjach funkcje Twojej aplikacji? Jeśli utworzysz aplikację społecznościową, prawdopodobnie zainteresuje Cię jak najłatwiejsze publikowanie treści w aplikacji, bez względu na to, jak się tam dostanie. Możesz stworzyć strukturę ułatwiającą zewnętrznym programistom dodawanie funkcji publikowania swojej platformy do swojej aplikacji. Następnie, gdy inni programiści używają Twojej platformy do publikowania, płacą ci za każdym razem, gdy z niej korzystają. Jak wspomniano powyżej, możesz zapewnić tę funkcjonalność z dowolnym interfejsem użytkownika lub bez niego.

Istnieje wiele możliwości dla aplikacji biznesowych. Na przykład fakturowanie medyczne jest skomplikowane – wszystkie diagnozy i procedury mają powiązane kody numeryczne, które pojawiają się na rachunku medycznym pacjenta. Niektórych procedur nie można obciążać innymi procedurami. Niektóre procedury mogą być rozliczane tylko pod pewnymi warunkami. Jeśli byłeś firmą z doświadczeniem w zakresie rozliczeń medycznych zawartą w systemach oprogramowania, możesz spakować tę wiedzę w ramach, które udostępnisz innym firmom, aby włączyć je do swoich aplikacji. Uruchomienie na rynku medycznym może skupić się na rozwiązaniu unikalnego problemu w branży, ale nadal zapewniać klientom usługi rozliczeniowe, wykorzystując ramy rozliczeniowe. Dzięki temu oszczędza się czas i koszty niezbędne do opracowania własnej ekspertyzy rozliczeniowej.

Integracja aplikacji: Podsumowanie


Jeśli chcesz dodać funkcje do swojej aplikacji, integracja aplikacji może zaoszczędzić czas i pieniądze. Jeśli jesteś w stanie udostępnić framework innym osobom, taka integracja aplikacji może być dla Ciebie szansą na zwiększenie przychodów lub pomóc w poszerzeniu zasięgu Twojej aplikacji lub platformy. Skontaktuj się z nami, jeśli chcesz dowiedzieć się więcej.