


Implémenter le chargement paresseux de Vue avec la barre de progression
La colonne Vue.js suivante vous présentera comment ajouter une barre de progression au chargement paresseux de Vue. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Introduction
Habituellement, lors de l'écriture d'une application monopage (SPA) avec Vue.js, lorsque la page est chargée, toutes les ressources requises telles que JavaScript et Fichiers CSS) seront chargés ensemble. Cela peut conduire à une mauvaise expérience utilisateur lorsque vous travaillez avec des fichiers volumineux.
Avec Webpack, vous pouvez charger des pages à la demande dans Vue.js en utilisant la fonction import()
au lieu du mot-clé import
.
Pourquoi charger à la demande ?
La manière typique dont SPA fonctionne dans Vue.js est de regrouper toutes les fonctions et ressources et de les fournir ensemble, afin que les utilisateurs puissent utiliser votre application sans actualiser la page. Si vous ne concevez pas explicitement votre application pour charger des pages à la demande, toutes les pages seront chargées en même temps ou une grande quantité de mémoire sera utilisée à l'avance pour un préchargement inutile.
Cela est très préjudiciable aux grands SPA comportant de nombreuses pages et entraînera une mauvaise expérience utilisateur lors de l'utilisation de téléphones mobiles bas de gamme et de faibles vitesses de réseau. Avec le chargement à la demande, les utilisateurs n'auront pas besoin de télécharger des ressources dont ils n'ont pas actuellement besoin.
Vue.js ne fournit aucun contrôle lié à l'indicateur de chargement pour les modules dynamiques. Même si la prélecture et le préchargement sont effectués, il n'y a pas d'espace correspondant pour informer l'utilisateur du processus de chargement, il est donc nécessaire d'améliorer l'expérience utilisateur en ajoutant une barre de progression.
Préparer le projet
Vous avez d'abord besoin d'un moyen pour que la barre de progression communique avec Vue Router. Le Mode bus événement est plus adapté.
Le bus d'événements est un singleton d'une instance Vue. Étant donné que toutes les instances Vue disposent d'un système d'événements utilisant $on
et $emit
, vous pouvez l'utiliser pour diffuser des événements n'importe où dans votre application.
Créez d'abord un nouveau fichier components
dans le répertoire eventHub.js
:
import Vue from 'vue' export default new Vue()
Ensuite, configurez Webpack pour désactiver la prélecture et le préchargement afin que vous puissiez le faire individuellement pour chaque fonction Opération de classe, bien sûr vous pouvez également le désactiver globalement. Créez un fichier vue.config.js
dans le dossier racine et ajoutez la configuration appropriée pour désactiver la prélecture et le préchargement :
module.exports = { chainWebpack: (config) => { // 禁用预取和预加载 config.plugins.delete('prefetch') config.plugins.delete('preload') }, }
Ajouter des routes et des pages
Installez le routeur Vue avec npx
et utilisez :
$ npx vue add router
Modifiez le fichier du routeur situé sous router/index.js
et mettez à jour le routage afin que l'instruction import()
puisse être remplacée par une fonction import
:
La configuration par défaut suivante :
import About from '../views/About.vue' { path: '/about', name: 'About', component: About },
Remplacez-le par :
{ path: '/about', name: 'About', component: () => import('../views/About.vue') },
Si vous souhaitez avoir la possibilité de charger certaines pages à la demande, plutôt que de désactiver la prélecture et le préchargement globalement, vous pouvez utiliser une annotation Webpack spéciale et ne pas configurer Webpack dans vue.config.js
:
import( /* webpackPrefetch: true */ /* webpackPreload: true */ '../views/About.vue' )
et import()
est que les modules ES chargés par import
sont chargés au moment de l'exécution et les modules ES chargés par import()
sont chargés au moment de la compilation. Cela signifie que vous pouvez utiliser import
pour retarder le chargement du module et ne le charger que lorsque cela est nécessaire. import()
vraiment créer une barre de progression. Il n’existe également aucun moyen de vérifier le chargement de la page. Mais vous pouvez créer une barre de progression et la terminer au chargement de la page.
Comme cela ne reflète pas vraiment les progrès, les progrès représentés sautent simplement de manière aléatoire. Installez d'abord, car ce package sera utilisé pour générer des nombres aléatoires pendant le processus de génération de la barre de progression : lodash.random
$ npm i lodash.random
: components/ProgressBar.vue
<template> <p> </p> <p> </p> <p></p> <p></p> </template>
et random
dans le script, qui seront utilisés plus tard : $eventHub
<script> import random from 'lodash.random' import $eventHub from '../components/eventHub' </script>
// 假设加载将在此时间内完成。 const defaultDuration = 8000 // 更新频率 const defaultInterval = 1000 // 取值范围 0 - 1. 每个时间间隔进度增长多少 const variation = 0.5 // 0 - 100. 进度条应该从多少开始。 const startingPoint = 0 // 限制进度条到达加载完成之前的距离 const endingPoint = 90
export default { name: 'ProgressBar', data: () => ({ isLoading: true, // 加载完成后,开始逐渐消失 isVisible: false, // 完成动画后,设置 display: none progress: startingPoint, timeoutId: undefined, }), mounted() { $eventHub.$on('asyncComponentLoading', this.start) $eventHub.$on('asyncComponentLoaded', this.stop) }, methods: { start() { this.isLoading = true this.isVisible = true this.progress = startingPoint this.loop() }, loop() { if (this.timeoutId) { clearTimeout(this.timeoutId) } if (this.progress >= endingPoint) { return } const size = (endingPoint - startingPoint) / (defaultDuration / defaultInterval) const p = Math.round(this.progress + random(size * (1 - variation), size * (1 + variation))) this.progress = Math.min(p, endingPoint) this.timeoutId = setTimeout( this.loop, random(defaultInterval * (1 - variation), defaultInterval * (1 + variation)) ) }, stop() { this.isLoading = false this.progress = 100 clearTimeout(this.timeoutId) const self = this setTimeout(() => { if (!self.isLoading) { self.isVisible = false } }, 200) }, }, }
, utilisez le bus d'événements pour écouter le chargement des composants asynchrones. Une fois que l'itinéraire nous indique que nous avons navigué vers une page qui n'a pas encore été chargée, l'animation de chargement démarrera. mounted()
<style> .loading-container { font-size: 0; position: fixed; top: 0; left: 0; height: 5px; width: 100%; opacity: 0; display: none; z-index: 100; transition: opacity 200; } .loading-container.visible { display: block; } .loading-container.loading { opacity: 1; } .loader { background: #23d6d6; display: inline-block; height: 100%; width: 50%; overflow: hidden; border-radius: 0 0 5px 0; transition: 200 width ease-out; } .loader > .light { float: right; height: 100%; width: 20%; background-image: linear-gradient(to right, #23d6d6, #29ffff, #23d6d6); animation: loading-animation 2s ease-in infinite; } .glow { display: inline-block; height: 100%; width: 30px; margin-left: -30px; border-radius: 0 0 5px 0; box-shadow: 0 0 10px #23d6d6; } @keyframes loading-animation { 0% { margin-right: 100%; } 50% { margin-right: 100%; } 100% { margin-right: -10%; } } </style>
au ProgressBar
ou au composant de mise en page, tant qu'il est dans le même composant que la vue d'itinéraire, il sera dans l'application est disponible tout au long du cycle de vie : App.vue
<template> <p> <progress-bar></progress-bar> <router-view></router-view> <!--- 你的其它组件 --> </p> </template> <script> import ProgressBar from './components/ProgressBar.vue' export default { components: { ProgressBar }, } </script>
écoute sur le bus d'événements les événements de chargement de composants asynchrones. Une animation devrait être déclenchée lorsque certaines ressources sont chargées de cette manière. Ajoutez maintenant un garde de route à l'itinéraire pour recevoir les événements suivants : ProgressBar
import $eventHub from '../components/eventHub' router.beforeEach((to, from, next) => { if (typeof to.matched[0]?.components.default === 'function') { $eventHub.$emit('asyncComponentLoading', to) // 启动进度条 } next() }) router.beforeResolve((to, from, next) => { $eventHub.$emit('asyncComponentLoaded') // 停止进度条 next() })
为了检测页面是否被延迟加载了,需要检查组件是不是被定义为动态导入的,也就是应该为 component:() => import('...')
而不是component:MyComponent
。
这是通过 typeof to.matched[0]?.components.default === 'function'
完成的。带有 import
语句的组件不会被归为函数。
总结
在本文中,我们禁用了在 Vue 应用中的预取和预加载功能,并创建了一个进度条组件,该组件可显示以模拟加载页面时的实际进度。
原文:https://stackabuse.com/lazy-loading-routes-with-vue-router/
作者:Stack Abuse
相关推荐:
更多编程相关知识,请访问:编程入门!!
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP et Vue : une combinaison parfaite d'outils de développement front-end À l'ère actuelle de développement rapide d'Internet, le développement front-end est devenu de plus en plus important. Alors que les utilisateurs ont des exigences de plus en plus élevées en matière d’expérience des sites Web et des applications, les développeurs front-end doivent utiliser des outils plus efficaces et plus flexibles pour créer des interfaces réactives et interactives. En tant que deux technologies importantes dans le domaine du développement front-end, PHP et Vue.js peuvent être considérés comme une arme parfaite lorsqu'ils sont associés. Cet article explorera la combinaison de PHP et Vue, ainsi que des exemples de code détaillés pour aider les lecteurs à mieux comprendre et appliquer ces deux éléments.

Lors des entretiens de développement front-end, les questions courantes couvrent un large éventail de sujets, notamment les bases HTML/CSS, les bases JavaScript, les frameworks et les bibliothèques, l'expérience du projet, les algorithmes et les structures de données, l'optimisation des performances, les requêtes inter-domaines, l'ingénierie front-end, les modèles de conception et les nouvelles technologies et tendances. Les questions de l'intervieweur sont conçues pour évaluer les compétences techniques du candidat, son expérience en matière de projet et sa compréhension des tendances du secteur. Par conséquent, les candidats doivent être parfaitement préparés dans ces domaines pour démontrer leurs capacités et leur expertise.

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Django est un framework d'application Web écrit en Python qui met l'accent sur un développement rapide et des méthodes propres. Bien que Django soit un framework Web, pour répondre à la question de savoir si Django est un front-end ou un back-end, vous devez avoir une compréhension approfondie des concepts de front-end et de back-end. Le front-end fait référence à l'interface avec laquelle les utilisateurs interagissent directement, et le back-end fait référence aux programmes côté serveur. Ils interagissent avec les données via le protocole HTTP. Lorsque le front-end et le back-end sont séparés, les programmes front-end et back-end peuvent être développés indépendamment pour mettre en œuvre respectivement la logique métier et les effets interactifs, ainsi que l'échange de données.

En tant que langage de programmation rapide et efficace, le langage Go est très populaire dans le domaine du développement back-end. Cependant, peu de gens associent le langage Go au développement front-end. En fait, l’utilisation du langage Go pour le développement front-end peut non seulement améliorer l’efficacité, mais également ouvrir de nouveaux horizons aux développeurs. Cet article explorera la possibilité d'utiliser le langage Go pour le développement front-end et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre ce domaine. Dans le développement front-end traditionnel, JavaScript, HTML et CSS sont souvent utilisés pour créer des interfaces utilisateur.

Combinaison de Golang et de la technologie front-end : pour explorer le rôle de Golang dans le domaine front-end, des exemples de code spécifiques sont nécessaires. Avec le développement rapide d'Internet et des applications mobiles, la technologie front-end est devenue de plus en plus importante. Dans ce domaine, Golang, en tant que puissant langage de programmation back-end, peut également jouer un rôle important. Cet article explorera comment Golang est combiné avec la technologie front-end et démontrera son potentiel dans le domaine front-end à travers des exemples de code spécifiques. Le rôle de Golang dans le domaine front-end est celui d'un outil efficace, concis et facile à apprendre.

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

Django : Un framework magique capable de gérer à la fois le développement front-end et back-end ! Django est un framework d'application Web efficace et évolutif. Il est capable de prendre en charge plusieurs modèles de développement Web, notamment MVC et MTV, et peut facilement développer des applications Web de haute qualité. Django prend non seulement en charge le développement back-end, mais peut également créer rapidement des interfaces frontales et obtenir un affichage de vue flexible via un langage de modèle. Django combine le développement front-end et le développement back-end dans une intégration transparente, afin que les développeurs n'aient pas à se spécialiser dans l'apprentissage.
