検索

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

Sep 07, 2017 pm 01:45 PM
最適化どうやってプロジェクト

数日前、Vue プロジェクトが大きくなるほど最適化が難しくなり、多くの苦痛が生じると言っているのを見かけましたが、これは最終的には解決されるべき問題であり、パフォーマンスには問題ありません。すべての主要なテスト Web サイトには関連データがあります。本題に入りましょう

基本的な最適化

いわゆる基本的な最適化は、あらゆる Web プロジェクトに必要であり、問​​題の根本です。 HTML、CSS、および JS は、それぞれ .vue ファイル内の最適化のポイントに対応します。

<template>,<style>,<script>

,下面逐个谈下 vue 项目里都有哪些值得优化的点

template

语义化标签,避免乱嵌套,合理命名属性等等标准推荐的东西就不谈了。

模板部分帮助我们展示结构化数据,vue 通过数据驱动视图,主要注意一下几点

  • v-show,v-if 用哪个?在我来看要分两个维度去思考问题,第一个维度是权限问题,只要涉及到权限相关的展示无疑要用 v-if,第二个维度在没有权限限制下根据用户点击的频次选择,频繁切换的使用 v-show,不频繁切换的使用 v-if

    const Foo = r => require.ensure([], () => r(require('./Foo.vue')), 'group-foo')
    const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo')
    const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo')
    v-if
  • では、vue プロジェクトで最適化する必要があるポイントについて 1 つずつ説明します。 1 つ
  • テンプレート

    セマンティック タグ、ランダムなネストの回避、属性の合理的な命名、およびその他の標準的な推奨事項については説明しません。 テンプレート パーツは構造化データの表示に役立ちます。Vue は次の点に注意してください。

      🎜🎜v-show、v-if どれを使用しますか?私の考えでは、問題は 2 つの次元で考える必要があります。1 つ目の次元は、パーミッション関連の表示が関係する限り、間違いなくユーザーの頻度に基づいて選択されることになります。頻繁な切り替え 🎜 v-show🎜 の使用、低頻度の切り替え 🎜 の使用、ここで言及する最適化ポイントは、ページ内のページ数を減らすことです。 DOM の総数については、DOM の数が減り、最初の画面のレンダリングが高速化されるため、🎜 を使用することを好みます。パフォーマンスに関しては、レンダリングの切り替えプロセスが目に見えないように感じます。ユーザーエクスペリエンスには影響しません。 🎜🎜🎜🎜テンプレートに表現や判断を書きすぎないでください 🎜v-if="isShow && isAdmin && (a || b)"🎜、この式は認識できますが、長期的な解決策ではありません。不快に見える場合は、適切にメソッドに記述し、計算してメソッドにカプセル化します。これは、複数の場所で同じ式を判定するのに便利であり、同じ権限を持つ他の要素が判定および表示するときに同じメソッドを呼び出すことができます🎜。
  • ループ内でサブコンポーネントを呼び出すときにキーを追加します。キーはループを個別に識別できます。たとえば、item.id を次のように使用できます。 key、配列データが次のような場合 ['a' , 'b', 'c', 'a'],使用 :key="item" より良い方法はループすることです (item, Index) を arr に追加し、次に :key="index":key="index"

    を使用してキーの一意性を確保します。

style
  • スタイル ファイルを vue ファイルの内側または外側に置きますか?議論しても意味がありません。重要なのは、vue ファイル内にコードを記述して、内部または外部の提案に関係なく追加することです。 .header-title__text スタイルファイルをロックする目的は非常に単純です。どんなに使いやすい標準であっても、合意された名前付けルールが競合する可能性は避けられません。短い命名規則を使用するため、 .title.header -title__text

    などは必要ありません。 クラス、直接
  • .title
  • 前の記事と区別するために、グローバル スタイル ファイルについて説明します。グローバル スタイル ファイルは、すべてのコンポーネントで繰り返されるものではないため、できるだけ一般的なものにする必要があります。この部分の抽象化が優れているほど、スタイル ファイルのサイズが小さくなり、再利用率が高くなります。コピーしたElement styleなどのコンポーネントライブラリのコードをグローバルに入れることを推奨します。

    .clear,现在的浏览器还不至于弱到非要用 floatfloat レイアウトは使用しないでください。以前に多くの人がそれをカプセル化しているのを見てきました

    .fl -- float: left
  • グローバル ファイルに移動し、次に
.clear

を実行します。今日のブラウザは、互換性のために

float

