亿朵云
亿朵云
  • 发布:2017-05-16 22:11
  • 更新:2017-06-05 10:35
  • 阅读:1400

preloadLimit好像不管用

分类:MUI

我在每个页面的js里面都写了

mui.init({  
        preloadLimit: 5//预加载窗口数量限制(一旦超出,先进先出)默认不限制  
});

预期整个app最多只存在5个预加载窗口
但是似乎不起作用,因为打印出来的预加载窗口信息经常大于5个
我觉得不管preloadLimit是不是全局的,但是也不应该出现大于5个的情况呀,
除非preloadLimit不是全局的,而恰好这个页面的mui.init没有正确的起作用
所以,应该怎么解决这个问题呢?

(function(window, mui, _) {  
    mui.init({  
        preloadLimit: 5 //预加载窗口数量限制(一旦超出,先进先出)默认不限制  
    });  
    mui.ready(function() {  
        console.log("map页面ready了");  
    });  
    mui.plusReady(function() {  
        console.log("map页的plus ready了");  
        mui.preload({  
            url: "_www/pages/login/login.html"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=1"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=2"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=3"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=4"  
        });  

        var cw = plus.webview.currentWebview();  
        cw.addEventListener("show", function() {  
            console.log("map页show了");  
            var url = "_www/pages/login/login.html?k=" + (+new Date());  
            console.log(url);  
            mui.preload({  
                url: url,  
                id: url  
            });  
            url = "_www/pages/login/login.html?k=" + (+new Date()+1111);  
            console.log(url);  
            mui.preload({  
                url: url,  
                id: url  
            });  
            mui.preload({  
            url: "_www/pages/login/login.html"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=1"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=2"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=3"  
        });  
        mui.preload({  
            url: "_www/pages/login/login.html?k=4"  
        });  
            setTimeout(function() {  
                var array = plus.webview.all();  
                console.log("当前预加载的页面数量为" + array.length);  
                if(array) {  
                    for(var i = 0, len = array.length; i < len; i++) {  
                        console.log(array[i].getURL());  
                    }  
                }  
            }, 3000);  
        });  
        cw.addEventListener("hide", function() {  
            console.log("map页hide了");  
        });  
        cw.addEventListener("close", function() {  
            console.log("map页close了");  
        });  
    });  
})(window, mui, __);
2017-05-16 22:11 负责人:无 分享
已邀请:
Neil_HL

Neil_HL

我用你提供的代码试过,preloadLimit是起作用的,至于你说的“打印出来的预加载窗口信息经常大于5个”,是因为 plus.webview.all().length 获得的长度是所有webview窗口的数量,并不是预加载窗口的数量。

  • 亿朵云 (作者)

    好的,谢谢.我还有一些问题,在http://ask.dcloud.net.cn/article/25提到了"同时显示在屏幕上的webview不要超过3个,隐藏在后台的webview不要超过10个".第一,这里的"显示"是否是指处于"show"状态,"隐藏"是否是指处于"hide"状态;第二,如果是这样,当我们在webview A调用show方法显示另外一个webview B的时候,是否应该显式的close或者hide掉webview A以避免同时"显示"的webview超过3个

    2017-05-18 09:37

  • Neil_HL

    A打开B,一般是隐藏(hide)A, 显示是指的show,建议屏幕上显示的webview最好为1个,这样逻辑好处理一些,有需要的话就两个或3个,一旦超过3个,处理起来比较麻烦,主要还是看开发者自己的需求决定。

    2017-05-18 16:40

  • 亿朵云 (作者)

    但是,我测试的时候,如果直接在webviewA调用webviewB.show(),这个时候并没有触发webviewA的hide事件,也就是说虽然现在屏幕上看不见webviewA了,但是由于没有触发webviewA的hide事件,所以webviewA依然是处于show状态的,这与"A打开B,一般是隐藏(hide)A"是否不一致

    2017-05-19 11:07

亿朵云

亿朵云 (作者)

怎么感觉真的不管用.....难道是我的用法有问题...

  • 亿朵云 (作者)

    我的mui的版本是3.4.0

    2017-06-02 17:30

亿朵云

亿朵云 (作者)

参见
http://ask.dcloud.net.cn/question/1853

确实不是APP级别的

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