찾다
웹 프론트엔드View.jsVue 프로젝트에서 비동기 구성 요소를 사용하여 성능 최적화

Vue 프로젝트에서 비동기 구성 요소를 사용하여 성능 최적화

JavaScript 프레임워크를 사용하여 대규모 애플리케이션을 만들 때 구성 요소 구조를 고려하는 것이 중요합니다. 구성 요소 구조를 생각하면 런타임 시 각 구성 요소가 로드되어 애플리케이션 속도가 느려지는 것을 방지할 수 있습니다. 애플리케이션을 구축할 때 불필요한 데이터를 사용자에게 반환하거나 전반적으로 좋지 않은 사용자 경험을 생성하는 것을 방지할 수도 있습니다.

React 및 Angular와 같은 프레임워크는 각각 React.lazy() 및 라우팅 모델을 사용하여 구성 요소 구조를 고려합니다. React.lazy()和路由模型来考虑组件结构。

在这篇文章中,我们将实现两个演示,看看Vue如何使用异步组件,通过使用延迟加载和代码分割技术来减少应用程序的加载时间。

在Vue中创建组件

为了理解它是如何工作的,让我们从创建一个基本组件开始。

导航到您的终端,安装Vue的CLI,并创建一个项目:

npm install -g vue/cli
vue create book-project
#choose the default setting when prompted

在我们的新项目文件夹中,让我们替换默认文件的内容,其中包括helloworld.vueapp.vue。我们将从创建图书捐赠页面开始。将helloworld.vue重命名为book.vue,并将其内容替换为以下内容:

<!--Book.vue-->
<template>
  <h1 id="Donate-nbsp-Books">Donate Books</h1>
</template>

然后,用以下内容替换App.vue的内容:

<!--App.vue-->
<template>
  <div>
    <book></book>
  </div>
</template>

<script>
  Import Book from "./components/Book"
  export default {
    components: {
      Book
    }
  }
</script>

<style>
#app {
  font-family: &#39;Avenir&#39;, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

在上面的代码块中,您会注意到Book组件是静态导入的。 这意味着Book组件在每次加载应用程序时都会加载。

接下来,在终端中运行npm run serve,导航至localhost:8080,然后查看您的基本组件:

Vue 프로젝트에서 비동기 구성 요소를 사용하여 성능 최적화

现在,每次加载应用程序时加载Book组件似乎不是一个重要的性能问题。但是,随着应用程序越来越大,在运行时加载每个组件将变得很麻烦。

您的用户不会与应用程序中的每个功能都进行交互,因此只提供他们需要的功能是有意义的。问题是,如何只加载用户需要的内容?

这就是延迟加载和代码分割技术发挥作用的地方。延迟加载会延迟组件的初始加载,在用户导航到位于页面上的位置之前,会阻止加载图像等资源。

代码分割是webpack最初提供的一个特性。Webpack允许您将代码分割成仅在需要时使用的各种包。

Vue通过一个称为动态导入的特性执行代码分解。

此导入使用webpack(或任何模块绑定器,如Parcel)异步加载组件。它的语法包含一个承诺,并包装在一个箭头函数:

// dynamic import
import("./components/Book").then(Book => {
  // Insert the Book module here
});

让我们实现这个在我们的App.vue组件:

<template>
  <div>
    <book></book>
  </div>
</template>

<script>
export default {
  components: {
    Book: () => import("./components/Book")
  }
};
</script>

在上面的代码示例中,import()函数返回Book组件,这使我们能够异步加载它。 如果我们在浏览器devtools中查看“网络”标签,则有一个由App.js发起的名为0.js的文件。 该文件包含我们的异步组件:

Vue 프로젝트에서 비동기 구성 요소를 사용하여 성능 최적화

使用异步组件创建一个Vue应用程序

让我们继续构建一个基本的图书捐赠应用程序,以展示如何利用异步组件。最后,我们只想在用户单击Donate按钮时加载Donate组件。

首先,让我们导航到终端并在我们的项目文件夹中安装vue-material。我们将使用这个样式的应用程序:

cd book-project
npm i vue-material

我们将在应用程序中包括vue-material导入它在src/main.js:

