Maison > interface Web > js tutoriel > le corps du texte

Épisode The Guardian of Codex – Adopter les PWA et les micro-frontends

Patricia Arquette
Libérer: 2024-11-17 16:33:01
original
619 Les gens l'ont consulté

Episode  The Guardian of Codex – Embracing PWAs and Micro-Frontends

Épisode 12 : Le gardien du Codex – Adopter les PWA et les micro-frontends

Arin se tenait au bord de la vaste frontière du Codex, là où la lueur de ses champs de données lumineux rencontrait l’étendue profonde de l’espace. Le bourdonnement des nœuds interconnectés bourdonnait sous ses pieds, résonnant de vie et de potentiel. Aujourd'hui, c'était différent ; ce n’était pas juste un autre jour au sein du Corps de Défense Planétaire (PDC). La mission ne se limitait pas à se défendre contre des adversaires : il s'agissait de renforcer la résilience du Codex, de garantir qu'il puisse résister aux perturbations tout en offrant des expériences fluides aux utilisateurs qui en dépendaient.

La voix du capitaine Lifecycle traverse le silence, calme mais sévère. « Cadet Arin, rappelez-vous : la résilience n'est pas seulement une question de pouvoir ; c’est une question d’adaptabilité. Les utilisateurs sont l’essence du Codex et leur expérience doit être sauvegardée à tout prix. »

Arin prit une profonde inspiration, ses yeux scrutant l'horizon scintillant. La tâche était claire : renforcer le Codex avec des outils et des techniques qui renforceraient ses défenses et maintiendraient la confiance des utilisateurs.


1. La puissance des applications Web progressives (PWA)

Arin a fouillé les archives du Codex, où étaient stockés les anciens modèles d'applications Web progressives (PWA). Elle savait que les PWA n'étaient pas de simples applications : elles étaient des gardiens qui se dressaient entre le Codex et le chaos de la déconnexion. Ces constructions puissantes ont permis des capacités hors ligne, garantissant que les utilisateurs continueraient d'accéder aux ressources essentielles même lorsque les chemins de données faiblissaient.

Qu'est-ce qu'une PWA ?
Une Progressive Web App (PWA) exploite les service Workers et les manifestes pour proposer des applications Web qui se comportent comme des applications natives, permettant une utilisation hors ligne, des temps de chargement plus rapides et une installabilité.

Exemple de code : configuration du Service Worker
Arin a commencé à créer le service worker, le gardien silencieux qui mettait en cache les actifs et fournissait une assistance hors ligne transparente :

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => {
        console.log('Service Worker registered with scope:', registration.scope);
      })
      .catch(error => {
        console.error('Service Worker registration failed:', error);
      });
  });
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

La lumière du code du technicien de service brillait alors qu'Arin l'intégrait dans les défenses du Codex, garantissant que les utilisateurs ne seraient jamais confrontés au vide, même en l'absence de connectivité réseau.

Avantages :

  • Les capacités hors ligne maintiennent la convivialité de l'application même lorsque l'accès au réseau est interrompu.
  • Temps de chargement plus rapides grâce aux ressources mises en cache.
  • engagement des utilisateurs amélioré grâce à une expérience de type natif.

Inconvénients :

  • Complexité de la gestion : Tenir les travailleurs des services informés peut être un défi.
  • Les Les problèmes de débogage liés à la mise en cache peuvent être difficiles à résoudre.

Quand utiliser :

  • Lors de la création d'applications qui doivent rester fonctionnelles dans des zones à faible connectivité.
  • Pour les applications à fort trafic où l'engagement des utilisateurs est une priorité.

Quand éviter :

  • Pour les applications Web simples où les fonctionnalités hors ligne ne sont pas nécessaires.
  • Si la complexité supplémentaire de la gestion des travailleurs des services l'emporte sur les avantages.

2. La force modulaire des micro-frontends

Les yeux d'Arin scrutèrent la vaste et tentaculaire interface du Codex, chaque secteur bourdonnant de sa signature énergétique unique. La planète était devenue complexe au fil du temps, chaque ajout rendant sa maintenance plus difficile. Elle a rappelé les enseignements des Builders of Scalability : « Diviser pour régner. Chaque partie doit pouvoir être autonome tout en fonctionnant harmonieusement. »

Que sont les micro-frontends ?
Les micro-frontends étendent le principe de l'architecture des microservices au frontend, permettant aux équipes de diviser une application monolithique en unités plus petites et déployables indépendamment qui fonctionnent comme une seule application cohérente.

Cette approche est particulièrement bénéfique pour les applications à grande échelle où plusieurs équipes travaillent sur différentes parties de l'application. Les micro-frontends permettent à chaque équipe de conserver son autonomie, de mettre à jour et de déployer sa part sans affecter l'ensemble de l'application.

Principaux avantages des micro-frontends :

  • Autonomie des équipes et développement parallèle.
  • Les déploiements indépendants garantissent des mises à jour rapides sans temps d'arrêt.
  • Architecture évolutive qui peut évoluer avec les besoins de l'application.

