最近在做一款汽车资讯、新闻、参数查询的客户端,里面多处用到了网络请求以及列表显示,所以我采用Pivot的方式显示各项的内容,如图所示:
但是每一项的网络请求Api是不同的,所以要发送不同的网络请求。由于Pivot是在同一个page下进行展示的,所以,我不得不考虑一个问题:
就是Pivot的这样的加载方式对数据请求到底是怎么影响的?多项是同时加载的吗?这样会对性能有要求吗?
带着这些疑问,我做了下测试,在每个PivotItem的Loaded事件处设置断点,进行调试,发现只要进入这个page,所有PivotItem的Loaded事件都会被触发,那么是不是所有数据在此时都会被加载呢?当然不是,微软还是考虑到了实际应用中的性能问题的。所以,我又做了如下测试,在PivotItem的子控件里添加监听它的Loaded的事件,发现, 只有划动到这个页面的时候,才会触发这个事件,所以,得出的结论是:
Pivot控件在进入整个Page时,每个PivotItem都会加载一个“Frame框架”,只占着各自的位置,其实里面的对象并没有被加载,只有当划动到某个PivotItem时,它的此项才会被加载。
而且,值得注意的是,我在做这款应用时,用到网络请求的结果是放在集合中处理的,集合里面封装了请求网络数据的方法,一旦集合类初始化,则会执行网络请求,比如下图所示的这个界面,绑定了比较多的数据集合,而每个集合在new 对象时,都会触发网络请求。只要集合被绑定了,那么按理来说,在这里就会触发网络请求的,但是,测试了一下,在进入这个Page时,由于绑定源不是当前的PivotItem,所以集合对象并没有立即初始化,所以并没有去直接请求网络,直到划动到相应的PivotItem时,此时,绑定的对象才有效,这时才会请求网络数据。
我只能说,这样太好了!我还担心这么多页面会同时请求,出现性能问题,看来是不用担心了,只要做好列表虚拟化,异步增量加载,以及缓存就OK了!欢迎大家加入uwp爱好交流群:193148992。共同学习,共同探讨。