Vueプロジェクトのフロントエンドを最適化およびパッケージ化するための必須のボーナスアイテム

Vueプロジェクトのフロントエンドを最適化およびパッケージ化するための必須のボーナスアイテム

序文

Vue プロジェクトが開発された後、プロジェクトをパッケージ化してリリースする前に、プロジェクトの最適化という重要な操作が行われます。これはプログラマーにとってもプラスになります。この記事の手順に従って、プロジェクトを最適化する方法を確認してください。

1. ルーティングの遅延読み込み

1. ルートの遅延読み込みが必要なのはなぜですか?

プロジェクトを実行したところ、ページに入るとすぐにすべての js ファイルと css ファイルが読み込まれることがわかりました。このプロセスは非常に時間がかかります。
ページを開いたときに、該当ページの対応する js ファイルと css ファイルを読み込むと、ページの読み込み速度が大幅に向上します。

2. ルートの遅延読み込みを実装する方法

Vue 公式ドキュメント: ルーティングの遅延読み込み

コードは次のとおりです(例):

{
    パス: '/login',
    コンポーネント: () => import('@/views/login/index'),
    非表示: true
  },

3. ルートの遅延読み込みにおけるマジックコメント

コメントに webpackChunkName を指定することで、このファイルの名前をカスタマイズできます。

コードは次のとおりです(例):

コンポーネント = () => import(/* webpackChunkName:"login"*/ "../component/Login.vue")

2. パッケージサイズを分析する

1. 需要

パッケージ化されたファイル内の各ファイルのサイズを知りたいです。コードを分析して最適化できるようにするためです。

2. パッケージ分析ファイルの生成方法

ターミナルで npm run preview -- --report を実行します。このコマンドは、エントリ ポイント main.js から依存関係分析を実行し、各パッケージのサイズを分析します。最後に、生成された dist フォルダーに report.html ファイルが生成されます。これを開くと、プロジェクトで使用されているファイルが占めるスペースを確認できます。
(効果図は以下のとおりです)

3. Webpack構成ではパッケージ化は除外される

1. 需要

生成されたパッケージ ファイルから、あまり使用されないパッケージを除外します。

たとえば、上図に示す xsxl.js と element.js は、生成されるファイルから除外できます。

2. 包装を除外する

vue.config.js を見つけて、次のように外部項目を追加します。

コードは次のとおりです(例):

Webpack を構成する: {
  //シングルページアプリケーションのタイトルを設定します。ページ名: name,
  外部: {
     /**
      * 外部オブジェクト属性の解析。
      * 基本フォーマット:
      * 「パッケージ名」: 「プロジェクトで導入された名前」
      *  
    */
    'vue': 'vue',
    '要素-ui': 'ElementUI',
    'xlsx': 'XLSX'
  },
  解決する: {
    エイリアス: {
      '@': 解決('src')
    }
  }
}

IV. オンラインリソースの引用

1. 需要

前の手順を実行した後、生成されたパッケージは大幅に小さくなりました。ただし、これらの依存パッケージがないと、プロジェクトをオンラインで実行することはできません。次に、コードの操作をサポートするために、ネットワーク内のリソースを参照する必要があります。

2. CDN

  • CDN の正式名称は「Content Delivery Network」で、中国語ではコンテンツ配信ネットワークと呼ばれます。アクセス速度を上げるために使用します
  • 一部の静的リソース(CSS、.js、画像、ビデオ)をサードパーティの CDN サーバーに配置すると、アクセスが高速化されます。

利点:

  1. アプリケーションパッケージのサイズを縮小する
  2. 静的リソースへのアクセスを高速化する
  3. ブラウザキャッシュを使用して変更されていないファイルを長期間キャッシュする

3. 実装手順

注: 開発環境では、ファイル リソースは引き続きローカルの node_modules から取得できますが、プロジェクトがオンラインの場合にのみ外部リソースを使用する必要があります。この時点では、環境変数を使用して区別することができます。詳細は以下の通りです。

コードは次のとおりです(例):

vue.config.js ファイル内:

外部を {} にします
cdn = { css: [], js: [] } とします。
const isProduction = process.env.NODE_ENV === 'production' // 本番環境かどうかを判定する if (isProduction) {
  外部 = {
      /**
      * 外部オブジェクト属性分析:
      * 「パッケージ名」: 「プロジェクトで導入された名前」
    */
      'vue': 'vue',
      '要素-ui': '要素',
      'xlsx': 'XLSX'
  }
  cdn = {
    css: [
      'https://unpkg.com/element-ui/lib/theme-chalk/index.css' // element-ui css スタイルシート],
    js: [
      // 最初に vue が必要です。
      'https://unpkg.com/[email protected]/dist/vue.js', // vuejs
      'https://unpkg.com/element-ui/lib/index.js', // 要素 UI js
      'https://cdn.jsdelivr.net/npm/[email protected]/dist/xlsx.full.min.js', // xlsx
    ]
  }
}

