ホームページ ウェブフロントエンド jsチュートリアル Vue プロジェクトを最適化する方法

Vue プロジェクトを最適化する方法

Jun 08, 2018 am 10:46 AM
vue vueプロジェクトの最適化 最適化

今回は、Vue プロジェクトを最適化する方法と、Vue プロジェクトを最適化する際の注意点について説明します。以下は実際のケースです。見てみましょう。

Vue に似たプロジェクトの開発におけるプロジェクト構造は、基本的に Vue-cli によって生成される方法と似ています。この開発方法では、最も一般的に使用されるモードは、模擬デバッグまたはリモート デバッグのためにエージェントを有効にすることです。 Vue-cli を使用して構成 proxyTable を設定するか、Webpack-dev-server によって提供されるプロキシ オプションを直接使用します。 http-proxy ライブラリを使用するため、特定の設定を表示できます:

https://github.com/nodejitsu/node-http-proxy#options

これらの設定されたパラメータを使用すると、より柔軟な設定を行うことができます。より良い結果を達成する

使用要件

ローカル開発が現在次のステータスにあると仮定します:

  • ローカル開発、データはローカルモックサーバーを使用します

  • 関与する権限インターフェイスはローカルモックデータを使用します他のすべては指定されたリモート マシンを使用します

  • パーミッション インターフェイスはローカルのモック データを使用し、他のデータ サブインターフェイスは異なるリモート マシンを使用します

  • すべてのインターフェイスは同じリモート マシンを使用します

スキーム

まず古典的な proxyTable の記述方法を見てみましょう:

proxyTable: {
 '/authui/': {
  target: target,
  changeOrigin: true
 },
 '/vendor/': {
  target: target,
  changeOrigin: true
 }
}
ログイン後にコピー

changeOrigin フィールドが使用されます。これは主にリクエストのヘッダーを変更するために使用されます。要件の洗練:

  • ローカル開発: ターゲットはローカルホストの特定のポートを指します。ホストの検証に関しては、絶対に必要ありません

  • 一部はローカルで、もう 1 つは固定リモート マシンです。ローカルホストとリモート アドレスを設定する必要があります。ほとんどのリモート アドレスは検証する必要があります。ホスト

  • 2 つと同じですが、マシンには複数のマシンがあります: 複数のマシンを手動で構成する必要があります

  • 同じリモート マシンの場合、現時点ではマシンを厳密に検証する必要がある場合があります。 、IP もドメイン名を使用する必要があり、使用する前にシステム ホストを構成する必要があります

注: ホストを厳密に検証します。通常の検証ホストとの主な違いは、厳密な検証では、要求された URL が要求されたヘッダーのホスト実装は直接変更できません。つまり、ドメイン名はシステム ホスト レベルで構成する必要があります。

特定の要件を分析して完了したら、それらを実装する方法の準備を開始します。元の開発方法は、npm run dev を実行することです。コマンド ライン レベルで構成を追加する必要がある場合は、それを npm run dev --param=paramvalue に設定する必要があります。 >。 npm の script スクリプトを使用して実行されるコマンドの場合、

パラメーターは process.env を通じて取得できず、process.env.npm_config_paramName を通じて取得されます。npm run dev,如果我们需要在命令行层面添加配置,就需要设置为 npm run dev --param=paramvalue 的方式。对于使用 npm 的 script 脚本执行的命令,
它参数的获取无法通过 process.env 获得,而且通过 process.env.npm_config_paramName 既製のコマンドを使用しますline パラメータ解析ライブラリはあまり便利ではありませんが、手間を省くために、当面は npm に付属の解析を使用しています。

リクエスト開始プロセス中に次のパラメータが必要です:

  • host: リクエストを開始するときに参照する必要があるホスト。検証はマシンごとに異なる場合があります。

  • port: によって転送されるポート。プロキシ

  • 受信者: プッシュのリモート アドレスには IP アドレスが含まれています。次に、設定用のプロキシ リクエストのカスタム タイプを定義します。

