uniapp プロジェクトの最適化方法と提案

uniapp プロジェクトの最適化方法と提案

1. 複雑なページデータ領域をコンポーネントにカプセル化する

シナリオ:

たとえば、プロジェクトには次のようなフォーラム ページが含まれています。いいね アイコンをクリックすると、いいねの数がすぐに 1 増加し、ページ レベルのすべてのデータが js レイヤーからビュー レイヤーに同期され、ページ全体のデータが更新されるため、クリックの遅延やフリーズが発生します。

最適化計画:

複雑なページの場合、特定の領域のデータを更新するときは、その領域をコンポーネントにして、データの更新時にこのコンポーネントのみが更新されるようにする必要があります。

注: app-nvue と h5 にはこの問題はありません。違いが生じる理由は、アプレットが現在コンポーネントの違いを更新するためのメカニズムのみを提供しており、すべてのページの違いを自動的に計算できないためです。

2. 大きな画像の使用を避ける

シナリオ:

ページで大量の大きな画像リソースが使用されている場合、ページの切り替えが停止し、システム メモリが増加し、白い画面がクラッシュすることもあります。また、大きなバイナリ ファイルの base64 変換もリソースを大量に消費します。

最適化計画:

使用前に画像を圧縮し、大きな画像の使用は避け、必要に応じてスプライトまたは SVG の使用を検討してください。簡単なコードで目的の結果が得られた場合は、画像を使用しないでください。

3. ミニプログラムとアプリはサブパッケージ内のページを多すぎるほど処理する

設定を確認するには、公式ウェブサイトのマニュアルをご覧ください。

4. 画像の遅延読み込み

機能説明:
この機能は、WeChat ミニプログラム、アプリ、Baidu ミニプログラム、ByteDance ミニプログラムでのみ有効です。デフォルトで有効になっています。設定を確認するには、uView マニュアルを参照してください。

5. ローカルストレージの悪用を禁止する

ローカル ストレージを乱用しないでください。ローカル ページ間でパラメータを渡すには URL を使用します。ローカル ストレージを使用してデータを渡す場合は、標準化された方法で名前を付け、必要に応じて破棄する必要があります。

6. 変数は外部で定義できる

uni-app では、data で定義されたデータは、変更されるたびにページを再レンダリングするようにビュー レイヤーに通知します。そのため、変数がビューで必要ない場合は、data で定義できます。変数を外​​部で定義するか、vue インスタンスに直接マウントして、リソースの無駄を省くことができます。

7. ページのレンダリングを最適化するためにデータを一括で読み込む

シナリオ:
ページが初期化されると、ロジック層は一度に大量のデータをビュー層に渡し、ビュー層は一度に多数のノードをレンダリングすることになり、通信が遅くなり、ページの切り替えが停止する可能性があります。

最適化計画:
ページを部分的に更新してレンダリングします。たとえば、サーバーが 100 個のデータを返す場合、一度に 50 個ずつバッチで読み込むことができ、次の読み込みは 500 ミリ秒後に実行されます。

8. ビュー層とロジック層の間の頻繁な通信を避ける

  • スクロール ビュー コンポーネントのスクロール イベント監視を減らします。スクロール ビュー コンポーネントのスクロール イベントを監視すると、ビュー レイヤーはロジック レイヤーに頻繁にデータを送信します。
  • scroll-view コンポーネントのスクロール イベントを監視する場合、scroll-top / scroll-left プロパティをリアルタイムで変更しないでください。スクロールを監視する場合はビュー レイヤーがロジック レイヤーと通信し、scroll-top / scroll-left を変更する場合はロジック レイヤーがビュー レイヤーと通信するため、通信が滞るおそれがあります。
  • onPageScroll の使用に注意してください。onPageScroll がリッスンしているとき、ビュー レイヤーはロジック レイヤーに頻繁にデータを送信します。
  • アニメーションのインターフェースを操作するためにJSタイマーを使用する代わりに、より多くのCSSアニメーションを使用します。
  • キャンバスでハンドトラッキング操作を行う必要がある場合は、アプリ側ではrenderjsを使用し、ミニプログラム側ではweb-viewコンポーネントを使用することをお勧めします。web-viewのページにはロジック層とビュー層の分離という概念がないため、当然通信ロスは発生しません。