を使用する必要があるほど弱くはありません。 実際、Flex と Grid の互換性は平均的であり、Float レイアウトでも機能を実装できますが、これを使用したことがある人なら、この説明がわかりにくいとは思わないでしょう。

🎜その他の一般的な仕様については、ここでは詳しく説明しません。関連記事がたくさんあります。 🎜🎜script🎜🎜 この部分は最適化するのが最も難しい部分でもあります。私の個人的な意見を言わせてください。 🎜
  • 複数人で開発する場合は、対応するメソッドを見つけやすくするために、各コンポーネント内のメソッドの順序を一貫して保つようにしてください export default {}。私の個人的な習慣 データ、プロップ、フック、ウォッチ、計算済み、コンポーネント。

  • データで言いたいのは、初期化されたデータの構造はできるだけ詳細で、明確な名前が付けられ、シンプルで理解しやすく、無駄な変数を避ける必要があるということです。 isEditing は実際には true または 2 つの状態を表すことができます。 false。表示を制御するために notEditing を定義しないでください。テンプレート内で実行できます {{ isEditing ? 編集中: 保存}}

  • props 親コンポーネントと子コンポーネントに値を渡すときは、:width="" :heigth="" 不要 :option={}:width="" :heigth=""

    しないようにしてください。改良の利点は、サブコンポーネント内で、渡す必要のある変更のみがパラメータとして渡されることです。 データ型、渡す必要があるかどうか、およびデフォルト値を props に追加して、エラーのトラブルシューティングを容易にし、値の送信をより厳密にします。
  • フックは、ライフサイクルの意味、いつリクエストされるべきか、いつメソッドをログアウトすべきか、どのメソッドをログアウトする必要があるかを理解する必要があるだけです。シンプルでわかりやすく、公式サイトに書かれています。
  • メソッドの各メソッドはシンプルでなければならず、パラメータが多すぎない短くて再利用可能なメソッドをカプセル化するようにしてください。開発に lodash に大きく依存している場合、メソッドははるかに単純に見えますが、プロジェクトで少数のメソッドのみが使用されている場合は、loadsh をローカルに導入できます。 lodash を使用したい場合は、util.js ファイルを自分でカプセル化できます
  • どちらを使用するかについては、計算された属性は主にフィルター変換のレイヤーを参照してください。いくつかの呼び出しメソッドを追加しないでください。watch の機能は、データの変更を監視したり、this.$store などのイベントをトリガーしたりすることです。 { ... })

コンポーネントの最適化

vue のコンポーネント化は、プロジェクトの規模によって異なりますが、少数のコンポーネントだけで完了することもできます。 vuex、axios などは必要ありません。規模が大きい場合は、レイアウトのカプセル化、ボタン、フォーム、プロンプト ボックス、カルーセルなどを含むコンポーネントを細分化する必要があります。このような詳細については、Element ライブラリを直接使用して、いくつかの点で最適化することができます。コンポーネントには明確な意味があり、同様のビジネスのみを処理します。再利用性が高いほど優れており、構成可能性が強いほど優れています。
  • コンポーネントを自分でカプセル化するか、props 改良を構成するルールに従うか。
  • コンポーネントの分類は、ページ、ページアイテム、レイアウトの3つのカテゴリに分けられます。ページは、バナー、サイドなどのページ内の各レイアウトブロックに属するページです。アイコン、scrollTop など、複数のページに少なくとも 2 回表示されるコンポーネント。
  • vue-router と vuex の最適化
vue-router ルートの切り替えに加えて、最も一般的に使用されます。ロジックはアクセス許可を処理するためのものであり、ここではアクセス許可を制御することはできません。最適化に関して言えば、言及する価値があるのはコンポーネントの遅延読み込みです。

中午官网链接如上,例子如下

const Foo = r => require.ensure([], () => r(require('./Foo.vue')), 'group-foo')
const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo')
const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo')

这段代码将 Foo, Bar, Baz 三个组件打包进了名为 group-foo 的 chunk 文件,当然啦是 js 文件

其余部分正常写就可以,在网站加载时会自动解析需要加载哪个 chunk,虽然分别打包的总体积会变大,但是单看请求首屏速度的话,快了好多。

