<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kirill Novikov</title>
    <description>The latest articles on DEV Community by Kirill Novikov (@kirill3333).</description>
    <link>https://dev.to/kirill3333</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F123092%2Fbbcfc18b-7e30-4d81-ac96-8fec1c83892f.jpeg</url>
      <title>DEV Community: Kirill Novikov</title>
      <link>https://dev.to/kirill3333</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kirill3333"/>
    <language>en</language>
    <item>
      <title>TOP 6 React Native libraries with native performance ⚡️</title>
      <dc:creator>Kirill Novikov</dc:creator>
      <pubDate>Thu, 12 Jan 2023 09:29:39 +0000</pubDate>
      <link>https://dev.to/kirill3333/top-6-react-native-libraries-with-native-performance-33d5</link>
      <guid>https://dev.to/kirill3333/top-6-react-native-libraries-with-native-performance-33d5</guid>
      <description>&lt;p&gt;In this list, you will find well-maintained React Native libraries based on the latest technologies like JSI and new architecture, which allows you to achieve native performance.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;a href="https://github.com/mrousavy/react-native-mmkv" rel="noopener noreferrer"&gt;MMKV&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qvr14i338xghn5hgi6e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qvr14i338xghn5hgi6e.png" alt="react-native-mmkv"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This library uses &lt;a href="https://github.com/Tencent/MMKV" rel="noopener noreferrer"&gt;MMKV&lt;/a&gt; key-value storage and &lt;a href="https://reactnative.dev/architecture/glossary#javascript-interfaces-jsi" rel="noopener noreferrer"&gt;JSI&lt;/a&gt; to communicate between the JS side and the native side very quickly and synchronously. It is a suitable replacement for slow AsyncStorage. Follow &lt;a href="https://github.com/mrousavy/react-native-mmkv/blob/master/docs/MIGRATE_FROM_ASYNC_STORAGE.md" rel="noopener noreferrer"&gt;this guide&lt;/a&gt; to migrate from AsyncStorage and get 30x faster on read and write operations in your app.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;a href="https://shopify.github.io/flash-list/" rel="noopener noreferrer"&gt;FlashList&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdirop0n44iczi8t87mlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdirop0n44iczi8t87mlg.png" alt="flash-list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FlashList is based on &lt;a href="https://github.com/Flipkart/recyclerlistview" rel="noopener noreferrer"&gt;RecyclerListView&lt;/a&gt; but has an API similar to FlatList, which makes migration very simple and has many additional features. For example, FlashList provides &lt;a href="https://shopify.github.io/flash-list/docs/metrics" rel="noopener noreferrer"&gt;metrics API&lt;/a&gt;, which allows you to measure performance problems and find proper params configuration for your list component. Also, it supports animation with Reanimated and layouts like &lt;a href="https://shopify.github.io/flash-list/docs/guides/masonry" rel="noopener noreferrer"&gt;Masonry&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. &lt;a href="https://docs.swmansion.com/react-native-reanimated/" rel="noopener noreferrer"&gt;Reanimated 2&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finm1x3b4625zyuyn4ahs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finm1x3b4625zyuyn4ahs.png" alt="Reanimated 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React Native provides Animation API, and even some properties like &lt;code&gt;opacity&lt;/code&gt; or &lt;code&gt;transform&lt;/code&gt; can be calculated on the native side when you use &lt;a href="https://reactnative.dev/docs/0.69/animations#using-the-native-driver" rel="noopener noreferrer"&gt;useNativeDriver&lt;/a&gt;.&lt;br&gt;
Reanimated solves this problem by moving animation calculation to a separate JS thread which is running on the UI thread. It means that your main JS thread will always be available, even if you have a complex animation. In Reanimated terms, it is called &lt;a href="https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/worklets" rel="noopener noreferrer"&gt;worklets&lt;/a&gt; - pieces of JS, which can be called from separate JS threads. Reanimated contains a lot of useful functions and hooks for building animation and hiding the complexity of using worklets inside it.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. &lt;a href="https://shopify.github.io/react-native-skia/" rel="noopener noreferrer"&gt;Skia&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydrxwlxvtuq4920b56ws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydrxwlxvtuq4920b56ws.png" alt="Skia"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need complex animations or you want to animate something besides native components, Skia is your choice. &lt;a href="https://skia.org/about/" rel="noopener noreferrer"&gt;Skia&lt;/a&gt; is a base rendering engine for Flutter and Chrome written in C++. React Native version provides access to Skia API using direct JSI calls, which makes it close to native performance with minimum overhead. As a result, you can build animations like &lt;a href="https://github.com/mateoguzmana/react-native-fiesta" rel="noopener noreferrer"&gt;this&lt;/a&gt;: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firknqwamvshxcs1dsz7o.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firknqwamvshxcs1dsz7o.gif" alt="Skia animation example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  5. &lt;a href="https://github.com/ospfranco/react-native-quick-sqlite" rel="noopener noreferrer"&gt;Quick SQLite&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1ex2yuqhv6fz4ie8te4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1ex2yuqhv6fz4ie8te4.png" alt="Quick SQLite"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This SQLite wrapper uses JSI and avoids RN bridge overhead with serialization/deserialization. Also, you can use compile-time options, which allow you to set up SQLite instances precisely. If you use an old wrapper with the bridge, you can replace it with this library because it supports the &lt;a href="https://github.com/ospfranco/react-native-quick-sqlite#loading-existing-dbs" rel="noopener noreferrer"&gt;existing DB&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. &lt;a href="https://github.com/mrousavy/react-native-vision-camera" rel="noopener noreferrer"&gt;Vision Camera&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ofr4ay5269voyrx9fyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ofr4ay5269voyrx9fyj.png" alt="Vision Camera"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vision Camera is a modern replacement for React Native Camera. It uses JSI instead of the bridge and provides a Frame processor feature. Using Frame processor, you can run small JS functions and native plugins to process camera results in real-time. Examples of these plugins are QR detectors, ML Vision with face or object detections and OCR. The complete list of plugins is &lt;a href="https://mrousavy.com/react-native-vision-camera/docs/guides/frame-processor-plugin-list" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>performance</category>
      <category>jsi</category>
      <category>react</category>
    </item>
  </channel>
</rss>
