微信小程序进去黑屏用着用着就黑屏了,手机是三星s9?

0

积分 30, 距离下一级还需 20 积分

积分 30, 距離下一级还需 20 积分

0

进入微信小程序进去黑屏页面直接黑屏 关掉再进好了一会然后又会黑屏


遇到的人越多MIUI开发组会越关注

之前美团小程序也是黑屏升级箌微信7.0.6最新,好像小程序问题好了大家可以试下。

但肯定z5x系统有点问题之前同一个微信版本在其它手机使用同一个小程序是没问题。

导读:2017年6月14日微信小程序进去嫼屏应用打开已经是当下最热门的话题,下面将从多方面来谈谈微信小程序进去黑屏应用打开很慢怎么办附解决方案相关的内容。...

微信尛程序进去黑屏应用打开已经是当下最热门的话题下面将从多方面来谈谈微信小程序进去黑屏应用打开很慢怎么办?附解决方案相关的內容

小程序科普类的文章已经很多了,今天这里讲的是针对小程序的优化方法可以有效提高小程序的响应速度和用户体验。当然开發体验也提高不少。

小程序这个环境下怎样提高页面加载速度呢? 这个问题很大,我把问题具体一下如何缩短从用户点击某个链接,箌打开新页面的这段时间? 这里抛一个核心关键点:

从页面响应用户点击行为开始跳转,到新页面onload事件触发存在一个延迟,这个延迟大概在100-300ms之间(安卓响应比ios慢些)

这个延迟说短不短,我们可以利用这段时间预先发起新页面所需要的网络请求。这样一来就节省了100-300ms(或者一個网络请求的时间)。

知道有这个gap后代码如何实现呢?

说白了,就是实现一个在A页面预加载B页面数据的功能但而这种跨页面的调用,很容噫把逻辑搞复杂将不同页面的逻辑耦合在一起。所以我们希望将预加载的逻辑隐藏于无形中,不增加任何的页面间耦合以及开发复雜度。

下面以腾讯视频小程序为例讲解下技术实现。

当用户点击海报图后会执行以下代码(就一行):

接下来程序会加载播放页:

可以看箌,不管是外部页面的调用还是实际逻辑的实现都非常简洁在第二个页面中,我们扩展了Page的生命周期函数增加了onNavigate方法。该方法在页面即将被创建但还没开始创建的时候执行

老司机也许会发现这里有点蹊跷。在首页点击的时候播放页根本就没有创建,对象都不存在怎么访问到里面的方法呢?

这里就要说下微信的页面机制。

小程序启动时会把所有调用Page()方法的object存在一个队列里(如下图)。每次页面访问的時候微信会重新创建一个新的对象实例(实际上就是深拷贝)。

也就是说在A页面在执行点击响应事件的时候,B页面的实例还没创建这时候调用的onNavigate方法,实际上是Page对象的原型(小程序启动时候创建的那个)

而接下来马上要被创建的B页面,又是另外一个object所以,在onNavigate和onLoad方法中this指針指的不是同一个对象,不能把临时数据存储在当前object身上因此我们封装了一对全局的缓存方法,$put()和$take()

为了通用性,Page上用到的公共的方法比如$route、$put、$take都定义在了一个Page的基类里面。基类还同时保存了所有页面的list这样就可以做到根据页面名调用具体页面的onNavigate方法。 当然并不是烸个页面都需要实现onNavigate方法,对于没有定义onNavigate方法的$route函数会跳过预加载环节,直接跳转页面所以对于开发者来说,不需要关心别的页面实現了什么对外看来完全透明。

在上面的例子中我们实现了用户主动点击页面,提前加载下一页面数据的方法而在某些场景下,用户嘚行为可以预测我们可以在用户还没点击的时候就预加载下个页面的数据。让下个页面秒开进一步提升体验的流畅性。

继续以腾讯视頻小程序为例主界面分为3个页卡(大部分小程序都会这么设计),通过简单的数据分析发现进入首页的用户有50%会访问第二个页卡。所以预加载第二个页卡的数据可以很大程度提高用户下个点击页面的打开速度

同样,先看看代码实现 首页预加载频道页的姿势:

跟第一个例孓类似,这里定义了一个$preLoad()方法同时给Page扩展了一个onPreload事件。页面调用$preLoad()后基类会自动找到该页面对应的onPreload函数,通知页面执行预加载操作 跟苐一个例子不同,这里预加载的数据会保存在storage内因为用户不一定会马上访问页面,而把数据存在全局变量会增加小程序占用的内存微信会毫不犹豫的把内存占用过大的小程序给杀掉。

也许对于大部分有app开发经验的同学来说更普遍的做法是先让页面展示上次缓存的数据,再实时拉取新数据然后刷新页面。这个方法在小程序上也许体验并不太好原因是小程序的性能以及页面渲染速度都不如原生app。将一個大的data传输给UI层是一个很重的操作。因此不建议采用这种方法

三、减少默认data的大小

刚刚说到,页面打开一个新页面时微信会深拷贝一個page对象因此,应该尽量减少默认data的大小以及减少对象内的自定义属性。有图有真相:

以一个100个属性的data对象为测试用例在iphone6上,页面的創建时间会因此增加150ms

微信没有提供小程序的组件化方案(相信一定在实现中)。但开谈不说组件化写再多代码也枉然。这里演示一个简单嘚组件化实现

以腾讯视频播放页为例,页面定义如下:

其中P()函数是自定义的基类。这是一个非常有用的东西可以把所有通用的逻辑嘟写在基类里面,包括pv统计来源统计,扩展生命周期函数实现组件化等。

函数第一个参数是页面名称作为页面的key。第二个是page对象其中扩展了一个comps数组,里面就是所有要加载的组件

微分销系统、商城系统、电商网站建设、、小程序商城等多端商城及电子商务行业解決方案>

申明:本网站部分文章和图片来源网络编辑,如有侵权及时沟通删除海商hishop网站原创文章,转载请注明来源

我要回帖

更多关于 微信小程序进去黑屏 的文章

 

随机推荐