抽象的な: Vue3 の新バージョンのコンセプトは、Vue 2 がリリースされてからすでに 2 年半が経過していた 2018 年末に形成されました。一般的なソフトウェアのライフサイクルと比較すると、それほど長くはないようです。Vue3は2020年に正式リリースされ、ソースコードとAPIに大きな変更が加えられました。パフォーマンスが大幅に向上し、Vue2.xよりも1.2〜2倍高速になりました。 その中でも特に重要な利点は次のとおりです。 diff アルゴリズムの最適化: vue3 の利点について詳しく説明しましょう。 利点1: diffアルゴリズムの最適化Vue2 の仮想 DOM は完全な比較です (ハードコードされているか動的であるかにかかわらず、各ノードはレイヤーごとに比較されるため、静的ノードの比較にほとんどのイベントが無駄になります) Vue3 では静的フラグ ( たとえば、次のテンプレートには 3 つの段落を持つ div が含まれています。最初の 2 つの段落は静的で固定されていますが、3 番目の段落の内容は <div> <p>クラウドレジデンス共創</p> <p>vue3 を評価する方法</p> <p>{{メッセージ}}</p> </div> ビューが更新されると、動的ノードのみが比較されるため、リソースの消費が削減されます。 利点2: ホイスト静的静的リフティングVue2 は、要素が更新に参加しているかどうかに関係なく、毎回再作成してレンダリングします。更新に参加しない要素については、Vue3 は静的プロモーションを実行します。これらは一度だけ作成され、レンダリング中に直接再利用できます。たとえば、 <div> <div>共創 1</div> <div>共創 2</div> <div>{{名前}}</div> </div> 静的リフティングの前 エクスポート関数render(...) { 戻る ( _openBlock(), _createBlock('div', null, [ _createVNode('div', null, '共同作成1'), _createVNode('div', null, '共創2'), _createVNode( 'div', ヌル、 _toDisplayString(_ctx.name)、 1 /* テキスト */ )、 ]) ) } 静的リフティング後 const _hoisted_1 = /*#__PURE__*/ _createVNode( 'div', ヌル、 「共創1」、 -1 /* 持ち上げられました */ ) const _hoisted_2 = /*#__PURE__*/ _createVNode( 'div', ヌル、 「共創2」 -1 /* 持ち上げられました */ ) エクスポート関数render(...) { 戻る ( _openBlock(), _createBlock('div', null, [ _hoisted_1、 _hoisted_2、 _createVNode( 'div', ヌル、 _toDisplayString(_ctx.name)、 1 /* テキスト */ )、 ]) ) } 上記のコードから、_hoisted_1 メソッドと 利点3: cacheHandlers イベントリスナーキャッシュvue2.x では、バインドされたイベントがトリガーされるたびに新しい デフォルトでは、 たとえば、 <div> <div @click="todo">何か楽しいことをする</div> </div> コンパイル後、この エクスポート関数render(...) { 戻り値 (_openBlock(),_createBlock('div', null, [ _createVNode('div',{ onClick: _ctx.todo}, '何か面白いことをする', 8 /* PROPS */, ['onClick'])、 ]) ) } イベント リスナーのキャッシュをオンにすると、次のようになります。 エクスポート関数render(...) { 戻り値 (_openBlock(),_createBlock('div', null, [ _createVNode('div',{ onClick: //監視を有効にした後_cache[1] || (_cache[1] = (...args) =>_ctx.todo(...args)), },'何か面白いことをする'), ]) ) } イベントリスニングキャッシュをオンにする前と後のコードを比較することができます。変換後のコードは理解できないかもしれませんが、それは問題ではありません。静的タグがあるかどうかを観察するだけです。Vue3 の diff アルゴリズムでは、静的タグがあるものだけが比較され、追跡されます。 利点4: SSRレンダリングVue2 にも SSR レンダリングがありますが、Vue3 の SSR レンダリングは Vue2 に比べてパフォーマンスが向上しています。 静的コンテンツが大量にある場合、このコンテンツは純粋な文字列として 静的コンテンツが十分に大きい場合、 利点5: より優れたTsサポートVue2 は vue2とtsを組み合わせる具体的な実践では、 vue3 では、 'vue' から {defineComponent, ref} をインポートします。 const コンポーネント = defineComponent({ 小道具: { 成功: { 型: 文字列 }, 学生: タイプ: PropType<Student> としてのオブジェクト、 必須: true } }, 設定() { 定数年 = ref(2020) const month = ref<文字列 | 数値>('9') month.value = 9 // OK 定数結果 = year.value.split('') } 利点6: コンポジションAPI: コンビネーションAPI/インジェクションAPI従来の Web ページは vue3 では、 './counter' から useCounter をインポートします。 './todos' から useTodo をインポートします 設定(){ { val, todos, addTodo } = useTodo() とします let { count, add } = useCounter() 戻る { val、todos、addTodo、 数える、追加する、 } 利点7: より高度なコンポーネントVue2 では、このような記述は許可されていません。コンポーネントにはルート ノードが必要です。このように記述すると、Vue が仮想 <テンプレート> <div>Huawei クラウド エキスパート</div> <div>フルスタックブロガー</div> </テンプレート>
利点8: カスタムレンダリングAPI vue2.x プロジェクトのアーキテクチャは、weex (モバイル デバイス用のクロスプラットフォーム ソリューション) や vue2: 'vue' から Vue をインポートします './App.vue' からアプリをインポートします。 新しい Vue({ => h(App)}).$mount('#app') vue3: 'vue' からの const { createApp } 「./src/App」からアプリをインポートします。 createApp(App).mount(('#app') vue によって公式に実装された 「./runtime-render」から {createApp} をインポートします。 import App from "./src/App"; // ルートコンポーネント createApp(App).mount('#app');
利点 9: オンデマンドでコンパイル、vue2.x よりもサイズが小さいフレームのサイズもパフォーマンスに影響します。これは Web アプリケーションに特有の懸念事項です。リソースはオンザフライでダウンロードする必要があるため、ブラウザーが必要な JavaScript を解析するまでアプリケーションは対話型になりません。これは特にシングルページ アプリケーションの場合に当てはまります。 Vue は常に比較的軽量です (Vue 2 のランタイム サイズは圧縮後 23 KB です)。 Vue 3 では、ほとんどのグローバル API と内部ヘルパーを ES モジュール エクスポートに移動することでこれを実現しました。これにより、最新のバンドラーはモジュールの依存関係を静的に分析し、未使用のエクスポート関連コードを削除できるようになります。テンプレート コンパイラは、使いやすい フレームワークの一部は、あらゆる種類のアプリケーションに不可欠であるため 利点10: 複数のルートノードコンポーネントをサポートするVue3 では、テンプレートは複数のルートノードに制限されなくなりました。 (複数のルートノードでの Vue 3 では、コンポーネントはマルチルート コンポーネント (フラグメントとも呼ばれます) を正式にサポートするようになりました。 2.x では、マルチルート コンポーネントはサポートされておらず、ユーザーが誤ってマルチルート コンポーネントを作成すると警告が出されました。このバグを修正するために、多数のコンポーネントが 1 つにラップされました。次のように <テンプレート> <div> <ヘッダー>...</ヘッダー> <メイン>...</メイン> <フッター>...</フッター> </div> </テンプレート> 3.x では、コンポーネントに複数のルート ノードを設定できるようになりました。ただし、この場合、開発者は属性をどこに配布するかを明示的に定義する必要があります。 <テンプレート> <ヘッダー>...</ヘッダー> <main v-bind="$attrs">...</main> <フッター>...</フッター> </テンプレート> 要約:
これで、vue2 に対する vue3 の利点に関するこの記事は終了です。vue2 に対する vue3 の利点の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linuxはlsof/extundeleteツールを使用して、誤って削除されたファイルやディレクトリを復元します。
>>: MySQLのストレージエンジンについてお話しましょう
Web デザイン 5 におけるシンプルな XHTML Web フォーム。 テクニック 1: ラベル ...
文書タイプDoctype は、指示を解析するためにどのバージョンの HTML を使用するかをブラウザ...
フローティング広告は、ウェブサイト上で非常に一般的な広告形式です。フローティング広告は、ユーザーの閲...
最近、会社初のミニプログラムの開発に参加しました。開発経験は基本的にWebViewをベースとしたハイ...
CSS は、スクロールを許可しながらスクロール バーを非表示にするために Overflow を設定し...
第1章: keepalivedの紹介VRRP プロトコルの目的は、静的ルーティングの単一点障害問題を...
1. 需要正しい Cookie 配信と SSO テストを確実に実行できるように、ローカル テスト ド...
今日、slave_exec_modeというパラメータを偶然見ました。マニュアルの説明から、このパラメ...
これはネイティブ JS で実装されたテキスト スクロール効果です。この効果は通常、ニュース、ダイナミ...
基礎リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジ...
MySQL へのリモート接続が失敗する場合は、次の理由が考えられます。 1. 若い男性/女性の方は、...
1. イメージをプルするdocker pull レジストリ.cn-hangzhou.aliyuncs...
どのような製品について言及したいですか?最近、ユーザーがマーケティングの変化をよりよく観察できるよう...
1. Webページを開くと503サービス利用不可が表示されますが、更新すると正常にアクセスできます。...
目次セットは値が重複しない特別なコレクションです。セットコレクション基本API独自の価値判断セットを...