ご存知のとおり、Vue プロジェクトは双方向データ バインディングと仮想 DOM を基盤として使用しています。DOM の頻繁なレンダリングの代わりにデータ駆動型を使用すると非常に効率的です。開発者向けにすでに最適化されています。では、なぜ Vue のパフォーマンス最適化というものが存在するのでしょうか。 Vue 2.x は現在、webpack などのサードパーティのパッケージングおよび構築ツールを使用しており、他のサードパーティのプラグインもサポートしているため、プロジェクトでこれらのツールを使用する場合、異なる操作によって実行またはパッケージ化の効率に異なる影響が出る可能性があります。以下では、最適化の方向性について詳しく説明します。 1 v-ifとv-showの使用
ベストプラクティス: 頻繁に切り替える要素には v-show を使用し、あまり変更されない要素には v-if を使用します。 2. 計算と監視を区別する
ベスト プラクティス: 他のデータに依存する数値計算を実行する必要がある場合は、computed を使用する必要があります。computed のキャッシュ プロパティを利用して、値を取得するたびに再計算する必要がなくなるためです。データが変更されたときに非同期またはコストのかかる操作を実行する必要がある場合は、watch を使用する必要があります。watch オプションを使用すると、非同期操作 (API にアクセス) を実行し、操作を実行する頻度を制限し、最終結果を取得する前に中間状態を設定できます。これらは計算プロパティでは実行できないことです。 3 v-for トラバーサルでは、アイテムにキーを追加し、同時に v-if を使用しないようにする必要があります。キーを追加しないと、通常はエラーが発生します。キーを追加すると、Vue の内部メカニズムがリストデータを正確に見つけやすくなります。更新時に、新しいステータス値と古いステータス値を比較して、差分をより迅速に見つけます。 v-for は v-if よりも優先度が高くなります。毎回配列全体を走査する必要がある場合、特に小さな部分のみをレンダリングする必要がある場合は、速度に影響します。必要に応じて、計算プロパティに置き換える必要があります。 <ul> <li v-for="adminUsers 内のユーザー" :key="user.id"> {{ユーザー名}} </li> </ul> <スクリプト> エクスポートデフォルト{ データ () { { ユーザー: [] } を返します }, 計算: { 管理者ユーザー: 関数(){ this.users.filter(()=>user.isAdmin) を返します } } } </スクリプト> 4. 長いリストの純粋な表示のパフォーマンス最適化表示のみに使用されるデータの場合、Vue を使用してデータをハイジャックする必要はなく、オブジェクトをフリーズするだけで済みます。 エクスポートデフォルト{ データ () { 戻る { ユーザー: [] } }, 作成された(){ axios.get('/api/users').then((res)=>{ this.users = Object.freeze(res.data.users) }) } } 5. イベントの破壊Vue コンポーネントが破棄されると、他のインスタンスとの接続が自動的にクリーンアップされ、すべての命令とイベント リスナーがアンバインドされますが、これはコンポーネント自体のイベントに対してのみ行われます。 js で addEventListene やその他のメソッドが使用されている場合、イベントは自動的に破棄されません。メモリ リークを回避するには、コンポーネントが破棄されるときに、次のようなイベントのリスナーを手動で削除する必要があります。 作成された() { イベントリスナーを追加します('click'、this.click、false) }, 破棄する前に() { イベントリスナーを削除します('click'、this.click、false) } 6. 画像リソースの遅延読み込みvue-lazyload プラグインを使用します: インストール npm をインストール vue-lazyload --save-dev man.js リファレンス 'vue-lazyload' から VueLazyload をインポートします。 Vue.use(VueLazyload) // またはカスタマイズ Vue.use(VueLazyload, { プリロード: 1.3、 エラー: 'dist/error.png', 読み込み中: 'dist/loading.gif', 試行回数: 1 }) imgタグを変更する <img v-lazy="/static/img/1.png"> 7 ルーティングの遅延読み込みVue はシングルページ アプリケーションであり、多くのルートが導入されている可能性があります。そのため、webpcak でパッケージ化されたファイルは非常に大きくなります。ホームページに入ると、読み込まれるリソースが多すぎて、ページに白い画面が表示され、ユーザー エクスペリエンスが向上しません。異なるルートに対応するコンポーネントを異なるコード ブロックに分割し、ルートにアクセスしたときに対応するコンポーネントをロードできれば、より効率的になります。これにより、最初の画面の表示速度は大幅に向上しますが、他のページの速度は低下する可能性があります。 const Foo = () => import('./Foo.vue') const ルーター = 新しい VueRouter({ ルート: [ { パス: '/foo'、コンポーネント: Foo } ] }) 8. サードパーティのプラグインをオンデマンドで導入するサードパーティのライブラリを使用する場合は、グローバルではなくオンデマンドでインポートするのが最適です。サードパーティのライブラリには多くのプラグインがあり、すべてをインポートするとパッケージ化に時間がかかるためです。たとえば、Element UI、Vue の Ant Design、その他の UI ライブラリなどです。 オンデマンドインポート 'vue' から Vue をインポートします。 'ant-design-vue' から DatePicker をインポートします。 Vue.use(DatePicker); グローバル輸入 'ant-design-vue' から Antd をインポートします。 Vue.js で Antd をビルドします。 9 無限リストのパフォーマンスの最適化無限スクロールのリストをレンダリングする場合は、ウィンドウ化テクノロジを使用してパフォーマンスを最適化する必要があります。コンテンツの小さな領域のみをレンダリングすればよく、コンポーネントの再レンダリングや DOM ノードの作成にかかる時間が短縮されます。 この無限リストのシナリオを最適化するには、次のオープンソース プロジェクト vue-virtual-scroll-list と vue-virtual-scroller を参照できます。 10. サーバーサイドレンダリング(SSR)またはプリレンダリング一般的に、シングルページ アプリケーションでは、ページのレンダリングはブラウザ側で完了し、リクエストを送信することでバックグラウンドからデータが取得されます。一方、サーバー側レンダリング (SSR) では、ページ要素 (HTML) の構造がサーバー側で既に構築されており、ページ全体が直接クライアントに返されます。
最初の画面の読み込み速度や SEO に対する要件が高い場合は、SSR レンダリングを使用できます。 PS: 最適化は単なる提案です。最適化の難易度、影響範囲、適用可能なシナリオ、他のモジュールへの影響の有無、最適化効果が明らかかどうかなど、プロジェクトに適しているかどうかを検討する必要があります。あなたに似合うものが一番です! これで、Vue2.x プロジェクトのパフォーマンス最適化のためのコード最適化の実装に関するこの記事は終了です。より関連性の高い Vue2.x コード最適化コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQL 5.7.9 シャットダウン構文例の詳細な説明
ページ上でショートカットキーをカスタマイズする要件に遭遇し、ショートカットキーを設定して表示する場所...
この問題を理解する前に、まず MySQL テーブルのストレージ構造を確認し、次にバイナリ ツリー、マ...
要素 ui テーブルにはドラッグ アンド ドロップによる並べ替え機能が組み込まれておらず、サードパー...
準備する:教師テーブルと生徒テーブルを定義し、生徒テーブルで教師テーブルIDを参照します。テーブルt...
必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...
1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...
JavaScriptをクリックすると画像の形状が変わります(変形の応用)。参考までに具体的な内容は...
フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...
美しいコードは美しい Web サイトの基礎です。優れた CSS は、同様に優れた HTML の上にの...
序文この記事では、山括弧のその他の用途をさらに詳しく見ていきます。前回の記事では、山括弧 (<...
この記事では、Linux 環境での ActiveMQ の展開方法について説明します。ご参考までに、詳...
時間フィールドを作成するときデフォルトのCURRENT_TIMESTAMPデータを挿入する際、このフ...
この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...
目次序文導入1. 作用機序2. 自然から3. 時計と計算の比較4. メソッドはデータロジックの関係を...
Adobe Brackets は、HTML、CSS、JavaScript 用のオープンソースでシンプ...