の基本的な理解が必要です。 Asyncコンポーネント
非同期コンポーネントの作成に飛び込む前に、コンポーネントを通常どのようにロードするかを見てみましょう。これを行うには、非常にシンプルなメッセージコンポーネントを使用します:
コンポーネントを作成したので、app.vueファイルにロードして表示します。コンポーネントをインポートしてコンポーネントオプションに追加できるように、テンプレートで使用できます。
しかし、今何が起こりますか?メッセージコンポーネントは、アプリケーションがロードされるたびにロードされるため、最初のロードに含まれています。
これは、単純なアプリにとって大きな問題のように聞こえないかもしれませんが、ウェブストアのようなより複雑なものを考慮してください。ユーザーがバスケットにアイテムを追加してからチェックアウトしたいので、選択したアイテムのすべての詳細が記載されたボックスをレンダリングするチェックアウトボタンをクリックします。上記の方法を使用して、このチェックアウトボックスは最初のバンドルに含まれますが、ユーザーがチェックアウトボタンをクリックしたときにのみコンポーネントが必要です。ユーザーがチェックアウトボタンをクリックせずにウェブサイトをナビゲートする可能性もあります。つまり、この潜在的に使用されていないコンポーネントのロードにリソースを無駄にすることは意味がありません。
アプリケーションの効率を向上させるために、怠zyなロードとコード分割技術の両方を組み合わせることができます。怠zyなロードは、コンポーネントの初期負荷を遅らせることです。 Medium.comのようなサイトで怠zyなロードが動作しているのを見ることができます。このサイトでは、画像が必要になる直前に画像がロードされています。読者が途中で記事をスキップする可能性があるため、特定の投稿のすべての画像をロードするリソースを無駄にする必要がないため、これは便利です。
コード分割機能Webpackが提供すると、コードをさまざまなバンドルに分割でき、その後、オンデマンドまたは後の時点で並行してロードできます。特定のコードを必要または使用した場合にのみロードするために使用できます。動的輸入
幸いなことに、Vueはこのシナリオにダイナミックインポートと呼ばれるものを使用して対応しています。この機能では、要求された(VUE)コンポーネントを含む約束を返す新しい機能のようなインポート形式を導入します。インポートは文字列を受信する関数であるため、式を使用してモジュールをロードするなどの強力なことを行うことができます。 動的インポートは、バージョン61以来Chromeで利用可能です。それらの詳細については、Google開発者のWebサイトをご覧ください。
次に、この知識をメッセージコンポーネントに適用しましょう。このようなapp.vueコンポーネントを取得します。
ご覧のとおり、Import()関数はコンポーネントを返す約束を解決します。つまり、コンポーネントを非同期的にロードしました。 DevToolsのネットワークタブを見てみると、非同期コンポーネントを含む0.JSというファイルに気付くでしょう。
<span><!-- Message.vue --> </span><span><span><span><template</span>></span> </span> <span><span><span><h1</span>></span>New message!<span><span></h1</span>></span> </span><span><span><span></template</span>></span> </span>
非同期コンポーネントがハンドルを握ったので、本当に必要なときにのみロードすることで、本当に彼らの力を収穫しましょう。この記事の前のセクションでは、ユーザーがチェックアウトボタンにヒットしたときにのみロードされるチェックアウトボックスのユースケースについて説明しました。それを構築しましょう。
vue cliがインストールされていない場合は、今すぐ取得する必要があります。
<span><!-- Message.vue --> </span><span><span><span><template</span>></span> </span> <span><span><span><h1</span>></span>New message!<span><span></h1</span>></span> </span><span><span><span></template</span>></span> </span>
プロジェクトディレクトリに変更してから、Ant-Design-Vueライブラリをインストールします。これをスタイリングに使用します。
<span><!-- App.vue --> </span><span><span><span><template</span>></span> </span> <span><span><span><div</span>></span> </span> <span><span><span><message</span>></span><span><span></message</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></template</span>></span> </span> <span><span><span><script</span>></span><span> </span></span><span><span><span>import <span>Message</span> from "./Message"; </span></span></span><span><span><span>export default { </span></span></span><span><span> <span>components: { </span></span></span><span><span> <span>Message </span></span></span><span><span> <span>} </span></span></span><span><span><span>}; </span></span></span><span><span></span><span><span></script</span>></span> </span>
次に、src/main.js:
にAnt Design Libraryをインポートします<span>// static import </span><span>import <span>Message</span> from "./Message"; </span> <span>// dynamic import </span><span>import("./Message").then(<span>Message</span> => { </span> <span>// Message module is available here... </span><span>}); </span>
最後に、SRC/comomeNents、checkout.vueおよびitems.vueで2つの新しいコンポーネントを作成します:
<span><!-- App.vue --> </span><span><span><span><template</span>></span> </span> <span><span><span><div</span>></span> </span> <span><span><span><message</span>></span><span><span></message</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></template</span>></span> </span> <span><span><span><script</span>></span><span> </span></span><span><span><span>import <span>Message</span> from "./Message"; </span></span></span><span><span><span>export default { </span></span></span><span><span> <span>components: { </span></span></span><span><span> <span><span>Message</span>: () => import("./Message") </span></span></span><span><span> <span>} </span></span></span><span><span><span>}; </span></span></span><span><span></span><span><span></script</span>></span> </span>
ストアビューを作成します
<span>npm i -g @vue/cli </span>
このファイルには、現在の購入されたアイテムの量が記載されたショッピングカートアイコンを表示しています。アイテム自体は、データプロパティとして宣言されたアイテムアレイから引き出されます。アイテムの
購入vue create my-store
ページに
チェックアウトボタンを追加しました。これは、物事が面白くなり始める場所です。
<span>cd my-store </span><span>npm i ant-design-vue </span>
数行以下では、v-ifステートメントを見つけることができます。これは、ショーがtrueに設定されている場合にのみ
<span>import 'ant-design-vue/dist/antd.css' </span>
ネットワークタブでストアの周りをクリックしてみてください。チェックアウトコンポーネントがチェックアウトボタンをクリックしたときにのみロードされることを確認してください。
githubでこのデモのコードも見つけることができます。負荷とエラーのコンポーネントを備えた
非同期
<span><!-- Message.vue --> </span><span><span><span><template</span>></span> </span> <span><span><span><h1</span>></span>New message!<span><span></h1</span>></span> </span><span><span><span></template</span>></span> </span>
vue asyncコンポーネントに関するよくある質問
}、1000)
})
この例では、コンポーネント1秒の遅延の後に非同期にロードされています。
VUEルーターでvue Asyncコンポーネントを使用できますか?実際、Vue Routerには、コンポーネントの分割と非同期負荷のサポートが組み込まれています。ルートを定義するとき、コンポーネントを直接提供する代わりに、コンポーネントに解決する約束を返す関数を提供できます。これにより、コンポーネントが必要な場合にのみコンポーネントを読み込むことができ、アプリケーションのパフォーマンスが向上します。
//コンポーネント定義を渡すコールバック Resolve({
}、1000)
}、function(理由){コンソール。エラー(理由)})
この例では、約束が拒否された場合、エラーはコンソールにログに記録されます。 🎜>はい、Vuexを使用してVue Asyncコンポーネントを使用できます。 VuexはVue.jsの州管理ライブラリであり、Vue Asyncコンポーネントでうまく機能します。通常のコンポーネントと同じように、アクションを派遣し、非同期コンポーネントから突然変異を犯すことができます。 。 Vue Test UtilsやJestなどのライブラリを使用して、コンポーネントのユニットテストを作成できます。ただし、非同期コンポーネントは非同期にロードされているため、アサーションを実行する前にコンポーネントがロードされるのを待つためにテストで非同期/待つ必要がある場合があります。 >
はい、Vue CLIを使用してVue Asyncコンポーネントを使用できます。 Vue CLIは、足場VUE.JSプロジェクトのコマンドラインツールであり、非同期コンポーネントのサポートが組み込まれています。 vue.componentメソッドを使用して、Vue CLIプロジェクトで非同期コンポーネントを定義できます。
Vue Asyncコンポーネントのパフォーマンスを最適化するにはどうすればよいですか? Vue Asyncコンポーネント。 1つの方法は、コード分割を使用することです。これにより、コードをオンデマンドでロードできる小さなチャンクに分割できます。別の方法は、レイジーロードを使用することです。これにより、コンポーネントが必要な場合にのみロードできます。また、ブラウザがアイドル状態であるときに、プリフェッチとプリロードをバックグラウンドにロードすることもできます。
以上がAsyncコンポーネントを使用したVueアプリのパフォーマンスを最適化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。