Défis potentiels :

  • Complexité de la communication entre micro-frontends.
  • La gestion de l'état partagé peut entraîner une complexité accrue du code.
  • Duplication des dépendances si elle n'est pas soigneusement gérée.

Le cas de test : Application Pokémon :
Arin a imaginé une Application Pokémon dans laquelle différentes parties, telles que Poke Battle et Pokedex, ont été développées en tant que micro-interfaces distinctes. Cette division garantirait que les mises à jour du Pokedex n’affecteraient pas le Poke Battle et vice versa.

Configuration de l'application conteneur :
L'application conteneur agit comme un orchestrateur qui relie les micro-interfaces entre elles. Vous trouverez ci-dessous un exemple de configuration avec Webpack Module Federation pour l'intégration de micro-frontends.

container-app/package.json :

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => {
        console.log('Service Worker registered with scope:', registration.scope);
      })
      .catch(error => {
        console.error('Service Worker registration failed:', error);
      });
  });
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

container-app/webpack.config.js :

{
  "name": "container-app",
  "dependencies": {
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-router-dom": "^5.2.0"
  },
  "scripts": {
    "start": "webpack serve --config webpack.config.js"
  }
}
Copier après la connexion
Copier après la connexion

container-app/src/index.js :

const HtmlWebpackPlugin = require('html-webpack-plugin');
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  entry: './src/index.js',
  mode: 'development',
  devServer: {
    port: 8080,
  },
  output: {
    publicPath: 'http://localhost:8080/',
  },
  plugins: [
    new ModuleFederationPlugin({
      name: 'container',
      remotes: {
        pokebattle: 'pokebattle@http://localhost:8081/remoteEntry.js',
        pokedex: 'pokedex@http://localhost:8082/remoteEntry.js',
      },
      shared: ['react', 'react-dom']
    }),
    new HtmlWebpackPlugin({
      template: './public/index.html',
    }),
  ],
};
Copier après la connexion
Copier après la connexion

Création de la micro-frontend Poke Battle :
La micro-frontend Poke Battle possède sa propre base de code et sa propre configuration Webpack.

pokebattle/package.json :

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => {
        console.log('Service Worker registered with scope:', registration.scope);
      })
      .catch(error => {
        console.error('Service Worker registration failed:', error);
      });
  });
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

pokebattle/webpack.config.js:

{
  "name": "container-app",
  "dependencies": {
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-router-dom": "^5.2.0"
  },
  "scripts": {
    "start": "webpack serve --config webpack.config.js"
  }
}
Copier après la connexion
Copier après la connexion

pokebattle/src/App.js:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  entry: './src/index.js',
  mode: 'development',
  devServer: {
    port: 8080,
  },
  output: {
    publicPath: 'http://localhost:8080/',
  },
  plugins: [
    new ModuleFederationPlugin({
      name: 'container',
      remotes: {
        pokebattle: 'pokebattle@http://localhost:8081/remoteEntry.js',
        pokedex: 'pokedex@http://localhost:8082/remoteEntry.js',
      },
      shared: ['react', 'react-dom']
    }),
    new HtmlWebpackPlugin({
      template: './public/index.html',
    }),
  ],
};
Copier après la connexion
Copier après la connexion

Configuration du micro-frontend Pokedex :
pokedex/package.json:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';

const PokeBattle = React.lazy(() => import('pokebattle/App'));
const Pokedex = React.lazy(() => import('pokedex/App'));

function App() {
  return (
    <Router>
      <React.Suspense fallback={<div>Loading...</div>}>
        <Switch>
          <Route path="/pokebattle" component={PokeBattle} />
          <Route path="/pokedex" component={Pokedex} />
        </Switch>
      </React.Suspense>
    </Router>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));
Copier après la connexion

pokedex/webpack.config.js:

{
  "name": "pokebattle",
  "dependencies": {
    "react": "^17.0.2",
    "react-dom": "^17.0.2"
  },
  "scripts": {
    "start": "webpack serve --config webpack.config.js"
  }
}
Copier après la connexion

pokedex/src/App.js:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  entry: './src/index.js',
  mode: 'development',
  devServer: {
    port: 8081,
  },
  output: {
    publicPath: 'http://localhost:8081/',
  },
  plugins: [
    new ModuleFederationPlugin({
      name: 'pokebattle',
      filename: 'remoteEntry.js',
      exposes: {
        './App': './src/App',
      },
      shared: ['react', 'react-dom']
    }),
    new HtmlWebpackPlugin({
      template: './public/index.html',
    }),
  ],
};
Copier après la connexion

Révélation d'Arin :
Arin resta en retrait, regardant la nouvelle architecture micro-frontend du Codex prendre vie. Chaque segment était une partie indépendante mais harmonieuse d’un tout plus vaste. « Le Codex est désormais plus fort », pensa-t-elle. « Chaque partie peut se battre, s'adapter et évoluer seule. »

Avantages :

  • L'autonomie des équipes permet à plusieurs équipes de se développer de manière indépendante.
  • Les déploiements indépendants signifient des mises à jour rapides et isolées.
  • L'architecture modulaire prend en charge des bases de code évolutives et maintenables.

Inconvénients :

  • La communication entre les micro-frontends peut être complexe.
  • La gestion des dépendances partagées peut conduire à des duplications si elle n'est pas gérée correctement.
  • La configuration initiale est plus complexe que les applications traditionnelles d'une seule page.

Quand utiliser :

  • Applications à grande échelle qui nécessitent des équipes distinctes travaillant sur différentes fonctionnalités.
  • Quand la modularité et les cycles de déploiement isolés sont bénéfiques.

Quand éviter :

  • Petites applications dont la complexité n'est pas justifiée.
  • Si votre équipe n'est pas équipée pour gérer les nuances de la communication micro-frontend.

3. Améliorer l'UX avec le fractionnement de code et le chargement paresseux

Arin se tourna vers le capitaine Lifecycle, qui hocha la tête avec approbation. « Les utilisateurs doivent sentir que le Codex est toujours réactif et toujours préparé », a-t-il déclaré. Le Le fractionnement du code et le le chargement paresseux étaient les clés pour garantir cela. En chargeant uniquement ce qui était nécessaire, Codex a pu conserver son agilité et garder les utilisateurs immergés dans leur expérience.

Exemple de fractionnement de code :

import React from 'react';

function App() {
  return (
    <div>
      <h1>Poke Battle Arena</h1>
      <p>Choose your Pokémon and battle your friends!</p>
    </div>
  );
}

export default App;
Copier après la connexion

Avantages :

  • Temps de chargement initial amélioré, car seul le code essentiel est chargé.
  • Expérience utilisateur améliorée avec des temps de chargement et de rendu réduits.

Inconvénients :

  • Gérer les états de chargement devient nécessaire.
  • Le débogage des composants chargés paresseux peut être plus complexe.

Quand utiliser :

  • Pour les applications comportant des composants volumineux qui n'ont pas besoin d'être chargés initialement.
  • Lorsque l'optimisation des performances et des interactions plus rapides est essentielle.

Quand éviter :

  • Pour les applications simples où le fractionnement n'apportera pas d'améliorations significatives des performances.
  • Lorsqu'il s'agit d'une complexité d'application minimale où le chargement paresseux ajoute une surcharge inutile.

Points clés à retenir

Concept Definition Pros Cons When to Use When to Avoid
Progressive Web Apps (PWAs) Web apps with offline capabilities and native-like features. Offline access, improved performance, user engagement. Complex service worker management, debugging challenges. For apps needing offline capabilities and quick load. Apps that don’t benefit from offline or native features.
Micro-Frontends Independent, deployable micro-apps forming one application. Team autonomy, independent deployments, modular architecture. Communication complexity, potential dependency duplication. Large apps needing scalable, modular development. Simple apps where the complexity isn’t justified.
Code Splitting Splitting code into smaller chunks that load on demand. Reduces initial load time, improves UX. Requires managing loading states, can complicate debugging. Apps with large, seldom-used components. Lightweight apps with minimal performance concerns.
Concept
Définition

Avantages Inconvénients Quand utiliser Quand éviter
ête> Applications Web progressives (PWA) Applications Web dotées de fonctionnalités hors ligne et de fonctionnalités natives. Accès hors ligne, performances améliorées, engagement des utilisateurs. Gestion complexe des techniciens de service, défis de débogage. Pour les applications nécessitant des fonctionnalités hors ligne et un chargement rapide. Applications qui ne bénéficient pas de fonctionnalités hors ligne ou natives. Micro-Frontends Micro-applications indépendantes et déployables formant une seule application. Autonomie des équipes, déploiements indépendants, architecture modulaire. Complexité de la communication, duplication potentielle des dépendances. Applications volumineuses nécessitant un développement modulaire et évolutif. Des applications simples dont la complexité n'est pas justifiée. Partage de code Diviser le code en morceaux plus petits qui se chargent à la demande. Réduit le temps de chargement initial, améliore l'UX. Nécessite la gestion des états de chargement, peut compliquer le débogage. Applications avec des composants volumineux et rarement utilisés. Applications légères avec des problèmes de performances minimes. Arin recula, regardant le Codex scintiller d'une énergie renouvelée. Il ne s’agissait plus d’un monolithe mais d’une série de nœuds solides et interconnectés, résilients, adaptatifs et prêts à relever les défis à venir. À chaque amélioration, elle réalisa que la véritable défense n’était pas seulement une question de force brute ; il s’agissait d’une adaptation intelligente et stratégique. « Les utilisateurs seront toujours en sécurité », murmura-t-elle, sentant le pouls du Codex s'aligner sur sa détermination.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal