ミニプログラムの動作メカニズムの簡単な分析
執筆の背景
私はしばらく小さなプログラムに触れてきました。一般に、小さなプログラムを開発する敷居は比較的低いですが、それでも基本的な操作を理解する必要があります。仕組みと原理。 「たとえば、面接中にミニ プログラムについて質問されました。ミニ プログラムにはウィンドウ オブジェクトがありますか? 彼はそうですと答えました。」しかし、実際にはありません。ミニプログラムの根本的な部分が理解できていない感じで、最終的にはこのツールしか使えないのですが、その理由が分かりません。
ミニ プログラムは、技術アーキテクチャの根本から分析する必要がある通常の Web 開発とは大きく異なります。たとえば、Vue や React の開発に慣れている開発者は、ミニ プログラム用に新しいページを作成するのが面倒で、ページは複数のファイルで構成する必要があり、コンポーネントのサポートが不完全で、データ内のデータが毎回更新されるなどの煩わしさに不満を抱くでしょう。変更された場合、setData を設定する必要があります Vue ほど便利ではありません 監視があり、Dom を操作できないため、複雑なシナリオには適していません 以前は npm、sass、およびプリコンパイルの少ない処理言語をサポートしていませんでした
「ミニプログラムは去勢された Vue のようなものだと言う人もいます(笑)。もちろん、設計の出発点は異なります。また、ミニプログラムの設計の本来の意図を理解する必要があります。その使用シナリオを通じて、なぜこの技術アーキテクチャが採用されているのか、この技術アーキテクチャの利点は何なのか、これを理解すると理解できると思います。以下では、ミニプログラムの動作メカニズムとその全体的な技術アーキテクチャを次の観点から分析します。
ミニ プログラムの起源を理解する
ミニ プログラムが登場する前に、WeChat WebView は徐々にモバイル Web への重要な入り口になってきました。WeChat は Web 開発の完全なセットをリリースしました。 JS-SDK と呼ばれるこのツールは、すべての Web 開発者に新しいウィンドウを開き、すべての開発者が WeChat のネイティブ機能を使用して、以前は不可能または困難であったことを実現できるようにします。
ただし、JS-SDK モデルでは、デバイスのパフォーマンスやネットワーク速度の制限により白い画面が表示される可能性など、モバイル Web ページを使用する際のエクスペリエンスが低下する問題は解決されません。そこで、JS-SDKの強化版である「WeChat Web Resource Offline Storage」が設計されましたが、複雑なページではページ切り替えの硬さとクリックの遅れにより、依然として白い画面が表示される問題が発生します。このとき、ユーザーエクスペリエンスを向上させるためにはJS-SDKでは扱えない仕組みが必要となり、小さなプログラムが登場しました。
高速読み込み
より強力な機能
ネイティブ エクスペリエンス
使いやすく安全な WeChat データのオープン
効率的かつシンプル開発
小さなプログラムと通常の Web ページ開発の違い
小さなプログラムの開発は、通常の Web ページの開発と非常によく似ています。主な開発言語は次のとおりです。 JavaScript とも互換性がありますが、この 2 つの間にはまだいくつかの違いがあります。
通常の Web 開発では、さまざまなブラウザーが提供する DOM API を使用して DOM 操作を実行できます。アプレットのロジック層とレンダリング層は分離されています。ロジック層は JSCore で実行され、完全なブラウザー オブジェクトを持ちません。したがって、関連する DOM API と BOM API が不足しています。
通常の Web 開発のレンダリング スレッドとスクリプト スレッドは相互に排他的であるため、スクリプトを長期間実行するとページの応答が失われる可能性があります。小規模なプログラムでは、この 2 つは分離され、スレッド内で別のスレッドで実行されます。
Web 開発者が Web ページを開発するときは、ブラウザーといくつかの補助ツールまたはエディターを使用するだけで済みます。ミニ プログラムの開発は異なり、ミニ プログラム アカウントの申請、ミニ プログラム開発者ツールのインストール、プロジェクトの構成などのプロセスを経る必要があります。
ミニプログラムの実行環境
ミニプログラムの構造
1. テクノロジーの選択
概要一般に、インターフェイスのレンダリングには次の 3 つのテクノロジがあります。
純粋なクライアント側のネイティブ テクノロジを使用したレンダリング
純粋な Web テクノロジを使用したレンダリング
クライアント側のネイティブ テクノロジと Web の使用技術 レンダリングするための複合ハイブリッド技術 (略してハイブリッド技術)
#次の側面分析を通じて、ミニ プログラムにどの技術ソリューションが使用されるかを決定します 開発の敷居: Web の敷居は低く、ネイティブもこのような RN はフレームワークでサポートされます エクスペリエンス: ネイティブ エクスペリエンスは Web よりもはるかに優れており、ハイブリッドはある程度 Web よりもネイティブ エクスペリエンスに近いです バージョン更新: Web はオンライン更新をサポートし、ネイティブは次のことを行う必要がありますレビューのために WeChat にパッケージ化する リリース制御とセキュリティ: Web はページのコンテンツにジャンプしたり変更したりすることができますが、いくつかの制御できない要素とセキュリティ リスクがありますミニ プログラムのホスト環境は次のとおりです。 WeChat 純粋なクライアント ネイティブを使用する場合 ミニ プログラムを作成するテクノロジーを使用する場合、毎回ミニ プログラム コードを WeChat コードと一緒にリリースする必要があり、この方法は絶対に実現できません。 そのため、Web テクノロジーのように、クラウド上でいつでも更新できるリソース パッケージが必要となり、ローカルにダウンロードし、動的実行後にインターフェイスをレンダリングすることができます。純粋な Web テクノロジを使用して小さなプログラムをレンダリングする場合、一部の複雑な対話でパフォーマンスの問題に直面する可能性があります。これは、Web テクノロジでは、UI レンダリングと JavaScript スクリプトの実行が単一のスレッドで実行され、一部の論理タスクが簡単に発生する可能性があるためです。 UI レンダリング リソースを占有します。 そこで私たちは最終的に、この 2 つを組み合わせて小さなプログラムをレンダリングするハイブリッド技術を採用しました。Web に似た方法で開発でき、コードはオンラインで更新できます。同時にコンポーネントの導入も可能です。次のような利点もあります:Web の機能を拡張します。たとえば、入力ボックス コンポーネント (入力、テキストエリア) には、キーボードをより適切に制御する機能があります。
エクスペリエンスが向上し、WebView のレンダリング作業も軽減されます。
setData のバイパス、データ通信レンダリング パフォーマンスを向上させるための再レンダリング プロセス
クライアント側のネイティブ レンダリングを使用していくつかの複雑なコンポーネントを組み込むと、パフォーマンスが向上します
2. デュアル スレッド モデル
アプレットのレンダリング層とロジック層はそれぞれ 2 つのスレッドによって管理されます。ビュー層インターフェイスはレンダリングに WebView を使用し、ロジック層は JsCore スレッドを使用して JS スクリプトを実行します。
では、なぜこのように設計されているのでしょうか? 制御とセキュリティについても前述しましたが、これらの問題を解決するには、開発者がブラウザのウィンドウ オブジェクト、ページのジャンプ、DOM の操作などを使用できないようにする必要があります。 、動的実行、スクリプト作成用のオープン インターフェイス。
クライアント システムの JavaScript エンジン、iOS では JavaScriptCore フレームワーク、Android では Tencent x5 カーネルによって提供される JsCore 環境を使用できます。
このサンドボックス環境は、ブラウザ関連のインターフェイスを持たない、純粋な JavaScript の解釈および実行環境のみを提供します。
これは、ミニ プログラムのデュアル スレッド モデルの起源です:
ロジック層: JavaScript を実行するための別のスレッドを作成します。ここには、ミニ プログラムのビジネス ロジックに関連するすべてのコードが含まれます。実行され、ロジックの処理、データ要求、インターフェイス呼び出しなどを担当します。
View レイヤー: インターフェイスのレンダリングに関連するすべてのタスクは WebView スレッドで実行され、どのインターフェイスがレンダリングされるかはロジック レイヤーを通じて制御されます。コード。小さなプログラムには複数のインターフェイスがあるため、ビュー層に複数の WebView スレッドが存在します。
JSBridge は上位レベルの開発とネイティブ (システム層) の間のブリッジとして機能し、小さなプログラムがネイティブ機能を使用できるようにします。一部のコンポーネントはネイティブ コンポーネントとして実装されているため、優れたエクスペリエンスが得られます
3. デュアル スレッド通信
開発者の JS ロジック コードを別のスレッドを実行しますが、Webview スレッドでは、開発者は DOM を直接操作できません。
インターフェイスを動的に変更するにはどうすればよいですか?
上図に示すように、論理層とビュー層の間の通信はネイティブ (WeChat クライアント) によって中継され、論理層から送信されたネットワーク リクエストもネイティブによって転送されます。
これは、単純なデータ通信を通じて DOM を更新できることを意味します。
仮想 DOM 皆さんはすでに理解していると思いますが、大まかなプロセスは次のとおりです: JS オブジェクトを使用して DOM ツリーをシミュレートする -> 2 つの仮想 DOM ツリーの違いを比較する -> 違いを実際の DOM ツリーに適用するDOM ツリー。
図に示すように:
WXML をレンダリング層の対応する JS オブジェクトに変換します。
データ変更が論理層で発生すると、データはホスト環境によって提供される setData メソッドを通じて論理層からネイティブに渡され、その後レンダリング層に転送されます。
前後の差分を比較した後、その差分を元の DOM ツリーに適用し、インターフェースを更新します。
WXML をデータに変換し、Native 経由で転送することで、ロジック層とレンダリング層の間の対話と通信を実現します。
このような完全なフレームワークをミニ プログラムの基本ライブラリから分離することはできません。
4. ミニ プログラムの基本ライブラリ
ミニ プログラムの基本ライブラリはビュー層とロジック層に注入して実行でき、主に次の側面に使用されます。
ビュー層では、インターフェイス要素を構築するためにさまざまなコンポーネントが提供されます
ロジック層では、さまざまなロジックを処理するためにさまざまな API が提供されます
データバインディングとコンポーネントシステム、イベントシステム、通信システム、および一連のフレームワークロジックの処理
アプレットのレンダリング層とロジック層は2つのスレッドで管理されるため、2つのスレッドにそれぞれ基本ライブラリが注入されます。
ミニ プログラムの基本ライブラリは、特定のミニ プログラムのコード パッケージにパッケージ化されるのではなく、事前に WeChat クライアントに組み込まれます。
これにより、次のことが可能になります。
ビジネス アプレットのコード パッケージ サイズを削減します。
ビジネス アプレットのコード パッケージを変更せずに、基本ライブラリのバグを個別に修正できます
5. Exparser フレームワーク
Exparser は、WeChat アプレットのコンポーネント構成フレームワークであり、アプレットの基本ライブラリに組み込まれており、WeChat アプレットのさまざまなコンポーネントの基本サポートを提供します。アプレット。組み込みコンポーネントやカスタム コンポーネントを含む、ミニ プログラム内のすべてのコンポーネントは、Exparser によって編成および管理されます。
Exparser の主な機能は次のとおりです:
Shadow DOM モデルに基づいています: このモデルは WebComponents の ShadowDOM によく似ていますが、依存しません。ブラウザのネイティブ サポート。他に依存するライブラリはありません。実装中に、小さなプログラム コンポーネントのプログラミングをサポートするために他の API が特別に追加されました。
純粋な JS 環境で実行可能: これは、ロジック層にも特定のコンポーネント ツリー構成機能があることを意味します。
効率的かつ軽量: 特に多数のコンポーネント インスタンスがある環境で優れたパフォーマンスを発揮し、コード サイズも小さくなります。
ミニ プログラムでは、WXML からページへの最終ノード ツリーの構築、createSelectorQuery の呼び出し、カスタム コンポーネントの特性など、ノード ツリー関連のすべての操作が Exparser に依存します。
組み込みコンポーネント
Exparser フレームワークに基づいたミニ プログラムには、ビュー コンテナ クラス、フォーム クラス、ナビゲーション クラスを提供する一連の組み込みコンポーネントがあります。 、メディアクラス、オープンクラスなど数十のコンポーネント。このような豊富なコンポーネントのセットと WXSS を組み合わせることで、あらゆる効果を備えたインターフェイスを構築できます。機能レベルでも、ほとんどのニーズを満たします。
6. 動作メカニズム
アプレットの起動には「コールドスタート」と「ホットスタート」の 2 つの状況があります。ユーザーが小さなプログラムを既に開いていて、一定期間内に再度開いた場合は、この時点で再起動する必要はありません。バックグラウンドにある小さなプログラムをフォアグラウンドに切り替えるだけです。このプロセスはホット スタートです。コールド スタートとは、ユーザーのミニ プログラムを初めて開くとき、または WeChat によってアクティブに破棄された後に再度開くとき、ミニ プログラムをリロードして開始する必要があることを指します。
ミニ プログラムを再起動するという概念はありません
ミニ プログラムがバックグラウンドに入ると、クライアントは一定期間実行状態を維持します。一定時間 (現在は 5 分) WeChat によって積極的に破棄されます
短期間 (5 秒) に 3 つ以上のシステム メモリ アラームを受信すると、ミニ プログラムは破棄されます
7. 更新メカニズム
コールド スタート中にミニ プログラムの新しいバージョンが見つかった場合、コード パッケージの新しいバージョンが非同期でダウンロードされ、クライアントのローカル パッケージで開始されます。つまり、新しいバージョンのミニ プログラムは次回まで待つ必要があり、コールド スタート後にのみ適用されます。最新バージョンをすぐに適用する必要がある場合は、wx.getUpdateManager API を使用して処理できます。
8. パフォーマンスの最適化
主な最適化戦略は 3 つのポイントに要約できます:
コードを合理化し、WXML 構造の複雑さを軽減します。および JS コード ;
setData 呼び出しを合理的に使用して、setData の数とデータ量を削減します;
必要に応じて、下請け最適化を使用します。
1. setData の仕組み
アプレットのビュー層は現在、レンダリング キャリアとして WebView を使用し、ロジック層は実行環境として独立した JavascriptCore を使用します。アーキテクチャ的には、WebView と JavaScriptCore は独立したモジュールであり、直接データを共有するチャネルはありません。現在、ビュー層とロジック層の間のデータ伝送は、実際には両者が提供するevaluateJavascriptを通じて実装されています。つまり、ユーザーが送信したデータを文字列に変換して渡す必要があるのと同時に、変換されたデータ内容をJSスクリプトにつなぎ合わせて、実行することで両側の独立した環境に渡します。 JSスクリプト。
evaluateJavaScript の実行は多くの側面の影響を受けるため、ビュー層に到着するデータはリアルタイムではありません。
2. 一般的な setData 操作エラー
頻繁に setData 私たちが分析したいくつかのケースでは、いくつかの小さなプログラムが setData を非常に頻繁 (ミリ秒) に setData し、これにより 2 つの結果が生じます。 : Android 環境のユーザーはスライド時に引っかかりを感じ、操作のフィードバックが大幅に遅れます。JS スレッドがコンパイルとレンダリングを行っているため、ユーザーの操作イベントが時間内にロジック層に渡されず、ロジック層も操作処理の結果を返しません。ビュー層への配信が間に合わず、レンダリングに遅延が発生する WebView の JS スレッドが常にビジー状態であるため、ロジック層からページ層への通信時間が増加し、ビュー層が受信するデータメッセージが遅延する送信時から遅延します。数百ミリ秒が経過しており、レンダリング結果はリアルタイムではありません;
setData が大量の新しいデータを転送するたびに、基になる実装から確認できます。データ送信は実際にはevaluateJavascript
scriptプロセスであるsetData。データ量が多すぎると、スクリプトのコンパイルと実行時間が増加し、WebView JSスレッドを占有して、上でsetDataを実行します。バックグラウンド状態ページ。ページがバックグラウンド状態 (ユーザーには表示されない) になったとき、setData はバックグラウンド状態ページをユーザーにレンダリングし続けるべきではありません。それは理解できません。さらに、バックグラウンド ページの setData は、バックグラウンド状態ページの実行もプリエンプトします。前景ページ。
概要
この記事では、ミニ プログラムの起源から創発、設計、コミュニケーション、ライブラリ、Exparser フレームワーク、実行メカニズム、パフォーマンスの最適化などはすべて関連しており、相互に影響を与える選択です。小さなプログラムの基礎となるフレームワークの設計については、もっと多くのことが必要です。それぞれのフレームワークの誕生には、それぞれ独自の意味があります。開発者として私たちにできることは、このツールを使用するだけでなく、その設計パターンを理解することです。そうすることでのみ、ツールに影響されずにさらに前進することができます。
以上がミニプログラムの動作メカニズムの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