import Vue from &#39;vue&#39;
import App from &#39;./App.vue&#39;
Vue.config.productionTip = false
import VueMaterial from &#39;vue-material&#39;
import &#39;vue-material/dist/vue-material.min.css&#39;
import &#39;vue-material/dist/theme/default.css&#39;
Vue.use(VueMaterial)
new Vue({
  render: h => h(App),
}).$mount(&#39;#app&#39;)

现在,让我们来构建之前创建的Book组件:

<!--Book.vue-->
    <template>
     <div id="app">
      <md-card md-with-hover v-for="(book, key) in books" v-bind:key="key">
          <md-ripple>
            <md-card-header>
              <div class="md-title">{{book.name}}</div>
              <div class="md-subhead">{{book.genre}}</div>
            </md-card-header>
            <md-card-actions>
        <md-button type="primary" @click="addBook(key)">Donate to improve {{book.genre}}</md-button>
            </md-card-actions>
          </md-ripple>
        </md-card>
        <div v-if="show">
          <md-card-content>
         <donate v-bind:selectList="selectList"></donate>
          </md-card-content>
    </div>
        <md-button @click="show = true" id="donate">Donate {{selectList.length}} book(s)</md-button>
      </div>  
    </template>
    
    <script>
      export default {
      name: &#39;RegularButtons&#39;,
      methods: {
        addBook (key) {
          if(!this.selectList.includes(key)) {
            this.selectList.push(key);
          }
        }
      },
      components: {
        donate: () => import(&#39;./Donate&#39;)
      },
      data: () => ({
        books: [
          { name: &#39;Using Creatine&#39;, genre: &#39;Workouts&#39; },
          { name: &#39;Learn Parkour&#39;, genre: &#39;Sports&#39; },
          { name: &#39;Snorkelling&#39;, genre: &#39;Diving&#39; },
        ],
        selectList: [],
        show: false
      })
    }
    </script>

在上面的代码块中,图书列表从图书数组中检索并显示。如果用户单击每本书的按钮,addBook()方法将选择的书推入selectList数组,并显示捐赠图书的总数。

还有一个单独的按钮,专门用于加载异步组件。它的参数show设置为true。这使得v-if语句能够显示donate组件,该组件包含所选书籍的数量。

donate组件已经通过<script></script>标记中的components属性动态导入。

让我们创建donate组件。在src/components文件夹中,创建一个名为Donate的新文件。并输入下面的代码示例:

<template>
      <div title="Donate Books" key="donate">
          <p v-for="(x, y) in this.selectList" :key="y">
          Tip: {{books[Number(x)].name}} is about {{books[Number(x)].genre}}
          </p>
      </div>
</template>
<script>
export default {
  props: [&#39;selectList&#39;],
  data: () => ({
    books: [
      { name: &#39;Using Creatine&#39;, genre: &#39;Workouts&#39; },
      { name: &#39;Learn Parkour&#39;, genre: &#39;Sports&#39; },
      { name: &#39;Snorkelling&#39;, genre: &#39;Underwater&#39; },
    ]
  })
}
</script>

导航到您的终端并运行npm run serve

如果应用程序编译成功,在浏览器中打开localhost:8080。当你在Devtools中查看网络标签时点击应用程序,当你点击Donate按钮时,Donate

이 기사에서는 Vue가 비동기 구성 요소를 사용하여 지연 로딩 및 코드 분할 기술을 사용하여 애플리케이션의 로딩 시간을 줄이는 방법을 알아보기 위해 두 가지 데모를 구현합니다. 🎜🎜Vue에서 구성 요소 만들기🎜🎜작동 방식을 이해하려면 기본 구성 요소를 만드는 것부터 시작해 보겠습니다. 🎜🎜 터미널로 이동하여 Vue의 CLI를 설치하고 프로젝트를 만듭니다. 🎜
In src/components, let&#39;s create two components: LoadingState.vue and ErrorState.vue:
🎜새 프로젝트 폴더에서 helloworld.vue가 포함된 기본 파일의 내용을 바꾸겠습니다. app.vue. 도서 기부 페이지를 만드는 것부터 시작해 보겠습니다. helloworld.vue의 이름을 book.vue로 바꾸고 콘텐츠를 다음으로 바꿉니다: 🎜
<!--LoadingState.vue-->
    <template>
      <p><em>Loading...</em></p>
    </template>
🎜 그런 다음 App.vue: 🎜<pre class='brush:php;toolbar:false;'>&lt;!--ErrorState.vue--&gt; &lt;template&gt; &lt;p&gt;Could not display books. Kindly check your internet conection.&lt;/p&gt; &lt;/template&gt;</pre>🎜 위의 코드 블록에서 <code>Book 구성 요소가 정적으로 가져오는 것을 확인할 수 있습니다. 이는 애플리케이션이 로드될 때마다 Book 구성 요소가 로드된다는 의미입니다. 🎜🎜다음으로 터미널에서 npm run submit을 실행하고 localhost:8080으로 이동한 후 기본 구성 요소를 확인하세요. 🎜🎜Vue 프로젝트에서 비동기 구성 요소를 사용하여 성능 최적화🎜🎜이제, 앱이 로드될 때마다 Book 구성 요소는 심각한 성능 문제가 아닌 것 같습니다. 그러나 애플리케이션이 커지면 런타임에 각 구성 요소를 로드하는 것이 번거로워집니다. 🎜🎜사용자는 앱의 모든 기능과 상호 작용하지 않으므로 필요한 기능만 제공하는 것이 합리적입니다. 문제는 사용자에게 필요한 것만 로드하는 방법입니다. 🎜🎜여기서 지연 로딩과 코드 분할 기술이 사용됩니다. 지연 로드는 구성 요소의 초기 로드를 지연시켜 사용자가 페이지에서 해당 위치로 이동할 때까지 이미지와 같은 리소스가 로드되지 않도록 합니다. 🎜🎜코드 분할은 원래 webpack에서 제공하는 기능입니다. Webpack을 사용하면 필요할 때만 사용되는 다양한 패키지로 코드를 분할할 수 있습니다. 🎜🎜Vue는 동적 가져오기라는 기능을 통해 코드 분해를 수행합니다. 🎜🎜이 가져오기는 webpack(또는 Parcel과 같은 모듈 바인더)을 사용하여 구성 요소를 비동기적으로 로드합니다. 구문은 화살표 함수로 묶인 약속으로 구성됩니다. 🎜
<!--App.vue-->
<script>
import LoadingState from "./components/LoadingState"
import ErrorState from "./components/ErrorState"
const Book = import("./components/Book")
export default {
  components: {
    Book: () => ({
// Book is our default component
      component: Book,
// LoadingState is the component that is displayed while our default component
// is loading
      loading: LoadingState,
// ErrorState is the component that is displayed should our default component have an // error while loading
      error: ErrorState,
// A delay is set up before the loading component is shown
      delay: 100,
// Should this timeout be reached, the default component is considered to have failed // to load
      timeout: 2000
    })
  }
};
</script>
🎜 이를 App.vue 구성 요소에 구현해 보겠습니다. 🎜rrreee🎜 위의 코드 예에서 import() 함수는 Book 구성 요소를 사용하면 비동기적으로 로드할 수 있습니다. devtools 브라우저의 "Network" 탭을 보면 App.js에 의해 시작된 0.js라는 파일이 있습니다. 이 파일에는 비동기 구성 요소가 포함되어 있습니다: 🎜🎜2 . png🎜🎜비동기 구성 요소를 사용하여 Vue 애플리케이션 만들기🎜🎜기본 도서 기부 애플리케이션을 계속 구축하여 방법을 보여드리겠습니다. 비동기 구성 요소를 활용합니다. 마지막으로, 사용자가 기부 버튼을 클릭할 때만 기부 구성 요소가 로드되기를 원합니다. 🎜🎜먼저 터미널로 이동하여 프로젝트 폴더에 vue-material을 설치하겠습니다. 다음 스타일의 애플리케이션을 사용하겠습니다. 🎜rrreee🎜 애플리케이션에 vue-material을 포함하고 src/main.js로 가져옵니다. 🎜rrreee🎜이제 빌드해 보겠습니다. 이전에 생성한 Book 구성 요소: 🎜rrreee🎜위 코드 블록에서 책 목록은 books 배열에서 검색되어 표시됩니다. 사용자가 각 도서에 대한 버튼을 클릭하면 addBook() 메서드가 선택한 도서를 selectList 배열에 푸시하고 기부된 도서의 총 개수를 표시합니다. 🎜🎜비동기 구성요소 로드 전용 버튼도 별도로 있습니다. 해당 매개변수 showtrue로 설정됩니다. 이를 통해 v-if 문이 선택한 도서 수를 포함하는 donate 구성 요소를 표시할 수 있습니다. 🎜🎜donate 구성 요소는 <script></script> 태그의 comComponents 속성을 ​​통해 동적으로 가져왔습니다. 🎜🎜 donate 컴포넌트를 만들어 보겠습니다. src/comComponents 폴더에 Donate라는 새 파일을 만듭니다. 그리고 다음 코드 예시를 입력하세요. 🎜rrreee🎜 터미널로 이동하여 npm run submit을 실행하세요.
🎜🎜애플리케이션이 성공적으로 컴파일되면 브라우저에서 localhost:8080을 엽니다. Devtools의 네트워크 탭을 보는 동안 애플리케이션을 클릭하면 기부 버튼을 클릭할 때만 기부 구성 요소가 로드됩니다. 🎜

异步组件的错误处理

异步组件需要尽可能简单,以便快速加载。但是,在我们的异步组件中定义加载和错误组件有助于处理加载状态并在需要时显示错误消息。

In src/components, let&#39;s create two components: LoadingState.vue and ErrorState.vue:
<!--LoadingState.vue-->
    <template>
      <p><em>Loading...</em></p>
    </template>
<!--ErrorState.vue-->
    <template>
      <p>Could not display books. Kindly check your internet conection.</p>
    </template>

现在,在App.vue中,我们将导入两个组件并将它们添加到Book组件中:

<!--App.vue-->
<script>
import LoadingState from "./components/LoadingState"
import ErrorState from "./components/ErrorState"
const Book = import("./components/Book")
export default {
  components: {
    Book: () => ({
// Book is our default component
      component: Book,
// LoadingState is the component that is displayed while our default component
// is loading
      loading: LoadingState,
// ErrorState is the component that is displayed should our default component have an // error while loading
      error: ErrorState,
// A delay is set up before the loading component is shown
      delay: 100,
// Should this timeout be reached, the default component is considered to have failed // to load
      timeout: 2000
    })
  }
};
</script>

加载和错误状态不会出现,除非你有一个非常缓慢或错误的互联网连接。为了测试它们是否工作正常,我们将timeout属性设置为0,并尝试加载应用程序。

结论

使用异步组件构建大型应用程序是保持最佳性能的关键。异步组件不仅可以确保由于更快的加载时间,您的保留率会更高,而且还可以帮助您更有效地检测错误,因为组件的作用域是作为函数传递的。如果你想看看这个演示的源代码,你可以在GitHub上找到它。

相关推荐:

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

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

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

위 내용은 Vue 프로젝트에서 비동기 구성 요소를 사용하여 성능 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 logrocket에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Netflix의 프론트 엔드의 반응, vue 및 미래Netflix의 프론트 엔드의 반응, vue 및 미래Apr 12, 2025 am 12:12 AM

Netflix는 주로 VUE가 특정 기능을 위해 보충하는 프론트 엔드 프레임 워크로 React를 사용합니다. 1) React의 구성 요소화 및 가상 DOM은 Netflix 애플리케이션의 성능 및 개발 효율을 향상시킵니다. 2) VUE는 Netflix의 내부 도구 및 소규모 프로젝트에 사용되며 유연성과 사용 편의성이 핵심입니다.

프론트 엔드의 vue.js : 실제 응용 프로그램 및 예제프론트 엔드의 vue.js : 실제 응용 프로그램 및 예제Apr 11, 2025 am 12:12 AM

vue.js는 복잡한 사용자 인터페이스를 구축하는 데 적합한 점진적인 JavaScript 프레임 워크입니다. 1) 핵심 개념에는 반응 형 데이터, 구성 요소화 및 가상 DOM이 포함됩니다. 2) 실제 응용 분야에서는 TODO 응용 프로그램을 구축하고 Vuerouter를 통합하여 시연 할 수 있습니다. 3) 디버깅 할 때 VuedeVtools 및 Console.log를 사용하는 것이 좋습니다. 4) 성능 최적화는 V-IF/V- 쇼, 목록 렌더링 최적화, 구성 요소의 비동기로드 등을 통해 달성 할 수 있습니다.

vue.js and React : 주요 차이점 이해vue.js and React : 주요 차이점 이해Apr 10, 2025 am 09:26 AM

vue.js는 중소형 프로젝트에 적합하지만 REACT는 크고 복잡한 응용 프로그램에 더 적합합니다. 1. Vue.js의 응답 형 시스템은 종속성 추적을 통해 DOM을 자동으로 업데이트하여 데이터 변경을 쉽게 관리 할 수 ​​있습니다. 2. 반응은 단방향 데이터 흐름을 채택하고 데이터 흐름에서 하위 구성 요소로 데이터가 흐르고 명확한 데이터 흐름과 곤란하기 쉬운 구조를 제공합니다.

vue.js vs. React : 프로젝트 별 고려 사항vue.js vs. React : 프로젝트 별 고려 사항Apr 09, 2025 am 12:01 AM

vue.js는 중소형 프로젝트 및 빠른 반복에 적합한 반면 React는 크고 복잡한 응용 프로그램에 적합합니다. 1) vue.js는 사용하기 쉽고 팀이 불충분하거나 프로젝트 규모가 작는 상황에 적합합니다. 2) React는 더 풍부한 생태계를 가지고 있으며 고성능 및 복잡한 기능적 요구가있는 프로젝트에 적합합니다.

태그를 vue로 점프하는 방법태그를 vue로 점프하는 방법Apr 08, 2025 am 09:24 AM

VUE에서 태그의 점프를 구현하는 방법에는 다음이 포함됩니다. HTML 템플릿의 A 태그를 사용하여 HREF 속성을 지정합니다. VUE 라우팅의 라우터 링크 구성 요소를 사용하십시오. javaScript 에서이. $ router.push () 메소드를 사용하십시오. 매개 변수는 쿼리 매개 변수를 통해 전달 될 수 있으며 동적 점프를 위해 라우터 옵션에서 경로가 구성됩니다.

VUE의 구성 요소 점프를 구현하는 방법VUE의 구성 요소 점프를 구현하는 방법Apr 08, 2025 am 09:21 AM

VUE에서 구성 요소 점프를 구현하는 방법은 다음과 같습니다. 라우터 링크 및 & lt; router-view & gt; 하이퍼 링크 점프를 수행하고 대상 경로로 속성을 지정합니다. & lt; router-view & gt; 현재 라우팅 된 렌더링 된 구성 요소를 표시하는 구성 요소. 프로그래밍 방식 탐색을 위해 router.push () 및 router.replace () 메소드를 사용하십시오. 전자는 역사를 구하고 후자는 기록을 떠나지 않고 현재 경로를 대체합니다.

Vue의 div로 점프하는 방법Vue의 div로 점프하는 방법Apr 08, 2025 am 09:18 AM

VUE에서 DIV 요소를 점프하는 두 가지 방법이 있습니다. VUE 라우터를 사용하고 라우터 링크 구성 요소를 추가하십시오. @Click 이벤트 리스너를 추가하고 이것을 호출하십시오. $ router.push () 메소드를 점프하십시오.

vue 점프로 값을 전송하는 방법vue 점프로 값을 전송하는 방법Apr 08, 2025 am 09:15 AM

VUE에서 데이터를 전달하는 두 가지 주요 방법이 있습니다 : Props : 일원 데이터 바인딩, 부모 구성 요소에서 자식 구성 요소로 데이터를 전달합니다. 이벤트 : 이벤트와 사용자 정의 이벤트를 사용하여 구성 요소간에 데이터를 전달합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.