CN109408142A - 基于jsbundle实现H5页面高性能安全加载的方法 - Google Patents

基于jsbundle实现H5页面高性能安全加载的方法 Download PDF

Info

Publication number
CN109408142A
CN109408142A CN201811189777.1A CN201811189777A CN109408142A CN 109408142 A CN109408142 A CN 109408142A CN 201811189777 A CN201811189777 A CN 201811189777A CN 109408142 A CN109408142 A CN 109408142A
Authority
CN
China
Prior art keywords
view
module
jsbundle
page
performance
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201811189777.1A
Other languages
English (en)
Inventor
唐立合
骆常见
王峰
周俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NARI Group Corp
Nari Information and Communication Technology Co
Original Assignee
NARI Group Corp
Nari Information and Communication Technology Co
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NARI Group Corp, Nari Information and Communication Technology Co filed Critical NARI Group Corp
Priority to CN201811189777.1A priority Critical patent/CN109408142A/zh
Publication of CN109408142A publication Critical patent/CN109408142A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种基于jsbundle实现H5页面高性能安全加载的方法,包括:当接收到应用启动指令时,启动应用程序;开启线程池,创建若干个与安全交互平台的安全连接;通过上述各安全连接与发送请求;当接收到Activity启动指令时,启动Activity;调用loadApp方法加载预定数据;判断ReactActivity是否存在,若存在,加载所述ReactActivity,若不存在,重新创建ReactActivity;创建ReactRootView,并将其加载至缓存,完成加载。本发明利用jsbundle技术裁剪RN框架,优化了加载算法,提升了安卓系统activity与H5之间加载的效率问题,有效的解决了白屏等问题。

Description

