走过风雨
走过风雨
  • 发布:2014-12-21 23:30
  • 更新:2015-01-24 16:26
  • 阅读:4739

关于预加载页面数量问题。

分类:MUI

mui的同事,你好。

这两天整理预加载页面,发现一个问题,麻烦帮忙解释一下。
1、预加载的限制 preloadLimit 不是全局的,每个新页面打开都会重新计算。 也就是说如果 限制的最大数为5,那么每个页面都可以预加载5个。是这么理解吗?
如果 是: 请问预加载队列中的先进先出控制是否还有意义?
如果不是:请问在新打开页面或者其他地方是否需要有什么注意的地方?

2、每次打开页面时都会在$.webviews 中查找该页面是否是预加载页面,但经过测试后发现$.webviews也是在每次打开新页面后就查不到之前创建的页面了。是否 $.webviews 在每个页面都会产生新的?

辛苦解答,非常感谢!

2014-12-21 23:30 1 条评论 负责人:无 分享
已邀请:
DCloud_UNI_CHB

DCloud_UNI_CHB

方案1:
使用5+封装的storage模块,参考5+规范,这个问题是永久保存,若仅需运行期数据,需要每次启动应用时清空;
方案2:
在首页保存一个数据,其它页面通过evalJS或mui封装的自定义事件操作这些数据。

DCloud_UNI_CHB

DCloud_UNI_CHB

preloadLimit及$.webviews均是每个页面单独定义、创建维护的,除了先进先出控制外,我们也没想到其它更好的控制策略;您有什么好的建议吗?

走过风雨

走过风雨 (作者)

我在想每个页面单独定义对webview 的整体管理是否能起作用。
从我测试和看网站上的问题发现,大家可能出现问题的地方都是在应用整体的页面打开的太多,没有及时关闭或者隐藏。

我想是否可以把预加载限制和$.webviews 做成整个应用的,这样可以对整体APP打开的webview 进行统一的管理,避免其重复打开和关闭,同时也避免使用者因为使用不当导致很多页面没有关闭带来的程序死掉问题。

对于webviewCache,我想预加载可以作为缓存,其实不是预加载只要创建了,也应该作为缓存管理起来。

明后天有时间仔细想一下,再把愚见呈上,供大家拍砖。

先请教一个其他问题,我有什么办法可以把一个数组保存为整个应用的,然后在每个页面进行使用。

wtsoftware

wtsoftware

同问,这个全局的webviews缓存在新打开是不是会重新计算!还有个问题就是demo里的模板使用之后调用过loadUrl方法,是不是内容就被修改了。下次再调用模板打开内容是不是上次loadURL中的内容呢,如果预加载的话是不是可以通过plus层面来维护有一个是对象做全局的webviews真正的对象缓存呢?

DCloud_UNI_CHB

DCloud_UNI_CHB

目前版本的webview缓存数量确实是页面级的,打开新页面会重新计算数量;
按计划,mui v1.2.0之后的版本将支持App级别的页面缓存;

loadURL方法会重新加载一个页面,当前页面内容会被修改;因此hello mui中的实现逻辑是:

  • 若目标url和当前子webview的url相同,则无需使用loadURL,立即显示;
    若目标url和当前子webview的url不同,则通过loadURL方法加载新内容;

代码实现逻辑:

if (contentWebview.getURL() != this.href) {  
    contentWebview.loadURL(this.href);  
} else {  
    reload = false;  
}  

(!reload) && contentWebview.show();

该问题目前已经被锁定, 无法添加新回复