検索
ホームページWeChat アプレットミニプログラム開発ミニプログラムの応答速度が遅い問題の解決方法
ミニプログラムの応答速度が遅い問題の解決方法Dec 25, 2020 am 09:46 AM
応答速度アプレット

ミニプログラムの応答速度が遅い問題の解決方法

目的:

ミニ プログラムの応答速度の遅さとユーザー エクスペリエンスの悪さの問題を解決します。

(学習ビデオ共有: プログラミングビデオ)

最適化方法は次のとおりです:

1. ページの読み込み速度の向上

In small このプログラム環境で、ページの読み込み速度を向上させるにはどうすればよいでしょうか?大きな質問ですので、もう少し具体的にお話しますと、ユーザーがリンクをクリックしてから新しいページを開くまでの時間を短縮するにはどうすればよいでしょうか?重要な点は次のとおりです:

ユーザーのクリック動作に応答してページがジャンプし始めてから、新しいページの onload イベントがトリガーされるまでに遅延があります。この遅延は約 100 ~ 300 ミリ秒です (Android の応答) iosよりも遅い)一部)。

この遅延は短くありません。この時間を利用して、新しいページに必要なネットワーク リクエストを事前に開始できます。このようにして、100 ~ 300 ミリ秒 (またはネットワーク要求の時間) が節約されます。

このギャップがあることを知った後、コードを実装するにはどうすればよいでしょうか?

端的に言えば、BページのデータをAページにプリロードする機能を実装することです。ただし、この種のページ間の呼び出しでは、ロジックが簡単に複雑になり、異なるページのロジックが結合される可能性があります。したがって、ページ間の結合や開発の複雑さを増すことなく、プリロード ロジックを目に見えないように隠したいと考えています。

以下では、Tencent Video アプレットを例として技術的な実装を説明します。

ミニ プログラムのホームページ:

ミニプログラムの応答速度が遅い問題の解決方法

ユーザーがポスター画像をクリックすると、次のコード (1 行のみ) が実行されます。

ミニプログラムの応答速度が遅い問題の解決方法

##プログラムは再生ページを読み込みます:

ミニプログラムの応答速度が遅い問題の解決方法

再生ページのメイン コード:

ミニプログラムの応答速度が遅い問題の解決方法

わかりました。ご覧のとおり、外部ページの呼び出しと実際のロジックの実装はどちらも非常に単純です。 2 ページ目では、Page ライフサイクル関数を拡張し、onNavigate メソッドを追加しました。このメソッドは、ページが作成されようとしているがまだ開始されていないときに実行されます。

古いドライバーはここで何か奇妙なことに気づくかもしれません。ホーム ページをクリックしても、再生ページはまったく作成されず、オブジェクトも存在しません。内部のメソッドにアクセスするにはどうすればよいでしょうか?

ここでは WeChat のページの仕組みについて説明します。

ミニ プログラムが開始されると、Page() メソッドを呼び出すすべてのオブジェクトがキューに格納されます (以下に示すように)。ページにアクセスするたびに、WeChat は新しいオブジェクト インスタンス (実際にはディープ コピー) を再作成します。

つまり、ページ A がクリック応答イベントを実行しているとき、ページ B のインスタンスはまだ作成されていません。このときに呼び出される onNavigate メソッドは、実際には Page オブジェクトのプロトタイプです (ページ A がクリック応答イベントを実行するときに作成されます)。アプレットが起動されます) それ)

そして、すぐに作成される B ページは別のオブジェクトです。したがって、onNavigate メソッドと onLoad メソッドでは、this ポインターは同じオブジェクトを参照せず、一時データを現在のオブジェクトに格納できません。したがって、グローバル キャッシュ メソッドのペアである $put() と $take() をカプセル化します。

ミニプログラムの応答速度が遅い問題の解決方法

汎用性を高めるために、$route、$put、$take など、Page で使用されるパブリック メソッドはすべて Page の基本クラスで定義されています。また、基本クラスはすべてのページのリストを同時に保存するため、ページ名に基づいて特定のページの onNavigate メソッドを呼び出すことができます。もちろん、すべてのページに onNavigate メソッドを実装する必要があるわけではありません。onNavigate メソッドを定義していないページの場合、$route 関数はプリロード手順をスキップして、そのページに直接ジャンプします。したがって、開発者にとって、他のページが何を実装しているかを気にする必要はなく、外部の世界に対して完全に透過的です。

2. ユーザーの行動予測

上記の例では、ユーザーが能動的にページをクリックし、次のページのデータを事前に読み込む方法を実装しました。一部のシナリオでは、ユーザーの行動を予測でき、ユーザーがクリックする前に次のページのデータをプリロードできます。次のページがすぐに開くようになり、操作性がさらに向上します。