ローカル アドレス。つまり、localhost

  • remote: 指定されたリモートマシン

  • その他のカスタムタイプ: 設定ファイルで指定されている他のタイプに使用されます

  • リクエストの元のバージョン (例: 'http:// xxx' またはオブジェクト タイプ設定の場合、このタイプのプロキシは処理されません

  • 必要に応じて、プロキシを指すアドレスを制御する次のパラメータを追加します:

rd: リモート マシンのアドレス

  1. focus: 厳密モード、すべてのカスタム タイプ プロキシは指定された rd マシンに変換され、rd パラメーターが存在する場合にのみ使用可能

  2. allLocal: カスタム タイプのプロキシはすべてローカルを指します

  3. host: かどうかを検出するリクエストIP アドレスの代わりにホストを使用します

  4. 概要 見てみましょう (シリアル番号は前の要件を示しています):

アクセスにホストを使用する必要がある状況: 4

  • 需要更改 host:除 localhost 外都需要更改

  • 需要对已有类型进行转换:1: 需要将所有自定义类型都转换为 local, 2和3:什么也不转换,4:所有的自定义类型全部转换为

  • remote 类型

    这么一看,貌似 host 是不需要的,它的存在主要是针对某些 机器可能需要使用 host 的方式,所以还是保留一下。

    实现

    逻辑理清了就很简单了,配置文件设置为:

    module.export = {
     rd1: {
      host: 'dev1.example.com',
      port: 8838,
      receiver: 'http://1.1.1.1:8888/receiver'
     },
     rd2: {
      host: 'dev2.example.com',
      port: 8838,
      receiver: 'http://1.1.1.1:8888/receiver'
     }
    }
    ログイン後にコピー

    proxyTable 配置方式

    {
     proxyTable: {
      '/api1': 'remote',
      '/api2': 'rd2',
      '/auth/xx': 'local',
      '/other': 'http://example.com'
     }
    }
    ログイン後にコピー

    获取 proxyTable 的代码:

    // 处理 proxyTable
    const releaseConfig = require('../config/release.conf.js')
    const rdConfig = releaseConfig[process.env.npm_config_rd]
    const isAllRemote = process.env.npm_config_focus
    const useHost = isAllRemote || process.env.npm_config_host
    // 是否本机开发,本机开发 remote 会指向 local
    const isAllLocal = process.env.npm_config_allLocal
    module.exports = function (proxy) {
     const localUrl = `http://localhost:${proxy.localProxyPort}`
     const defaultHost = proxy.defaultRdHost || 'dev-example.com'
     const localProxyPort = proxy.localProxyPort || 8787
     const finalConfig = formatReleaseConfig(releaseConfig)
     const remote = finalConfig.remote || {}
     if (process.env.npm_config_rd) {
      if (!rdConfig) {
       throw new TypeError('RD 机器名称不存在,请在 config/release.conf.js 中进行配置')
      }
      if (!remote.ip) {
       throw new Error('请配置 rd 机器的 receiver')
      }
     }
     if (isAllRemote && !rdConfig) {
      throw new TypeError('focus 只能在提供了 rd 名称后可设置')
     }
     function formatReleaseConfig (config) {
      const result = {}
      Object.keys(config).map((key) => {
       const value = config[key]
       const ipMatch = (value.receiver || '').match(/:\/\/(.*?):\d/)
       const ip = ipMatch && ipMatch[1]
       result[key] = {
        ip,
        host: value.host || defaultHost,
        port: value.port || '8391'
       }
      })
      // 设置 remote
      if (rdConfig) {
       const ipMatch = (rdConfig.receiver || '').match(/:\/\/(.*?):\d/)
       const ip = ipMatch && ipMatch[1]
       result.remote = {
        ip,
        host: rdConfig.host || defaultHost,
        port: rdConfig.port || '8391'
       }
      }
      // 设置 local
      result.local = {
       ip: 'localhost',
       host: 'localhost',
       port: localProxyPort
      }
      return result
     }
     function setProxy (proxyTable) {
      const result = {}
      Object.keys(proxyTable).forEach((api) => {
       let type = proxyTable[api]
       const isCustomType = typeof type === 'string' && !/^http/.test(type)
       if (isCustomType && type !== 'remote' && type !== 'local' && !finalConfig[type]) {
        throw new TypeError(`代理类型${type}不正确,请提供 http 或 https 类型的接口,或者指定正确的 release 机器名称`)
       }
       if (type === 'remote' && !finalConfig.remote) {
        type = 'local'
       }
       if (isCustomType) {
        if (isAllRemote && type !== 'remote') {
         type = 'remote'
        }
        if (isAllLocal && type !== 'local') {
         type = 'local'
        }
       }
       const targetConfig = finalConfig[type]
       let target = type
       if (targetConfig) {
        target = {
         target: `http://${useHost ? targetConfig.host : targetConfig.ip}:${targetConfig.port}`,
         // 使用 host 时需要转换,其他不需要转换
         headers: {
          host: `${targetConfig.host}:${targetConfig.port}`
         }
        }
       }
       result[api] = target
      })
      return result
     }
     return {
      proxyTable: setProxy(proxy.proxyTable),
      host: remote.host || defaultHost
     }
    }
    ログイン後にコピー

    用法

    用法中需要配置两种指向:系统 host 和浏览器代理 Host。
    之所以要两种 host, 本质上是因为接口使用的域名
    和我们的本地访问的域名是相同的,同一域名无法指向两个地址,所以相当于对浏览器端进行了拦截。
    系统 host 推荐使用 switchHost 进行切换,浏览器推荐使用 whistle 进行切换。

    本地开发

    host 配置:无
    whistle 配置:默认的域名

    127.0.0.1 dev.example.com

    启动命令:

    npm run dev
    npm run dev --allLocal
    ログイン後にコピー

    注: 此时 proxyTable 中配置的 remote 全部转换为 local,在 allLocal 参数时将所有自定义类型转换为 local

    本地 + 1 台远程

    host 配置:无
    whistle 配置:默认的域名
    127.0.0.1 dev1.example.com
    127.0.0.1 dev2.example.com
    ログイン後にコピー

    启动命令:

    npm run dev --rd=rd1
    npm run dev --rd=rd1 --host
    ログイン後にコピー

    注: --host 表示使用访问使用 host 而非 ip,使用时需要 host 地址

    本地 + n 台远程

    host 配置:无

    whistle 配置:默认的域名

    127.0.0.1 dev1.example.com

    127.0.0.1 dev2.example.com

    {
     proxyTable: {
      '/api1': 'rd1',
      '/api2': 'rd2',
      '/auth/xx': 'local',
      '/other': 'http://example.com'
     }
    }
    ログイン後にコピー

    proxyTable 配置:

    启动命令:

    npm run dev
    ログイン後にコピー

    远程 1 台机器

    host 配置:

    1.1.1.1 dev1.example.com
    1.1.1.1 dev2.example.com
    ログイン後にコピー

    whistle 配置:默认的域名

    127.0.0.1 dev1.example.com
    127.0.0.1 dev2.example.com
    ログイン後にコピー

    启动命令:

    npm run dev --rd=rd1 --focus
    ログイン後にコピー

    组件优化

    vue 的组件化深受大家喜爱,到底组件拆到什么程度算是合理,还要因项目大小而异,小型项目可以简单几个组件搞定,甚至不用 vuex,axios 等等,如果规模较大就要细分组件,越细越好,包括布局的封装,按钮,表单,提示框,轮播等,推荐看下 Element 组件库的代码,没时间写这么详细可以直接用 Element 库,分几点进行优化

    •组件有明确含义,只处理类似的业务。复用性越高越好,配置性越强越好。

    •自己封装组件还是遵循配置 props 细化的规则。

    •组件分类,我习惯性的按照三类划分,page、page-item 和 layout,page 是路由控制的部分,page-item 属于 page 里各个布局块如 banner、side 等等,layout 里放置多个页面至少出现两次的组件,如 icon, scrollTop 等

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    redux-thunk实战项目案例详解

    如何使用Angular数据绑定机制

    以上がVue プロジェクトを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホット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ヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

    vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

    VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

    HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

    VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

    Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

    VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

    vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

    Vueによる前のページに戻る方法 Vueによる前のページに戻る方法 Apr 07, 2025 pm 11:30 PM

    vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes< router-link to ="/" Component Window.history.back()、およびメソッド選択はシーンに依存します。

    Vueはマーキー/テキストスクロール効果を実現します Vueはマーキー/テキストスクロール効果を実現します Apr 07, 2025 pm 10:51 PM

    CSSアニメーションまたはサードパーティライブラリを使用して、VUEでマーキー/テキストスクロール効果を実装します。この記事では、CSSアニメーションの使用方法を紹介します。スクロールテキストを作成し、テキストを< div>をラップします。 CSSアニメーションを定義し、オーバーフローを設定します:非表示、幅、アニメーション。キーフレームを定義し、アニメーションの開始と終了時にtranslatex()を設定します。期間、スクロール速度、方向などのアニメーションプロパティを調整します。

    Vueのバージョンを照会する方法 Vueのバージョンを照会する方法 Apr 07, 2025 pm 11:24 PM

    Vue Devtoolsを使用してブラウザのコンソールでVueタブを表示することにより、Vueバージョンを照会できます。 NPMを使用して、「NPM List -G Vue」コマンドを実行します。 package.jsonファイルの「依存関係」オブジェクトでVueアイテムを見つけます。 Vue CLIプロジェクトの場合、「Vue -Version」コマンドを実行します。 < script>でバージョン情報を確認してくださいVueファイルを参照するHTMLファイルにタグを付けます。

    VUEトラバーサルの使用方法 VUEトラバーサルの使用方法 Apr 07, 2025 pm 11:48 PM

    Vue.jsには配列とオブジェクトを通過するには3つの一般的な方法があります。V-Forディレクティブは、各要素をトラバースしてテンプレートをレンダリングするために使用されます。 V-BindディレクティブをV-Forで使用して、各要素の属性値を動的に設定できます。 .mapメソッドは、配列要素を新しい配列に変換できます。

    See all articles