基于jsbundle实现H5页面高性能安全加载的方法
技术领域
本发明属于软件领域,尤其是一种页面加载技术。
背景技术
现有技术通过开发H5页面,客户端通过webview进行加载H5页面,同时经过安全交互平台时,所有请求由安全交互平台进行转发,由于安全交互平台本身是单线程的,导致当前状态下,只能有一个请求会被处理,其他请求均处于等待状态,这样导致系统页面加载非常缓慢,常常会出现白屏问题,极大地影响用户的使用体验。
为此,技术人员进行了多方面的探索,一种做法是每次从数据库中查询相关数据,这种做法消耗资源比较大,效率也不高;另一种做法是将页面静态化,但这样会导致后台数据修改时,需要对整个页面进行修改,生成新的页面需要花费大量时间;因此,目前并没有很好的解决方案。
发明内容
发明目的:提供一种基于jsbundle实现H5页面高性能安全加载的方法,以使系统页面的加载更为顺畅。
技术方案:基于jsbundle实现H5页面高性能安全加载的方法,包括:
S1、当接收到应用启动指令时,启动应用程序;开启线程池,创建若干个与安全交互平台的安全连接;通过上述各安全连接与发送请求;
S2、当接收到Activity启动指令时,启动Activity;调用loadApp方法加载预定数据;
S3、判断ReactActivity是否存在,若存在,加载所述ReactActivity,若不存在,重新创建ReactActivity;
S4、创建ReactRootView,并将其加载至缓存,完成加载。
根据本发明的一个方面:还包括位于步骤S1之前的步骤S0:
步骤S0、对应用的框架部分和业务模块部分进行拆分及打包:
创建至少一个空工程,构建入口JS文件,打包该入口JS文件,生成name1.js;构建业务工程模块并打包,生成name2.js;待收到应用启动指令时,将name1.js和name2.js合并在一起。
在另一实施例中,根据本发明的一个方面:还包括在步骤S1和步骤S2之间的步骤S11:
步骤S11、记录各个模块名及模块id之间的mapping关系;当接收到业务模块打包指令时,判断各模块是否在mapping文件中,若不在其中,则将其打包至业务模块中;
构建一具有空白页面的模块,用于监听预启动应用程序的业务JS模块,当其收到监听指令后,在进入业务RN页面时,获取已经加载后的JS引擎,发送消息给所述具有空白页面的模块,通过该具有空白页面的模块渲染业务JS模块。
根据本发明的一个方面:还包括在步骤S1和步骤S2之间的步骤S12:
步骤S12、创建根视图容器和启动屏布局视图,将所述启动屏布局视图读入内存,依序添加根视图容器和启动屏布局视图,并将根视图容器与Activity绑定;在步骤S2中接收到Activity启动指令时,启动根视图容器与启动屏布局视图。
根据本发明的一个方面:所述入口JS文件打包的过程包括:加载打包需要的各个模块;创建client;通过调用outputBundle进行打包,然后将打包后的bundle文件返回;分析打包后的模块,将符合条件的模块加到bundle文件中,生成新的bundle文件;调用ReactPackager.getDependencies找到每个模块的依赖,在过滤的时调用过滤模块的依赖,依次递归;对所述新的bundle文件的各模块进行合并和替换处理,生成最终bundle文件。
根据本发明的一个方面:还包括:
步骤S5、计算各步骤的耗时并优化各步骤的耗时:
计算RN上下文初始化耗时和首屏视图渲染耗时,其中首屏视图渲染耗时为compontDidUpdate与compontWillMount之间的时间差;
RN上下文初始化优化:当接收到应用启动指令,启动应用程序时,随即进行RN初始化,与应用程序异步进行;
首屏视图渲染优化:缓存部分请求数据,在渲染界面视图时,首先使用缓存数据渲染视图,同时发起网络请求,数据返回时再以新的数据渲染一遍。
根据本发明的一个方面:所述步骤S5还包括:
对组件进行轮播,在请求的返回结果中,读取轮播图集合,依次生成全部图片视图,并添加至轮播图容器视图中,最后监听容器视图的对应事件,设置当前显示的图片视图。
根据本发明的一个方面:所述步骤S5还包括:
在初始时,将列表项视图渲染为预定尺寸的空视图,待所有空视图渲染完成后,获取视图在容器中相对位置,仅将可视区域内的列表项用真实视图重新渲染;同时监听列表容器的滚动事件,在滚动事件回调中,计算视图在容器中的相对位置,当视图进入了可视区域时,再用真实视图替换空视图。
有益效果:本发明利用jsbundle技术裁剪RN框架,优化加载算法,提升了安卓系统activity与H5页面之间加载的效率问题,有效的解决了白屏等问题;在处理加载速度和系统资源占用等方面均有很好的表现。
附图说明
图1是安卓activity与H5之间加载流程图。
图2是创建连接关系的流程图。
具体实施方式
在目前的移动应用开发中,webkit加载H5页面存在卡顿现象比较明显,其次,在接入安全交互平台时,由于安全交互平台的瓶颈,存在网络请求排队,导致系统页面加载缓慢的问题。为此,申请人进行了深入地研究,提出了如下的解决方案。
如图1和图2所示,本发明的实施例一种,该基于jsbundle实现H5页面高性能安全加载的方法,主要包括:
S1、当接收到应用启动指令时,启动应用程序;开启线程池,创建若干个与安全交互平台的安全连接;通过上述各安全连接与发送请求;
S2、当接收到Activity启动指令时,启动Activity;调用loadApp方法加载预定数据;
S3、判断ReactActivity是否存在,若存在,加载所述ReactActivity,若不存在,重新创建ReactActivity;
S4、创建ReactRootView,并将其加载至缓存,完成加载。
该实施例利用jsbundle技术裁剪RN框架,优化加载算法,提升了安卓系统activity与H5之间加载的效率问题,有效的解决了白屏等问题。
在本发明的另一实施例中,还包括如下步骤:
步骤S0、对应用的框架部分和业务模块部分进行拆分及打包:
创建至少一个空工程,构建入口JS文件,打包该入口JS文件,生成name1.js;构建业务工程模块并打包,生成name2.js;待收到应用启动指令时,将name1.js和name2.js合并在一起。
在该实施例中,通过模块的拆分和组合,在使用的时候组合,然后加载,能够提高加载效率,同时该方案简单,无侵入,实现成本低。
在本发明的另一实施例中,还包括如下步骤:
在步骤S1和步骤S2之间的步骤S11:
步骤S11、记录各个模块名及模块id之间的mapping关系;当接收到业务模块打包指令时,判断各模块是否在mapping文件中,若不在其中,则将其打包至业务模块中;
构建一具有空白页面的模块,用于监听预启动应用程序的业务JS模块,当其收到监听指令后,在进入业务RN页面时,获取已经加载后的JS引擎,发送消息给所述具有空白页面的模块,通过该具有空白页面的模块渲染业务JS模块。
在该实施例中,通过分析RN(react native)框架文件的特点,对占比较大的文件进行预加载,在进入特定业务时,只需加载执行业务的若干JS文件,从而大幅度提高了页面记载速度。
在另一实施例中,还可以采用如下方案解决:
在步骤S1和步骤S2之间的步骤S12:
步骤S12、创建根视图容器和启动屏布局视图,将所述启动屏布局视图读入内存,依序添加根视图容器和启动屏布局视图,并将根视图容器与Activity绑定;在步骤S2中接收到Activity启动指令时,启动根视图容器与启动屏布局视图。
通过启动屏布局视图进行过渡,为后续真正业务模块的加载提供一定的时间,该方案占用资源较少,实现较为容易。
在进一步的实施例中,所述入口JS文件打包的过程包括:加载打包需要的各个模块;创建client;通过调用outputBundle进行打包,然后将打包后的bundle文件返回;分析打包后的模块,将符合条件的模块加到bundle文件中,生成新的bundle文件;调用ReactPackager.getDependencies找到每个模块的依赖,在过滤的时调用过滤模块的依赖,依次递归;对所述新的bundle文件的各模块进行合并和替换处理,生成最终bundle文件。
通过对JS文件打包过程进行优化,提高了加载效率,降低了资源使用。
在进一步的实施例中,
步骤S5、计算各步骤的耗时并优化各步骤的耗时:
计算RN上下文初始化耗时和首屏视图渲染耗时,其中首屏视图渲染耗时为compontDidUpdate与compontWillMount之间的时间差;
RN上下文初始化优化:当接收到应用启动指令,启动应用程序时,随即进行RN初始化,与应用程序异步进行;
首屏视图渲染优化:缓存部分请求数据,在渲染界面视图时,首先使用缓存数据渲染视图,同时发起网络请求,数据返回时再以新的数据渲染一遍。
对组件进行轮播,在请求的返回结果中,读取轮播图集合,依次生成全部图片视图,并添加至轮播图容器视图中,最后监听容器视图的对应事件,设置当前显示的图片视图。
在初始时,将列表项视图渲染为预定尺寸的空视图,待所有空视图渲染完成后,获取视图在容器中相对位置,仅将可视区域内的列表项用真实视图重新渲染;同时监听列表容器的滚动事件,在滚动事件回调中,计算视图在容器中的相对位置,当视图进入了可视区域时,再用真实视图替换空视图。
在布局事件完成后,获取视图在容器内的相对位置,监听滚动视图的滚动事件,判断视图距离可视区域的位置以决定是否渲染该视图;给视图的渲染设置一个提前阈值,当视图距离可视区域达到该阈值时,提前渲染该视图。
在首屏渲染时,将热门页面渲染为空视图,再将阈值调大,使得空视图落在阈值区域范围内,接着异步地计算该空视图在容器中位置,并将热门页面真实视图渲染出来。
总之,在本发明中,在安卓activity加载H5之前,提前渲染好H5页面,这样保证activity能够平滑的加载H5页面,很快地将H5页面显示出来,同时,在页面端优化了网络请求的算法,利用多线程的方式,与安全交互平台多次建立连接,解决了安全交互平台本身单线程,多请求需要排队等待的状态的问题。
需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。