9. CSSの最適化

フォント、フォントの色、テキスト サイズなど、どのプロパティが継承された効果を持つかを知る必要があります。意味のないコードを繰り返さないでください。

10. 絞りと手ぶれ補正を有効活用する

画像安定化:
関数を実行する前に n 秒間待機します。待機期間中に再度トリガーされた場合、待機時間は再初期化され、調整されます。
トリガー イベントは n 秒以内に 1 回だけ実行されます。n 秒が経過していない場合、次のトリガーは無効になります。

11.ページ切り替えアニメーションを最適化する

シナリオ:
ページが初期化されると、大量の画像やネイティブコンポーネントのレンダリングと大量のデータ通信が発生します。新しいページのレンダリングとフォーム入力アニメーションがリソースを競合し、ページの切り替えが停止したり、フレームがドロップしたりします。

最適化計画:

  • 画像や複雑なネイティブコンポーネントをレンダリングする場合は 100 ミリ秒~ 300 ミリ秒遅延し、データ通信をバッチで実行して一度にレンダリングされるノードの数を減らすことをお勧めします。
  • アプリ側のアニメーション効果はカスタマイズできます。ポップイン/ポップアウトデュアルウィンドウリンク押し出しアニメーション効果は、より多くのリソースを消費します。アニメーション中にページが時間のかかるjsを実行している場合、アニメーションのフレームがドロップされる可能性があります。この場合、slide-in-right / slide-out-rightなどのリソースの消費が少ないアニメーション効果を使用できます。
  • App-nvueとH5は、ページプリロード、uni.preloadPageもサポートしており、より優れたユーザーエクスペリエンスを提供できます。

12.背景色をフラッシュホワイトに最適化する

シナリオ:
新しいページに入ると、背景が白く点滅します。ページの背景が暗い場合、新しいフォームは Vue ページで灰色がかった白の背景でアニメーションを開始し、アニメーションが終了すると暗い背景に変わり、フラッシュ スクリーンが発生します。

最適化計画:

App.vue でスタイルを記述すると、ページ スタイルのレンダリングが高速化されます。App.vue のスタイルはグローバル スタイルです。新しいページが開かれるたびに、最初に App.vue のスタイルが読み込まれ、次に通常の vue ページのスタイルが読み込まれます。

アプリは、pages.jsonのページのスタイルでページのネイティブ背景色を個別に設定することもできます。たとえば、globalStyle->style->app-plus->backgroundでグローバル背景色を設定します。

"スタイル": { "アプリプラス": { "背景":"#000000" } }

nvueページにはこの問題はなく、nvueページに変更することもできます

13. 起動速度を最適化する

  • 背景画像やローカルフォントファイルなど、プロジェクトコードが増えるほどサイズが大きくなり、ミニプログラムの起動速度に影響します。サイズの制御に注意する必要があります。
  • アプリ側のスプラッシュ画面には白画面検出機構があります。ホームページが常に白の場合や、ホームページ自体が空の転送ページの場合、スプラッシュ画面が閉じるまでに10秒かかることがあります。
  • アプリが v3 コンパイラを使用し、ホームページが nvue ページであり、高速起動モードに設定されている場合、この時点でアプリは最も速く起動します。

アプリは純粋なnvueプロジェクトとして設定されます(マニフェストのapp-plusの下でrenderer: "native"を設定します)。この種類のプロジェクトは、アプリケーション全体でネイティブレンダリングを使用し、Webviewに基づくフレームワークをロードしないため、起動が速く、2秒で起動できます。