webpack 構成外部構成項目

Webpack を構成する: {
  //シングルページアプリケーションのタイトルを設定します。ページ名: name,
  外部: 外部、
  解決する: {
    エイリアス: {
      '@': 解決('src')
    }
  }
}

html-webpack-plugin 経由で index.html に挿入されます:

vue.config.js ファイルで設定します。

チェーンWebpack(config) {
  config.plugin('preload').tap(() => [
    {
      rel: 'プリロード',
      ファイルブラックリスト: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
      含める: '初期'
    }
  ])
  //cdn 変数を挿入します (パッケージ化時に実行されます)
  config.plugin('html').tap(args => {
    args[0].cdn = cdn // プラグインにcdnを設定する argsを返す
  })
  // 残りは省略します...
}

public/index.html を見つけて、CDN Config を設定して css と js を順番に挿入します。

ヘッドの内容を次のように変更します。

<ヘッド>
    <メタ文字セット="utf-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1、最大スケール=1、ユーザースケーラブル=いいえ">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= webpackConfig.name %></title>

      <!-- スタイルをインポート -->
      <% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
        <link rel="スタイルシート" href="<%=css%>">
        <% } %>


    <!-- JS をインポート -->
    <% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
      <script src="<%=js%>"></script>
    <% } %>
  </head>

5. console.log をパックして削除する

1. 需要

プロジェクトがパッケージ化されて起動したら、コード内のすべてのconsole.logを削除します。

2. コードデモンストレーション

vue.config.js ファイルで設定します。

コードは次のとおりです(例):

チェーンWebpack(config) {
    config.optimization.minimizer('terser').tap((args) => {
      args[0].terserOptions.compress.drop_console = true
      引数を返す
    })
}

要約する

これで、Vue プロジェクトの最適化とパッケージ化のフロントエンドに不可欠なボーナス項目に関するこの記事は終了です。Vue プロジェクトの最適化とパッケージ化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue.js パッケージ化プロジェクトの後の空白ページの解決策
  • Vueプロジェクトの最適化とパッケージ化の詳細な説明
  • Vueプロジェクトをパッケージ化してリリースする手順
  • Vueプロジェクトのパッケージングと展開の実際のプロセスの記録
  • Vueプロジェクトのパッケージ化の詳細な説明

<<:  DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法

>>:  MySQL 8の新機能である降順インデックスの基礎となる実装の詳細な説明

推薦する

MYSQL スロークエリとログ設定とテスト

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

HTMLは正規表現を使用してテーブルの例をテストします

以下は、HTML で正規表現を使用してテーブルをチェックするサンプル コードです。具体的なコードの内...

Linux sshのデフォルトのリモートポート番号を変更する6つの手順

Linux のデフォルトの ssh リモート ポートは 22 です。デフォルトのポートは、悪意のある...

HTMLページ作成に関する私の経験の簡単な要約

Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...

Mysql5.7.18 のインストールとマスタースレーブレプリケーションの詳細なグラフィック説明

CentOS6.7にmysql5.7.18をインストールする 1. /usr/localディレクトリ...

Nginx リバース プロキシはポート 80 のリクエストを 8080 に転送します

まず、一連の概念を理解しましょう。nginx リバース プロキシとは何でしょうか?リバース プロキシ...

MySQL 作成ルーチン権限に関する注意事項

1. ユーザーにルーチン作成権限がある場合は、プロシージャ | 関数を作成できます。 2. ユーザー...

フレックスレイアウトでコンテナ内のコンテンツを維持するためのソリューションの詳細な説明

モバイル側では、フレックスレイアウトが非常に便利です。デバイスの幅に応じてコンテナの幅を自動的に調整...

Centos7 DockerでNginxファイルを変更するプロセスの詳細な説明

1. docker に nginx をインストールします。 docker に Nginx をインスト...

CentOS に MySQL 5.5 をインストールするための完全な手順

目次1. インストール前の準備、インストールパッケージのダウンロード1 インストールの準備2 インス...

Vue が Ref を使用してレベル間でコンポーネントを取得する手順

VueはRefを使用してレベル間でコンポーネントインスタンスを取得します例の紹介開発プロセスでは、レ...

JS における ES6 継承と ES5 継承の違い

目次継承ES5 プロトタイプ継承ES6 クラス継承両者の違いES5プロトタイプ継承の内部実装ES6 ...

MySQL の列から行への変換、フィールドの結合方法 (必読)

データシート:列から行へ: max(case when then) を使用max---集計関数は最大...

反応ジャンプ後にルートが変更されてもページが更新されない場合の解決策

目次質問解決質問この問題には多くの理由があるようです。私の問題は、パラメータ付きのURLを更新できな...