Claims (8)

1.基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,包括:
S1、当接收到应用启动指令时,启动应用程序;开启线程池,创建若干个与安全交互平台的安全连接;通过上述各安全连接与发送请求;
S2、当接收到Activity启动指令时,启动Activity;调用loadApp方法加载预定数据;
S3、判断ReactActivity是否存在,若存在,加载所述ReactActivity,若不存在,重新创建ReactActivity;
S4、创建ReactRootView,并将其加载至缓存,完成加载。
2.根据权利要求1所述的基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,还包括位于步骤S1之前的步骤S0:
步骤S0、对应用的框架部分和业务模块部分进行拆分及打包:
创建至少一个空工程,构建入口JS文件,打包该入口JS文件,生成name1.js;构建业务工程模块并打包,生成name2.js;待收到应用启动指令时,将name1.js和name2.js合并在一起。
3.根据权利要求1所述的基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,还包括在步骤S1和步骤S2之间的步骤S11:
步骤S11、记录各个模块名及模块id之间的mapping关系;当接收到业务模块打包指令时,判断各模块是否在mapping文件中,若不在其中,则将其打包至业务模块中;
构建一具有空白页面的模块,用于监听预启动应用程序的业务JS模块,当其收到监听指令后,在进入业务RN页面时,获取已经加载后的JS引擎,发送消息给所述具有空白页面的模块,通过该具有空白页面的模块渲染业务JS模块。
4.根据权利要求1所述的基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,还包括在步骤S1和步骤S2之间的步骤S12:
步骤S12、创建根视图容器和启动屏布局视图,将所述启动屏布局视图读入内存,依序添加根视图容器和启动屏布局视图,并将根视图容器与Activity绑定;在步骤S2中接收到Activity启动指令时,启动根视图容器与启动屏布局视图。
5.根据权利要求2所述的基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,所述入口JS文件打包的过程包括:加载打包需要的各个模块;创建client;通过调用outputBundle进行打包,然后将打包后的bundle文件返回;分析打包后的模块,将符合条件的模块加到bundle文件中,生成新的bundle文件;调用ReactPackager.getDependencies找到每个模块的依赖,在过滤的时调用过滤模块的依赖,依次递归;对所述新的bundle文件的各模块进行合并和替换处理,生成最终bundle文件。
6.根据权利要求1所述的基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,还包括:
步骤S5、计算各步骤的耗时并优化各步骤的耗时:
计算RN上下文初始化耗时和首屏视图渲染耗时,其中首屏视图渲染耗时为compontDidUpdate与compontWillMount之间的时间差;
RN上下文初始化优化:当接收到应用启动指令,启动应用程序时,随即进行RN初始化,与应用程序异步进行;
首屏视图渲染优化:缓存部分请求数据,在渲染界面视图时,首先使用缓存数据渲染视图,同时发起网络请求,数据返回时再以新的数据渲染一遍。
7.根据权利要求6所述的基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,所述步骤S5还包括:
对组件进行轮播,在请求的返回结果中,读取轮播图集合,依次生成全部图片视图,并添加至轮播图容器视图中,最后监听容器视图的对应事件,设置当前显示的图片视图。
8.根据权利要求7所述的基于jsbundle实现H5页面高性能安全加载的方法,其特征在于,所述步骤S5还包括:
在初始时,将列表项视图渲染为预定尺寸的空视图,待所有空视图渲染完成后,获取视图在容器中相对位置,仅将可视区域内的列表项用真实视图重新渲染;同时监听列表容器的滚动事件,在滚动事件回调中,计算视图在容器中的相对位置,当视图进入了可视区域时,再用真实视图替换空视图。
CN201811189777.1A 2018-10-12 2018-10-12 基于jsbundle实现H5页面高性能安全加载的方法 Pending CN109408142A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811189777.1A CN109408142A (zh) 2018-10-12 2018-10-12 基于jsbundle实现H5页面高性能安全加载的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811189777.1A CN109408142A (zh) 2018-10-12 2018-10-12 基于jsbundle实现H5页面高性能安全加载的方法

