ホームページ > 記事 > ウェブフロントエンド > Vue には非同期コンポーネントの例があります
必要なコンポーネントを使用するときにのみロードすると、初めてページをロードする速度が効果的に向上することは誰もが知っています。たとえば、ルートを切り替える場合、次の記事では主に簡単な Vue 非同期コンポーネントの実装方法について詳しく紹介していますので、必要な方は参考にしてください。
はじめに
大規模なアプリケーションでは、アプリケーションを複数の小さなモジュールに分割し、それらをオンデマンドでサーバーからダウンロードする必要がある場合があります。作業をさらに簡素化するために、Vue.js では、コンポーネント定義を非同期的に解決するファクトリー関数としてコンポーネントを定義できます。 Vue.js は、コンポーネントをレンダリングする必要がある場合にのみファクトリ関数をトリガーし、その後の再レンダリングのために結果をキャッシュします。
なぜ非同期コンポーネントが必要なのか? 理由は、Webpack のオンデマンド読み込みと同じです。最初にすべてのコンポーネントが読み込まれると、より時間がかかるため、必要なときに一部のコンポーネントを非同期コンポーネントとして定義できます。再度ロードしてください。
その利点は明白です:
オンデマンド読み込みにより、最初の読み込み時間が短縮され、速度が向上し、パフォーマンスの最適化も可能になります。
その後、コンポーネントは複数回使用される可能性がありますが、オンデマンドでロードされると、最初のロードが完了した後にキャッシュされますので、使用しないでください。
最近読んだVueのドキュメントを読んだとき、最初に読んだときは混乱していましたが、まだ少し混乱していました。 3 回目でそれを感じ、4 回目で少しはっきりしたと感じたので記録しました。以下は私が書いた簡単な Vue 非同期コンポーネントのデモです。
サンプルコード
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script> // 如果浏览器不支持Promise就加载promise-polyfill if ( typeof Promise === 'undefined' ) { var script = document.createElement( 'script' ); script.type = 'text/javascript'; script.src = 'https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js'; document.head.appendChild( script ); } </script> <!-- 引入Vue --> <script src="https://cdn.jsdelivr.net/npm/vue"></script> </head> <body> <p id="app" style="font-size: 22px"> <!-- 异步组件async-comp --> <async-comp :list="['我是一个异步组件,','如果加载完成,','我就会在这里显示']"></async-comp> </p> <!-- 引入main.js --> <script src="/main.js"></script> </body> </html>
非同期コンポーネントAsync-Comp.js、
Note、Async-Comp.jsはindex.htmlでは参照されていませんが、動的にロードされます以下の main.js にあります。
window.async_comp = { template: '\ <ol>\ <li v-for="item in list">{{ item }}</li>\ </ol>', props: { list: Array } };
main.js
var vm = new Vue( { el: '#app', components: { /* 异步组件async-comp */ 'async-comp': function () { return { /** 要渲染的异步组件,必须是一个Promise对象 */ component: new Promise( function ( resolve, reject ) { var script = document.createElement( 'script' ); script.type = 'text/javascript'; script.src = '/Async-Comp.js'; document.head.appendChild( script ); script.onerror = function () { reject( 'load failed!' ); } script.onload = function () { if ( typeof async_comp !== 'undefined' ) resolve( async_comp ); else reject( 'load failed!' ) } } ), /* 加载过程中显示的组件 */ loading: { template: '<p>loading...</p>' }, /* 出现错误时显示的组件 */ error: { template: '\ <p style="color:red;">load failed!</p>\ ' }, /* loading组件的延迟时间 */ delay: 10, /* 最长等待时间,如果超过此时间,将显示error组件。 */ timeout:3200 } } } } )
以上、皆様のお役に立てれば幸いです。
関連記事:
以上がVue には非同期コンポーネントの例がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。