モバイル インターネット技術とスマートフォンの普及により、WeChat は人々の生活に欠かせないアプリケーションになりました。 WeChat ミニ プログラムを使用すると、アプリケーションをダウンロードしてインストールすることなく、ミニ プログラムを直接使用して、いくつかの簡単なニーズを解決できます。この記事では、Python を使用して WeChat アプレットを開発する方法を紹介します。 1. 準備 Python を使用して WeChat アプレットを開発する前に、関連する Python ライブラリをインストールする必要があります。ここでは、wxpy と itchat の 2 つのライブラリを使用することをお勧めします。 wxpy は WeChat マシンです

ミニプログラムはreactを利用することができます 使い方: 1. 「react-reconciler」に基づいてレンダラーを実装し、DSLを生成します; 2. DSLを解析してレンダリングするためのミニプログラムコンポーネントを作成します; 3. npmをインストールし、開発者ビルドを実行しますツール内の npm; 4. パッケージを独自のページに導入し、API を使用して開発を完了します。

WeChat ミニ プログラムでのカードめくり効果の実装 WeChat ミニ プログラムでは、カードめくり効果の実装は、ユーザー エクスペリエンスとインターフェイス インタラクションの魅力を向上させることができる一般的なアニメーション効果です。以下では、WeChat アプレットでカードめくりの特殊効果を実装する方法と、関連するコード例を詳しく紹介します。まず、ミニ プログラムのページ レイアウト ファイルに 2 つのカード要素を定義する必要があります。1 つは前面のコンテンツを表示するため、もう 1 つは背面のコンテンツを表示するためです。具体的なサンプル コードは次のとおりです: <!--index.wxml- ->&l