引き続き Tencent Video ミニ プログラムを例に挙げます。メイン インターフェイスは 3 ページのカードに分かれています (ほとんどのミニ プログラムはこのように設計されています)。簡単なデータ分析を通じて、50% のホームページに入ったユーザーは 3 ページ目、つまり 2 ページのカードにアクセスします。したがって、2 ページ目のカードのデータをプリロードすると、ユーザーが次にクリックするページを開く速度が大幅に向上します。

同様に、最初にコードの実装を見てみましょう。ホームページにチャンネル ページをプリロードする方法:

ミニプログラムの応答速度が遅い問題の解決方法

チャンネル ページを実装する方法:

ミニプログラムの応答速度が遅い問題の解決方法

最初の例と同様に、$preLoad() メソッドがここで定義され、onPreload イベントがページに拡張されます。ページが $preLoad() を呼び出した後、基本クラスはページに対応する onPreload 関数を自動的に見つけ、プリロード操作を実行するようにページに通知します。最初の例とは異なり、ここでプリロードされたデータはストレージに保存されます。これは、ユーザーがページにすぐにアクセスできない可能性があり、データをグローバル変数に保存すると、ミニ プログラムが占有するメモリが増加するためです。 WeChat は、メモリを大量に消費する小さなプログラムを躊躇なく強制終了します。

おそらく、アプリ開発経験のあるほとんどの学生にとって、より一般的なアプローチは、最初に最後にキャッシュされたデータをページに表示させ、次にリアルタイムで新しいデータを取得してから、ページを更新することです。ミニ プログラムのパフォーマンスとページ レンダリング速度はネイティブ アプリほど良くないため、この方法はミニ プログラムでは適切なエクスペリエンスではない可能性があります。大きなデータを UI 層に送信するのは重い操作です。したがって、この方法はお勧めできません。

3. デフォルト データのサイズを減らす

先ほど述べたように、WeChat は新しいページを開いたときにページ オブジェクトをディープ コピーするため、サイズを減らすように努める必要があります。デフォルト データを削除し、オブジェクトの数を減らします。その中のカスタム プロパティ。写真あり、真実あり:

ミニプログラムの応答速度が遅い問題の解決方法

# 100 個の属性を持つデータ オブジェクトをテスト ケースとして使用すると、iPhone 6 ではページの作成時間が 150 ミリ秒増加します。

4. コンポーネント化ソリューション

WeChat はミニ プログラムのコンポーネント化ソリューションを提供していません (実装する必要があると思います)。しかし、コンポーネント化について話さないと、いくらコードを書いても無駄になってしまいます。ここでは単純なコンポーネントの実装を示します。

Tencent のビデオ再生ページを例にとると、ページの定義は次のとおりです:

ミニプログラムの応答速度が遅い問題の解決方法

このうち、P() 関数はカスタム ベースです。クラス。これは非常に便利で、pv 統計、ソース統計、拡張ライフサイクル関数、コンポーネント化などを含むすべての一般的なロジックを基本クラスに記述することができます。

関数の最初のパラメータはページ名で、ページのキーとして使用されます。 2 番目はページ オブジェクトで、ロードされるすべてのコンポーネントを含む comps 配列を拡張します。

プレーヤーのコンポーネント/comps/player/index.js を例に挙げます:

ミニプログラムの応答速度が遅い問題の解決方法

コンポーネントの定義は通常のページとまったく同じです。 onLoad や onShow などのイベントには、ページ応答用のコールバック メソッドもあります。 wxml テンプレートで定義されたイベントは、js イベントに 1 対 1 で対応します。

基本クラスが行うことは、これらのコンポーネント オブジェクトのプロパティとメソッドを Page オブジェクトにコピーすることです (浅いコピー)。データ属性は結合されます。 WeChat の事前定義されたライフサイクル関数 (独自の拡張機能を含む) はキューにカプセル化され、順番に実行されます。たとえば、システムが onLoad メソッドを呼び出すと、実際にはすべてのコンポーネントの onLoad メソッドが実行され、最後にページの onLoad が実行されます。

上記はコード部分ですが、wxmlテンプレートとwxss部分については手動でインポートする必要があります。

wxml:

ミニプログラムの応答速度が遅い問題の解決方法

##wxss:

ミニプログラムの応答速度が遅い問題の解決方法

5. その他

ただし、アプレットは十分小さいですが、起動速度は依然として 2 ~ 3 秒であり、数秒で開くことはできません。作者はミニ プログラムの起動時間を最適化しようとしましたが、価値のある最適化ポイントはあまり見つかりませんでした。単一ページの初期化には 1 ~ 2 ミリ秒しかかかりません。おそらく、ほとんどの時間は WeChat とサーバー間の通信プロセスに費やされます。

