小程序的开发框架MINA及小程序的启动机制

  

  MINA框架分三个部分

    视图层(View):有很多页面,每个页面有wxml和wxss组成的,视图结构和展现样式

    逻辑层(App Service):处理事物逻辑的地方以及数据交互的服务中心

    系统层(Native):微信客户端的原生能力(微信客户端的功能)

  小程序的视图层和逻辑层时双线程通信的,视图层和逻辑层之间,提供了数据传输和事件系统,视图层和逻辑层之间通过JSBrideg进行的

  逻辑层把视图变化通知给视图层,然后触发视图层的页面更新;

  视图层触发的事件通知给我们逻辑层,逻辑层进行业务处理;

  视图层如何将数据的变化实时的展现出来?

    wxml拥有元素属性和文本节点的树状图,在节点结构中,每个节点都有上下文的关系,所有在渲染wxml中,小程序会把wxml的节点树,转化为js对象,逻辑层发生变更时,在js文件中通过App()方法中的data对象向data()方法在视图层进行渲染,将前后数据进行对比,这种差异通过diff算法,渲染出正确的ui界面;

  小程序做了很多的优化

    例如:wxs和wxss及wxml等都是在ui线程上的,通常我们请求的数据,我们都会进行filter(过滤)的处理,这个时候我们放到,ui线程去做,会避免跨线程通信的消耗

    当我们的逻辑层(线程)受到阻塞的话,依旧不影响ui线程的正常处理和渲染,也在次避免了跨线程通信的消耗;

  

,  小程序的启动机制:

    小程序的第一次启动,加载时间是比较长的,但后面的启动的话,加载时间都比较快;

  小程序启动分两种,冷启动和热启动;

    冷启动:用户首次启动 或 小程序被微信主动销毁后在此打开的情况,此时小程序需重新加载启动;

    热启动:假如用户打开某个小程序后,一定时间内在次打开这个小程序,这个时候我们就不需要进行重新加载,只是从后台切换到前台,这就是热启动

  小程序被销毁的状态的两种情况:

    第一种:小程序进入后台,小程序帮我们维持小程序的一个状态,超过这个时间后,微信就会主动销毁,目前这个时间是5分钟

    第二种:在一定时间内,我们受到2个及以上的系统警告,小程序就会被销毁,目前这个时间间隔是5秒;

  小程序启动机制流程图

  

  小程序在启动的时候,微信客户端它里面的视图层 和 逻辑层他的一些交互逻辑,以及数据缓冲的存取操作

  小程序在启动的时候,会在CDN请求最新的代码包,第一次启动,我们需要代码包下载完毕后,注入到web view的容器后,我们才能执行我们的小程序页面,所以在网不好的情况下,感受到启动时间较长,后端会帮我们把代码包缓存到本地,我们下次请求的时候,我们会在CDN上请求是否有新版本的代码包,这里会有较验逻辑,我们会运行之前已经下载好的代码包,同时又会异步下载最新版的代码包,下次启动的时候用。

  CDN概念:内容分发到网络,主要作用把我们请求到的内容,分布到我们最近的一个网络节点服务器,提高用户服务的响应速度及成功率,解决一些带宽,服务性能带来的延迟问题;

  我们在小程序内访问第三方服务器发送的一个ajax请求,服务器会返回一个json格式的数据

 

  

转载于:https://www.cnblogs.com/shangjun6/p/10853367.html

Mina介绍:https://blog.csdn.net/haoranhaoshi/article/details/89102597 工程内容介绍(由浅入深,稳扎稳打): test1:建立Server和Client。有Client加入,Server广播给所有Client。 test2:在控制台中Server可以给所有Client发送数据,Client可以给Sever和其他Client发送数据。 test3:(1)特定角色的Client处理消息。 (2)特定角色的Client收到消息。 Client与Server建立Session后,Server存储Client的Role和Session映射(同一个角色可映射多个Session)。角色Role在MinaClientHandler中。修改Role,启动多个Client测试。Client在控制台中Role:Message的格式给对应Role的Client发送Message。 test4:(1)Client启动时如果没有Server,就先建立Server。在test3(2)基础上修改MinaClient的session = future.getSession();即可。 (2)如果建立Server的Client离开了,让另一个Client建立Server。 (3)Client给Server发送数据,如果失败,重新发送。 test5:一个Client有一个Server。Client和其他Client的Server建立Session。 test6:如果Client连接Server失败,就只建立Server,如果Server离开,第一个检测到的Client建立Server。 一个进程中包括Server和Client,进程A和B通信,Server负责接收另一个进程的消息,Client负责发送给另一个进程消息,无需Server独立启动,或者绑定在一个进程中,保证最后离线,或者绑定在一个进程中,进程离线后绑定在其他进程中。把Client中的OWN_SERVER_PORT和ANOTHER_SERVER_PORT调换后启动另一个进程,即可测试。 test7:解决相同角色,分工不同: (1)连接建立时传角色,同一个角色,多个Client,连接时间区分Client (2)连接建立时传角色和功能ID,功能ID配置到启动参数,发消息时消息头传角色和消息ID (3)细化角色。 (4)Client发送功能ID,根据功能ID、Client_ID映射文件得到Client_ID,Client_ID配置到启动参数。 (5)连接失去时,更新角色和Session的Map。 test3.type1对应test3(1) test3.type2对应test3(2) 待做: Server不能通过控制台广播到每一个Client,ioSession.write(scanner.next());之后的代码行,会等下一次控制台输入,Enter按下后执行。 test4(2)(3)、test6、test7 已经转去Vert.x了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值