10月31日の当サイトのニュースによると、今年5月27日、アント・グループは「漢字拾いプロジェクト」の立ち上げを発表し、最近新たな進展を迎えた:アリペイが「漢字拾い-珍しい文字」ミニプログラムを開始協会からコレクションを収集する レア文字は、レア文字ライブラリを補完し、アリペイでのレア文字入力方法の改善に役立つように、レア文字に異なる入力エクスペリエンスを提供します。現在、ユーザーは「漢字ピックアップ」「珍文字」などのキーワードで検索することで「珍文字」アプレットに入ることができる。ミニプログラムでは、ユーザーがシステムで認識・入力されなかった珍しい文字の画像を送信し、確認後、Alipay のエンジニアがフォントライブラリに追加エントリを作成します。当サイトでは、発音が不明瞭な珍しい単語を対象とした最新の単語分割入力方法をミニプログラムで体験できることに注目しました。ユーザー解体

uniapp がミニ プログラムと H5 の間で迅速な変換を実現するには、具体的なコード例が必要ですが、近年、モバイル インターネットの発展とスマートフォンの普及に伴い、ミニ プログラムと H5 は不可欠なアプリケーション形式となっています。クロスプラットフォーム開発フレームワークとして、uniapp は一連のコードに基づいて小規模プログラムと H5 間の変換を迅速に実現し、開発効率を大幅に向上させます。この記事では、uniapp がミニ プログラムと H5 の間で迅速な変換を実現する方法と、具体的なコード例を紹介します。 1. uniapp uniaの紹介