Publications (1)

Publication Number Publication Date
CN109408142A true CN109408142A (zh) 2019-03-01

Family

ID=65467748

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811189777.1A Pending CN109408142A (zh) 2018-10-12 2018-10-12 基于jsbundle实现H5页面高性能安全加载的方法

Country Status (1)

Country Link
CN (1) CN109408142A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110175053A (zh) * 2019-04-24 2019-08-27 阿里巴巴集团控股有限公司 图片加载方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105824900A (zh) * 2016-03-14 2016-08-03 传线网络科技(上海)有限公司 一种基于react-native的页面展示系统
CN106371874A (zh) * 2016-08-31 2017-02-01 广州品唯软件有限公司 一种插件数据加载方法及设备
CN106970946A (zh) * 2017-02-24 2017-07-21 阿里巴巴集团控股有限公司 一种页面显示方法及装置
US20180081693A1 (en) * 2016-09-22 2018-03-22 Groupon, Inc. Mobile service applications
CN108021614A (zh) * 2017-08-18 2018-05-11 口碑(上海)信息技术有限公司 一种用于页面动态加载的方法及系统
CN108287694A (zh) * 2017-08-08 2018-07-17 深圳壹账通智能科技有限公司 应用程序构建方法、系统、计算机设备和存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105824900A (zh) * 2016-03-14 2016-08-03 传线网络科技(上海)有限公司 一种基于react-native的页面展示系统
CN106371874A (zh) * 2016-08-31 2017-02-01 广州品唯软件有限公司 一种插件数据加载方法及设备
US20180081693A1 (en) * 2016-09-22 2018-03-22 Groupon, Inc. Mobile service applications
CN106970946A (zh) * 2017-02-24 2017-07-21 阿里巴巴集团控股有限公司 一种页面显示方法及装置
CN108287694A (zh) * 2017-08-08 2018-07-17 深圳壹账通智能科技有限公司 应用程序构建方法、系统、计算机设备和存储介质
CN108021614A (zh) * 2017-08-18 2018-05-11 口碑(上海)信息技术有限公司 一种用于页面动态加载的方法及系统

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
ITA1024 互联网技术联盟: "《【前端精英群】携程魏晓军:React Native Bundle拆分》", 《HTTPS://MP.WEIXIN.QQ.COM/S?__BIZ=MZIZMZEZODYWOA==&MID=2665284429&IDX=1&SN=130180E8B88B4A1612B51F00E097CF88&SCENE=0#WECHAT_REDIRECT》 *
JUEXINGZHE: "《React Native模块加载与原理分析》", 《HTTPS://WWW.JIANSHU.COM/P/AF4CB096785B?UTM_SOURCE=OSCHINA-APP》 *
STEFFEN•DINN: "《多线程并行请求问题及SplashActivity预加载问题解决方案》", 《HTTPS://WWW.CNBLOGS.COM/STEFFEN/P/6638756.HTML》 *
腾讯优测: "《探索react native首屏渲染最佳实践》", 《HTTPS://WWW.CNBLOGS.COM/UTEST/P/5443471.HTML》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110175053A (zh) * 2019-04-24 2019-08-27 阿里巴巴集团控股有限公司 图片加载方法及装置
CN110175053B (zh) * 2019-04-24 2023-10-27 创新先进技术有限公司 图片加载方法及装置