幸いなことに、Tencent は独立したサーバー パフォーマンス テストのための環境を提供しています。ユーザーはドメイン名といくつかの簡単なパラメーターを入力するだけでサーバーのパフォーマンスを知ることができます。現在、Tencent WeTest プラットフォームで無料で利用できます。

関連する推奨事項:

ミニ プログラム開発チュートリアル

以上がミニプログラムの応答速度が遅い問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcsdnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
使用Python开发微信小程序使用Python开发微信小程序Jun 17, 2023 pm 06:34 PM

随着移动互联网技术和智能手机的普及,微信成为了人们生活中不可或缺的一个应用。而微信小程序则让人们可以在不需要下载安装应用的情况下,直接使用小程序来解决一些简单的需求。本文将介绍如何使用Python来开发微信小程序。一、准备工作在使用Python开发微信小程序之前,需要安装相关的Python库。这里推荐使用wxpy和itchat这两个库。wxpy是一个微信机器

小程序能用react吗小程序能用react吗Dec 29, 2022 am 11:06 AM

小程序能用react,其使用方法:1、基于“react-reconciler”实现一个渲染器,生成一个DSL;2、创建一个小程序组件,去解析和渲染DSL;3、安装npm,并执行开发者工具中的构建npm;4、在自己的页面中引入包,再利用api即可完成开发。

用Python编写简单的聊天程序教程用Python编写简单的聊天程序教程May 08, 2023 pm 06:37 PM

实现思路x01服务端的建立首先,在服务端,使用socket进行消息的接受,每接受一个socket的请求,就开启一个新的线程来管理消息的分发与接受,同时,又存在一个handler来管理所有的线程,从而实现对聊天室的各种功能的处理x02客户端的建立客户端的建立就要比服务端简单多了,客户端的作用只是对消息的发送以及接受,以及按照特定的规则去输入特定的字符从而实现不同的功能的使用,因此,在客户端这里,只需要去使用两个线程,一个是专门用于接受消息,一个是专门用于发送消息的至于为什么不用一个呢,那是因为,只

Java语言中的微信小程序开发介绍Java语言中的微信小程序开发介绍Jun 09, 2023 pm 10:40 PM

微信小程序是一种轻量级的应用程序,可以在微信平台上运行,不需要下载安装,方便快捷。Java语言作为一种广泛应用于企业级应用开发的语言,也可以用于微信小程序的开发。在Java语言中,可以使用SpringBoot框架和第三方工具包来开发微信小程序。下面是一个简单的微信小程序开发过程。创建微信小程序首先,需要在微信公众平台上注册一个小程序。注册成功后,可以获取到

教你如何在小程序中用公众号模板消息(附详细思路)教你如何在小程序中用公众号模板消息(附详细思路)Nov 04, 2022 pm 04:53 PM

本篇文章给大家带来了关于微信小程序的相关问题,其中主要介绍了如何在小程序中用公众号模板消息,下面一起来看一下,希望对大家有帮助。

PHP与小程序的地理位置定位与地图显示PHP与小程序的地理位置定位与地图显示Jul 04, 2023 pm 04:01 PM

PHP与小程序的地理位置定位与地图显示地理位置定位与地图显示在现代科技中已经成为了必备的功能之一。随着移动设备的普及,人们对于定位和地图显示的需求也越来越高。在开发过程中,PHP和小程序是常见的两种技术选择。本文将为大家介绍PHP与小程序中的地理位置定位与地图显示的实现方法,并附上相应的代码示例。一、PHP中的地理位置定位在PHP中,我们可以使用第三方地理位

小程序中文件上传的PHP实现方法小程序中文件上传的PHP实现方法Jun 02, 2023 am 08:40 AM

随着小程序的广泛应用,越来越多的开发者需要将其与后台服务器进行数据交互,其中最常见的业务场景之一就是上传文件。本文将介绍在小程序中实现文件上传的PHP后台实现方法。一、小程序中的文件上传在小程序中实现文件上传,主要依赖于小程序APIwx.uploadFile()。该API接受一个options对象作为参数,其中包含了要上传的文件路径、需要传递的其他数据以及

PHP与小程序的第三方登录与绑定功能实现PHP与小程序的第三方登录与绑定功能实现Jul 04, 2023 am 08:57 AM

PHP与小程序的第三方登录与绑定功能实现随着互联网的发展和智能手机的普及,小程序成为了移动应用程序开发的热门选择。小程序不仅提供了优秀的用户体验,还具备各种强大的功能。其中,第三方登录与绑定是小程序中常见的功能之一。本文将介绍如何使用PHP与小程序实现第三方登录与绑定的功能,并为读者提供代码示例。第三方登录是指用户可以使用其他平台的账号信息登录到目标平台,而

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

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

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

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

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。