ミニ プログラムの登録操作手順: 1. 個人 ID カード、法人営業許可証、法人 ID カードおよびその他の提出資料のコピーを準備します; 2. ミニ プログラム管理のバックグラウンドにログインします; 3. ミニ プログラム設定ページに入ります; 4. 「基本設定」を選択; 5. 出願情報を入力; 6. 出願資料をアップロード; 7. 出願申請を送信; 8. 審査結果を待ちます。出願が不合格の場合は、理由に応じて修正してください9. 出願のフォローアップ操作は可能です。

実装アイデア: チャット ルームのさまざまな機能を処理するために、スレッドのサーバー側を確立します。x02 クライアントの確立はサーバーよりもはるかに簡単です。クライアントの機能はメッセージの送受信と、特定の文字を特定の規則に従って入力するため、クライアント側では、メッセージ受信専用とメッセージ送信専用の 2 つのスレッドを使用するだけで、さまざまな機能を使用できます。使用しないでください。

1. WeChat ミニ プログラムを開き、対応するミニ プログラム ページに入ります。 2. ミニ プログラム ページでメンバー関連の入り口を見つけます。通常、メンバーの入り口は下部のナビゲーション バーまたはパーソナル センターにあります。 3. メンバーシップポータルをクリックして、メンバーシップ申請ページに入ります。 4. 入会申込ページにて、携帯電話番号、氏名等の必要事項をご入力の上、送信してください。 5. ミニ プログラムは会員申請を審査します。審査に合格すると、ユーザーは WeChat ミニ プログラムの会員になることができます。 6. 会員になると、ユーザーはポイント、クーポン、会員限定アクティビティなど、より多くの会員権を享受できます。