Similar Documents

Publication Publication Date Title
CN111881401B (zh) 基于WebAssembly的浏览器深度学习方法及系统
CN107066631A (zh) 页面的显示方法、装置及电子设备
CN111338784A (zh) 一种实现代码仓库与计算服务整合的方法及系统
US20200404046A1 (en) Application Download Method and Apparatus, Application Sending Method and Apparatus, and System
CN112529995B (zh) 图像渲染计算方法、装置、存储介质以及终端
CN111210340B (zh) 一种自动任务处理方法、装置、服务器及存储介质
CN110716848A (zh) 数据收集方法、装置、电子设备及存储介质
CN109408142A (zh) 基于jsbundle实现H5页面高性能安全加载的方法
CN109840597B (zh) 一种模型预测方法、装置、电子设备及存储介质
CN113608751A (zh) 推理服务平台的运行方法、装置、设备及存储介质
CN111338775B (zh) 一种执行定时任务的方法及设备
CN112799858A (zh) 异构联合仿真环境下的异构仿真模型数据处理方法及系统
CN112489172A (zh) 制作骨骼动画的方法、系统、电子装置和存储介质
CN116932147A (zh) 流式作业处理方法、装置、电子设备及介质
CN111506393A (zh) 一种基于arm的虚拟化装置及其使用方法
CN111190731A (zh) 基于权重的集群任务调度系统
CN115878226A (zh) 一种h5离线包加载方法及装置
CN110012003A (zh) 一种云应用抓屏方法和装置
CN110175309B (zh) 移动应用混合开发的原生端资源池管理系统及方法
CN109840073B (zh) 业务流程的实现方法和装置
CN111292143A (zh) 一种电子发票的开具方法、装置及计算机系统
CN108234349A (zh) 提高soa系统健壮性的方法和装置
WO2021174538A1 (zh) 应用处理方法及相关装置
CN104572261A (zh) 一种动态生成提醒信息的方法
CN117762637A (zh) 一种缓存资源清理方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20190301

RJ01 Rejection of invention patent application after publication