suchen
HeimWeb-Frontendjs-TutorialBeherrschen Sie das Lazy-Loading-Konzept in React Native/ReactJS

Lazy Loading ist ein Entwurfsmuster, bei dem Ressourcen nur dann geladen werden, wenn sie benötigt werden. Dies ist vorteilhaft, um die anfängliche Ladezeit einer React Native-Anwendung zu verbessern, den Speicherverbrauch zu reduzieren und die Gesamtleistung zu verbessern.

Master lazy loading concept in React Native/ReactJS

Warum Lazy Loading?

  1. Leistungsoptimierung: Verhindert das Laden unnötiger Ressourcen beim ersten Start der App, was die Ladezeit erheblich verkürzen kann.
  2. Reduzierte Speichernutzung: Lazy Loading verhindert, dass große Ressourcen wie Bilder, Komponenten oder externe Bibliotheken im Speicher bleiben, wenn sie nicht benötigt werden.
  3. Verbesserte Benutzererfahrung: Das Laden von Ressourcen bei Bedarf sorgt für eine reibungslosere Navigation und Interaktion.

1) Anwendungsfälle von Lazy Loading in React Native-Bildschirmen/-Komponenten

  1. Lazy Loading Screens (Code-Splitting):
    In React Native wird Lazy Loading normalerweise für Komponenten verwendet, insbesondere wenn Sie verschiedene Bildschirme haben, die der Benutzer möglicherweise nicht häufig besucht. Durch langsames Laden dieser Bildschirme reduzieren Sie die anfängliche Paketgröße.

  2. Lazy Loading mit React.lazy() und Suspense:
    React hat die Funktion React.lazy() eingeführt, um das verzögerte Laden von Komponenten zu ermöglichen. Um Lazy Loading zu nutzen, wird Suspense als Fallback verwendet, bis die Komponente geladen wird.

Normaler Gebrauch

Bei normaler Nutzung werden alle Ressourcen, Komponenten, Bibliotheken und Daten im Voraus geladen, wenn die App gestartet wird. Dieser Ansatz eignet sich gut für kleine Anwendungen, kann jedoch mit zunehmender Größe der App ineffizient und ressourcenintensiv werden, was sich auf Leistung und Ladezeiten auswirkt.

Beispiel: Normales Laden von Komponenten

import React from 'react';
import HomeScreen from './screens/HomeScreen';
import ProfileScreen from './screens/ProfileScreen';

const App = () => {
  return (
    
      <homescreen></homescreen>
      <profilescreen></profilescreen>
    >
  );
};

export default App;

Erklärung:

  • In diesem Beispiel werden sowohl HomeScreen- als auch ProfileScreen-Komponenten im Voraus importiert und geladen, unabhängig davon, ob der Benutzer zu ihnen navigiert oder nicht.
  • Dies erhöht die anfängliche Ladezeit, da alle Komponenten gebündelt und auf einmal geladen werden.

Lazy Loading-Nutzung

Beim verzögerten Laden werden Komponenten, Bibliotheken oder Daten nur dann geladen, wenn sie benötigt werden. Dies verbessert die Leistung, indem die anfängliche Ladezeit und die Speichernutzung reduziert werden, da nur die erforderlichen Ressourcen bei Bedarf geladen werden.

Beispiel: Lazy Loading-Komponenten

import React, { Suspense, lazy } from 'react';
import { ActivityIndicator } from 'react-native';

const HomeScreen = lazy(() => import('./screens/HomeScreen'));
const ProfileScreen = lazy(() => import('./screens/ProfileScreen'));

const App = () => {
  return (
    <suspense fallback="{<ActivityIndicator" size="large" color="#0000ff"></suspense>}>
      <homescreen></homescreen>
      <profilescreen></profilescreen>
    
  );
};

export default App;

Erklärung:

  • In diesem Beispiel werden HomeScreen und ProfileScreen träge mit React.lazy() geladen.
  • Bis diese Komponenten geladen sind, wird ein Fallback (ActivityIndicator) angezeigt.
  • Dies verkürzt die anfängliche Ladezeit der App, da Komponenten erst geladen werden, wenn sie gerendert werden.