vuex 面临的问题和解决方案有几点

  • 当网站足够大时,一个状态树下,根的部分字段繁多,解决这个问题就要模块化 vuex,官网提供了模块化方案,允许我们在初始化 vuex 的时候配置 modules。每一个 module 里面又分别包含 state 、action 等,看似是多个状态树,其实还是基于 rootState 的子树。细分后整个 state 结构就清晰了,管理起来也方便许多。

  • 由于 vuex 的灵活性,带来了编码不统一的情况,完整的闭环是 store.dispatch('action') -> action -> commit -> mutation -> getter -> computed,实际上中间的环节有的可以省略,因为 API 文档提供了以下几个方法 mapState、mapGetters、mapActions、mapMutations,然后在组件里可以直接调取任何一步,还是项目小想怎么调用都可以,项目大的时候,就要考虑 vuex 使用的统一性,我的建议是不论多简单的流程都跑完整个闭环,形成代码的统一,方便后期管理,在我的组件里只允许出现 dispatch 和 mapGetters,其余的流程都在名为 store 的 vuex 文件夹里进行。

  • 基于上面一条,说下每个过程里面要做什么,前后端数据一定会有不一致的地方,或是数据结构,或是字段命名,那么究竟应该在哪一步处理数据转换的逻辑呢?有人会说其实哪一步都可以实现,其实不然,我的建议如下

  1. 在发 dispatch 之前就处理好组件内需要传的参数的数据结构和字段名

  2. 到了 action 允许我们做的事情很多,因为这部支持异步,支持 state, rootState, commit, dispatch, getters,由此可见责任重大,首先如果后端需要部分其他 module 里面的数据,要通过 rootState 取值再整合到原有数据上,下一步发出请求,建议(async await + axios),拿到数据后进行筛选转换,再发送 commit 到 mutation

  3. 这一步是将转换后的数据更新到 state 里,可能会有数据分发的过程(传进一个 object 改变多个 state 中 key 的 value),可以转换数据结构,但是尽量不做字段转换,在上一步做

  4. 此时的 store 已经更新,使用 getter 方法来取值,token: state => state.token,单单的取值,尽量不要做数据转换,需要转换的点在于多个地方用相同的字段,但是结构不同的情况(很少出现)。

  5. 在组件里用 mapGetters 拿到对应的 getter 值。

打包优化

上面说了代码方面的规范和优化,下面说下重点的打包优化,前段时间打包的 vender bundle 足足 1.4M,app bundle 也有 270K,app bundle 可以通过组件懒加载解决,vender 包该怎么解决?

有人会质疑是不是没压缩或依赖包没去重,其实都做了就是看到的 1.4M。

解决方法很简单,打包 vender 时不打包 vue、vuex、vue-router、axios 等,换用国内的 bootcdn 直接引入到根目录的 index.html 中。

例如:

<script></script>
<script></script>
<script></script>
<script></script>

在 webpack 里有个 externals,可以忽略不需要打包的库

externals: {  
    'vue': 'Vue',  
    'vue-router': 'VueRouter',  
    'vuex': 'Vuex',  
    'axios': 'axios'
}

此时的 vender 包会非常小,如果不够小还可以拆分其他的库,此时增加了请求的数量,但是远比加载一个 1.4M 的 bundle 快的多。

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

node.jsは、型を使用してストリーミングしますnode.jsは、型を使用してストリーミングしますApr 30, 2025 am 08:22 AM

node.jsは、主にストリームのおかげで、効率的なI/Oで優れています。 ストリームはデータを段階的に処理し、メモリの過負荷を回避します。大きなファイル、ネットワークタスク、リアルタイムアプリケーションの場合。ストリームとTypeScriptのタイプの安全性を組み合わせることで、パワーが作成されます

Python vs. JavaScript:パフォーマンスと効率の考慮事項Python vs. JavaScript:パフォーマンスと効率の考慮事項Apr 30, 2025 am 12:08 AM

PythonとJavaScriptのパフォーマンスと効率の違いは、主に以下に反映されています。1)解釈された言語として、Pythonはゆっくりと実行されますが、開発効率が高く、迅速なプロトタイプ開発に適しています。 2)JavaScriptはブラウザ内の単一のスレッドに限定されていますが、マルチスレッドおよび非同期I/Oを使用してnode.jsのパフォーマンスを改善でき、両方とも実際のプロジェクトで利点があります。

JavaScriptの起源:その実装言語の調査JavaScriptの起源:その実装言語の調査Apr 29, 2025 am 12:51 AM

JavaScriptは1995年に発信され、Brandon Ikeによって作成され、言語をCに実現しました。 2。JavaScriptのメモリ管理とパフォーマンスの最適化は、C言語に依存しています。 3. C言語のクロスプラットフォーム機能は、さまざまなオペレーティングシステムでJavaScriptを効率的に実行するのに役立ちます。

舞台裏:JavaScriptをパワーする言語は何ですか?舞台裏:JavaScriptをパワーする言語は何ですか?Apr 28, 2025 am 12:01 AM

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター