Table des matières
Introduction
Pourquoi charger à la demande ?
Préparer le projet
Ajouter des routes et des pages
总结
Maison interface Web Voir.js Implémenter le chargement paresseux de Vue avec la barre de progression

Implémenter le chargement paresseux de Vue avec la barre de progression

Oct 28, 2020 pm 05:36 PM
javascript vue.js 前端

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.

Implémenter le chargement paresseux de Vue avec la barre de progression

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()
Copier après la connexion

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')
    },
}
Copier après la connexion

Ajouter des routes et des pages

Installez le routeur Vue avec npx et utilisez :

$ npx vue add router
Copier après la connexion

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
},
Copier après la connexion

Remplacez-le par :

{
    path: '/about',
    name: 'About',
    component: () => import('../views/About.vue')
},
Copier après la connexion

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'
)
Copier après la connexion

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()

Mise en place d'une barre de progression

Comme nous ne pouvons pas estimer avec précision le temps de chargement (ou le chargement complet) de la page, nous ne pouvons pas

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
Copier après la connexion
Ensuite, créez un composant Vue

 : components/ProgressBar.vue

<template>
    <p>
        </p>
<p>
            </p>
<p></p>
        
        <p></p>
    
</template>
Copier après la connexion
Ensuite, ajoutez un script au composant. Importez d'abord

et random dans le script, qui seront utilisés plus tard : $eventHub

<script>
import random from &#39;lodash.random&#39;
import $eventHub from &#39;../components/eventHub&#39;
</script>
Copier après la connexion
Après l'importation, définissez quelques variables dans le script qui seront utilisées plus tard :

// 假设加载将在此时间内完成。
const defaultDuration = 8000 
// 更新频率
const defaultInterval = 1000 
// 取值范围 0 - 1. 每个时间间隔进度增长多少
const variation = 0.5 
// 0 - 100. 进度条应该从多少开始。
const startingPoint = 0 
// 限制进度条到达加载完成之前的距离
const endingPoint = 90
Copier après la connexion
puis code à implémenter La logique du chargement asynchrone des composants :

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)
        },
    },
}
Copier après la connexion
Dans la fonction

, 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()

Enfin, ajoutez un peu de style :

<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>
Copier après la connexion
Enfin, ajoutez

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 &#39;./components/ProgressBar.vue&#39;
export default {
       components: { ProgressBar },
}
</script>
Copier après la connexion
Ensuite, vous pouvez voir une barre de progression fluide en haut de la page :

Implémenter le chargement paresseux de Vue avec la barre de progression

Déclenchez la barre de progression pour les paresseux chargement

Maintenant

é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()
})
Copier après la connexion

为了检测页面是否被延迟加载了,需要检查组件是不是被定义为动态导入的,也就是应该为  component:() => import('...') 而不是component:MyComponent

这是通过 typeof to.matched[0]?.components.default === 'function' 完成的。带有  import 语句的组件不会被归为函数。

总结

在本文中,我们禁用了在 Vue 应用中的预取和预加载功能,并创建了一个进度条组件,该组件可显示以模拟加载页面时的实际进度。

原文:https://stackabuse.com/lazy-loading-routes-with-vue-router/

作者:Stack Abuse

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

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 PHP et Vue : une combinaison parfaite d'outils de développement front-end Mar 16, 2024 pm 12:09 PM

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.

Questions fréquemment posées par les enquêteurs front-end Questions fréquemment posées par les enquêteurs front-end Mar 19, 2024 pm 02:24 PM

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 simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

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-il front-end ou back-end ? Vérifiez-le! Django est-il front-end ou back-end ? Vérifiez-le! Jan 19, 2024 am 08:37 AM

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.

Explorer la technologie front-end du langage Go : une nouvelle vision du développement front-end Explorer la technologie front-end du langage Go : une nouvelle vision du développement front-end Mar 28, 2024 pm 01:06 PM

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 technologie front-end : découvrez comment Golang joue un rôle dans le domaine front-end Combinaison de Golang et de technologie front-end : découvrez comment Golang joue un rôle dans le domaine front-end Mar 19, 2024 pm 06:15 PM

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.

Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

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 : Un framework magique capable de gérer à la fois le développement front-end et back-end ! Jan 19, 2024 am 08:52 AM

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.

See all articles