Unterschiede zwischen normalem und verzögertem Laden

Funktion Normale Nutzung Lazy Loading
Feature Normal Usage Lazy Loading
Loading Strategy Everything is loaded upfront when the app starts. Components, resources, or data are loaded only when needed.
Initial Load Time Higher, as all resources are loaded at once. Lower, as only essential components are loaded upfront.
Memory Usage Higher, as all components and resources are loaded into memory. Lower, as only necessary components are loaded into memory.
User Experience Slower startup but smoother transitions once loaded. Faster startup but slight delay when loading resources.
Best for Small applications with limited components. Large applications where not all components are used initially.
Implementation Simpler, as everything is bundled at once. Requires managing dynamic imports and possibly loading states.
Ladestrategie Alles wird beim Start der App geladen. Komponenten, Ressourcen oder Daten werden nur bei Bedarf geladen. Anfängliche Ladezeit Höher, da alle Ressourcen auf einmal geladen werden. Niedriger, da nur wesentliche Komponenten im Voraus geladen werden. Speichernutzung Höher, da alle Komponenten und Ressourcen in den Speicher geladen werden. Niedriger, da nur notwendige Komponenten in den Speicher geladen werden. Benutzererfahrung Langsamerer Start, aber sanftere Übergänge nach dem Laden. Schnellerer Start, aber leichte Verzögerung beim Laden von Ressourcen. Am besten für Kleine Anwendungen mit begrenzten Komponenten. Große Anwendungen, bei denen zunächst nicht alle Komponenten verwendet werden. Implementierung Einfacher, da alles auf einmal gebündelt ist. Erfordert die Verwaltung dynamischer Importe und möglicherweise das Laden von Zuständen.

2. Lazy Loading in Navigation (React Navigation):

Lazy loading ensures that screens or components are only mounted when they are accessed (when the user navigates to them), thus improving performance, especially in apps with multiple screens.

Example: Lazy Loading in React Navigation (Stack Navigator)

import React, { Suspense, lazy } from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import { NavigationContainer } from '@react-navigation/native';
import { ActivityIndicator } from 'react-native';

// Lazy load screens
const HomeScreen = lazy(() => import('./screens/HomeScreen'));
const ProfileScreen = lazy(() => import('./screens/ProfileScreen'));

const Stack = createStackNavigator();

const App = () => {
  return (
    <navigationcontainer>
      <stack.navigator>
        <stack.screen name="Home" component="{()"> (
            <suspense fallback="{<ActivityIndicator" size="large" color="#0000ff"></suspense>}>
              <homescreen></homescreen>
            
          )}
        />
        <stack.screen name="Profile" component="{()"> (
            <suspense fallback="{<ActivityIndicator" size="large" color="#0000ff"></suspense>}>
              <profilescreen></profilescreen>
            
          )}
        />
      </stack.screen></stack.screen></stack.navigator>
    </navigationcontainer>
  );
};

export default App;

Explanation:

  • In this example, the HomeScreen and ProfileScreen components are lazily loaded using React.lazy().
  • The Suspense component provides a loading indicator (ActivityIndicator) while the components are being loaded.
  • Screens will only load when the user navigates to them, reducing the initial load time.

3. Lazy Loading Images :

In React Native, lazy loading can be achieved using libraries like react-native-fast-image or manually handling image loading by tracking visibility with tools like IntersectionObserver.

a) Using react-native-fast-image

react-native-fast-image is a performant image component that provides built-in lazy loading.

npm install react-native-fast-image

Example: Lazy Loading Images with react-native-fast-image

import React from 'react';
import { View, ScrollView, Text } from 'react-native';
import FastImage from 'react-native-fast-image';

const LazyLoadingImages = () => {
  return (
    <scrollview>
      <text>Scroll down to load images</text>
      <fastimage style="{{" width: height: source="{{" uri: priority: fastimage.priority.normal resizemode="{FastImage.resizeMode.contain}"></fastimage>
      <fastimage style="{{" width: height: source="{{" uri: priority: fastimage.priority.normal resizemode="{FastImage.resizeMode.contain}"></fastimage>
    </scrollview>
  );
};

export default LazyLoadingImages;

Explanation:

  • The FastImage component from react-native-fast-image helps with lazy loading. It loads images only when they are about to be displayed.
  • It also provides efficient caching and priority options, improving performance.

b) Manual Lazy Loading (Visibility Tracking)

In cases where you don't want to use a third-party library, you can implement lazy loading by tracking when an image enters the viewport using tools like IntersectionObserver (web) or a custom scroll listener in React Native.

Example: Lazy Loading with Visibility Tracking (using React Native)

import React, { useState, useEffect } from 'react';
import { View, Image, ScrollView } from 'react-native';

const LazyImage = ({ src, style }) => {
  const [isVisible, setIsVisible] = useState(false);

  const onScroll = (event) => {
    // Implement logic to determine if image is visible based on scroll position
    const { y } = event.nativeEvent.contentOffset;
    if (y > 100) { // Example: load image when scrolled past 100px
      setIsVisible(true);
    }
  };

  return (
    <scrollview onscroll="{onScroll}" scrolleventthrottle="{16}">
      <view>
        {isVisible ? (
          <image source="{{" uri: src style="{style}"></image>
        ) : (
          <view style="{style}"></view>
        )}
      </view>
    </scrollview>
  );
};

const App = () => {
  return (
    <lazyimage src="https://example.com/my-image.jpg" style="{{" width: height:></lazyimage>
  );
};

export default App;

Explanation:

  • The LazyImage component only loads the image once the user has scrolled a certain amount (onScroll event).
  • This approach manually tracks the scroll position and loads the image accordingly.

4. Lazy Loading with Redux (Dynamic Reducers) :

When using Redux, you may want to lazy load certain reducers only when necessary, such as for specific screens or features.

  1. Create a function to inject reducers dynamically.
  2. Add the new reducer to the Redux store when needed (e.g., when a user navigates to a new screen).
  3. Remove the reducer when it is no longer needed (optional).

Example: Lazy Loading Reducers in a React Application with Redux

1. Initial Redux Store Setup

Start by setting up a standard Redux store, but instead of adding all reducers upfront, create an injection method.

import { configureStore, combineReducers } from '@reduxjs/toolkit';

const staticReducers = {
  // Add reducers that are needed from the start
};

export const createReducer = (asyncReducers = {}) => {
  return combineReducers({
    ...staticReducers,
    ...asyncReducers,
  });
};

const store = configureStore({
  reducer: createReducer(),
});

// Store injected reducers here
store.asyncReducers = {};

export default store;

In the above code:

  • staticReducers: Contains reducers that are loaded when the app starts.
  • asyncReducers: This object will contain dynamically injected reducers as they are loaded.

2. Dynamic Reducer Injection Method

Create a helper function to inject new reducers dynamically into the store.

// Helper function to inject a new reducer dynamically
export function injectReducer(key, asyncReducer) {
  if (!store.asyncReducers[key]) {
    store.asyncReducers[key] = asyncReducer;
    store.replaceReducer(createReducer(store.asyncReducers));
  }
}

The injectReducer function checks if a reducer has already been added. If not, it injects it into the store and replaces the current root reducer.

3. Loading Reducer When Needed (Lazy Loading)

Imagine you have a new page or feature that needs its own reducer. You can inject the reducer dynamically when this page is loaded.

import { lazy, Suspense, useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { injectReducer } from './store';
import featureReducer from './features/featureSlice'; // The reducer for this feature

const FeatureComponent = lazy(() => import('./components/FeatureComponent'));

const FeaturePage = () => {
  const dispatch = useDispatch();

  useEffect(() => {
    injectReducer('feature', featureReducer); // Dynamically load the reducer
  }, [dispatch]);

  return (
    <suspense fallback="{<div">Loading...}>
      <featurecomponent></featurecomponent>
    </suspense>
  );
};

export default FeaturePage;

Here:

  • When the FeaturePage component is loaded, the injectReducer function adds the featureReducer dynamically to the Redux store.
  • The Suspense component handles lazy loading of the FeatureComponent.

4. Feature Reducer Example

The reducer for the feature is written as usual, using Redux Toolkit.

import { createSlice } from '@reduxjs/toolkit';

const featureSlice = createSlice({
  name: 'feature',
  initialState: { data: [] },
  reducers: {
    setData: (state, action) => {
      state.data = action.payload;
    },
  },
});

export const { setData } = featureSlice.actions;
export default featureSlice.reducer;

Removing a Reducer (Optional)

You might want to remove a reducer when it's no longer needed, for example, when navigating away from a page.

Here’s how you can remove a reducer:

export function removeReducer(key) {
  if (store.asyncReducers[key]) {
    delete store.asyncReducers[key];
    store.replaceReducer(createReducer(store.asyncReducers));
  }
}

You can call this function when a feature or page is unmounted to remove its reducer from the store.


5. Lazy Loading Libraries/Packages:

If you are using heavy third-party libraries, lazy loading them can help optimize performance.

   import React, { useState } from 'react';

   const HeavyComponent = React.lazy(() => import('heavy-library')); // React.lazy(() => import('moment'))

   const App = () => {
     const [showComponent, setShowComponent] = useState(false);

     return (
       <view>
         <button title="Load Heavy Component" onpress="{()"> setShowComponent(true)} />
         {showComponent && (
           <suspense fallback="{<Text">Loading...}>
             <heavycomponent></heavycomponent>
           </suspense>
         )}
       </button></view>
     );
   };
  1. Lazy Loading Data: You can also implement lazy loading for data fetching, where data is fetched in chunks or when a user scrolls (infinite scroll).

Example: Lazy Loading Data:

   import React, { useState, useEffect } from 'react';
   import { FlatList, ActivityIndicator, Text } from 'react-native';

   const LazyLoadData = () => {
     const [data, setData] = useState([]);
     const [loading, setLoading] = useState(true);

     useEffect(() => {
       fetch('https://api.example.com/data')
         .then(response => response.json())
         .then(json => {
           setData(json);
           setLoading(false);
         });
     }, []);

     if (loading) {
       return <activityindicator></activityindicator>;
     }

     return (
       <flatlist data="{data}" renderitem="{({" item> <text>{item.name}</text>}
         keyExtractor={item => item.id}
       />
     );
   };

   export default LazyLoadData;
</flatlist>

Explanation:

  • Fetching data lazily ensures that the app doesn’t load too much data at once, improving performance and reducing bandwidth usage.

Summary of Use Cases:

  1. Screens/Components: Lazy loading React Native screens or components using React.lazy() and Suspense.
  2. Images: Lazy loading images as they enter the viewport to save memory and bandwidth.
  3. Redux Reducers: Injecting reducers dynamically to reduce the initial store size in Redux.
  4. Libraries: Lazily load third-party libraries or packages to reduce the initial bundle size.
  5. Data: Implement lazy loading for large datasets using techniques like pagination or infinite scrolling.

Lazy loading helps improve the performance, memory usage, and user experience of your React Native app, making it more efficient and responsive for users.

Das obige ist der detaillierte Inhalt vonBeherrschen Sie das Lazy-Loading-Konzept in React Native/ReactJS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Die Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenDie Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenApr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Entmystifizieren JavaScript: Was es tut und warum es wichtig istEntmystifizieren JavaScript: Was es tut und warum es wichtig istApr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Ist Python oder JavaScript besser?Ist Python oder JavaScript besser?Apr 06, 2025 am 12:14 AM

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

Wie installiere ich JavaScript?Wie installiere ich JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript erfordert keine Installation, da es bereits in moderne Browser integriert ist. Sie benötigen nur einen Texteditor und einen Browser, um loszulegen. 1) Führen Sie sie in der Browser -Umgebung durch, indem Sie die HTML -Datei durch Tags einbetten. 2) Führen Sie die JavaScript -Datei nach dem Herunterladen und Installieren von node.js nach dem Herunterladen und Installieren der Befehlszeile aus.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.