14. パッケージサイズを最適化する

  • uni-app をミニプログラムにリリースする場合、es6 から es5 へのコンパイルや css のアライメント機能を使用するとコードサイズが大きくなる場合があります。これらのコンパイル機能を有効にするかどうかを設定できます。
  • uni-app の H5 側では、uni-app はツリー シェイキング最適化メカニズムを提供します。ツリー シェイキング最適化前の uni-app の全体的なパッケージ サイズは約 500k で、サーバー上で gzip 展開後は 162k になります。ツリーシェイクの最適化を有効にするには、マニフェストで設定する必要があります。
  • uni-appのアプリ側、Android基本エンジンは約9Mです。アプリは、マップ、Bluetoothなどの拡張モジュールも提供します。これらのモジュールがパッケージ化中に必要ない場合は、配布パッケージを減らすために切り取ることができます。サイズはmanifest.json-Appモジュールの権限で選択できます。
  • アプリは、純粋なnvueプロジェクトを選択した場合(マニフェストのapp-plusの下でrenderer:"native"を設定)、パッケージサイズをさらに約2M削減できることをサポートしています。
  • HBuilderX 2.7以降、アプリ側で非v3コンパイルモードが削除され、パッケージサイズが3M減少しました。

15. 外部jsプラグインの悪用を禁止する

説明する:
公式 API がある場合は、プロジェクト サイズを増やすために追加の js プラグインを追加しないでください。例:
URL を暗号化するには、encodeURIComponent() と decodeURIComponent() を使用します。

ユニアプリプロジェクトの最適化方法と提案に関するこの記事はこれで終わりです。ユニアプリプロジェクトの最適化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。皆様が今後も 123WORDPRESS.COM を応援してくれることを願っています。

以下もご興味があるかもしれません:
  • vscodeを使用してuniappを開発する方法
  • uniapp パッケージ化されたアプレット レーダー チャート コンポーネントの完全なコード
  • uniappを使用してWeChatミニプログラムでEChartsを使用する方法
  • uniappがインターフェースドメイン名を動的に取得する方法を分析する
  • uniapp 要素ノードスタイルの動的変更の詳細な説明

<<:  Ubuntu ベースのディストリビューションに Microsoft TrueType フォントをインストールするチュートリアル

>>:  MySQL の計画タスクとイベント スケジュール例の分析

推薦する

CentOS/RHEL システムで VLAN タグ付きイーサネット カードを使用する方法

シナリオによっては、Linux サーバー (CentOS/RHEL) の同じイーサネット カード (...

Node.jsはexpress-fileuploadミドルウェアを使用してファイルをアップロードします

目次プロジェクトを初期化するサーバーの作成クライアントを初期化するコンポーネントの記述ファイルアップ...

大規模な MySQL テーブルに対する count() の実装を最適化しました

以下は、B+ ツリーのデータ構造と実験結果からの推測に基づいた私の判断です。間違いがあればご指摘くだ...

Nginx リバース プロキシを使用して go-fastdfs を実行する例

背景go-fastdfs は、http プロトコルをサポートする分散ファイルシステムです。一般的なプ...

MySQL を使用して Excel でデータ生成を完了する方法

Excel は、データ分析に最もよく使用されるツールです。この記事では、MySQL と Excel ...

HTML におけるいくつかの特殊属性タグの使用法の紹介

以下の属性はブラウザとの互換性があまりありません。 1.transform:rotate(45度) ...

VSCode 開発 UNI-APP 構成チュートリアルとプラグイン

目次前面に書かれた予防開発環境構築開発構成に関する注意事項前面に書かれたuni-app は、Vue....

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

Vue+elementUI コンポーネントは、折りたたみ可能な動的レンダリングのマルチレベル サイドバー ナビゲーションを再帰的に実装します。

かなり前に実装された機能ですが、クリックすると選択したメニュー項目の背景色が白くなることに気付きまし...

TomcatをダウンロードしてLinuxにインストールする詳細な手順

Linux に触れたばかりの方には、この内容が役に立つかもしれません。Linux にしばらく触れてい...

MySQL でパーセンテージと最初の数パーセントを表示する方法

目次必要とする実装コードデータベース数日前、友人からこれを書くのを手伝ってほしいと頼まれました。ただ...

MySQL の sql_mode モード例の詳細な説明

この記事では、MySQL の sql_mode モードについて例を挙げて説明します。ご参考までに、詳...

HTML テーブルタグチュートリアル (21): 行の境界線の色属性 BORDERCOLOR

テーブルを美しくするために、行ごとに異なる境界線の色を設定できます。基本的な構文<TR 境界線...

画像のプリロードと遅延ロードを実装するJavaScript

この記事では、JavaScriptで画像のプリロードと遅延ロードを実装するための具体的なコードを参考...