作家
登录

微信小程序架构分析 (中)

作者: 来源: 2017-06-09 13:45:43 阅读 我要评论

 type="text/css" href=http://developer.51cto.com/art/201706/"index.wxss"

个中 <!-- percodes --> 会在 dev 模式开启后被调换为一个时光锚点,例如:

这里的 wxss 文件包含的是原始 wxss 文件转换后的 css

以及生成 DOM 的启动脚本:

  1. <script> 
  2.   document.dispatchEvent(new CustomEvent("generateFuncReady", { 
  3.     detail: { 
  4.       generateFunc: $gwx('./page/index.wxml'
  5.     } 
  6.   })) 
  7. </script>  

WAWebview.js 文件中的各个模块(行号为 jsbeautify 之后代码行号,开辟者对象版本:092300):

  • 1-77 行: WeixinJSBridge 对象兼容层,这个大年夜概只会在调试时用到,因为开辟时和运行时页面都邑被后台以注入的方法添加 WeixinJSBridge 这个对象。我们可以经由过程这段代码看到它裸露的办法: invoke invokeCallbackHandleron publish subscribe subscribe subscribeHandler。
  • 78-235 行:Reporter 对象,它的感化就是发送缺点和机能统计数据给后台
  • 236-596 行:wx 对象,页面的核心之一,一方面封装 WeixinJSBridge 的 invokeMethod 方位为易于调用的情势(例如 redirectTo, navigateTo等),另一方面封装 WeixinJSBridge 回调办法,调用者可以应用wx.onAppDataChange(callback) 添加数据变革的回调函数,最后供给wx.publishPageEvent 发送页面事宜到后台
  • 607-1267 行:wxparser 对象,供给 dom 到 wx element 对象之间的映射操作,供给元素操作治理和事宜治理功能
  • 1268-1285 行:转发 window 上的 animation 和 transition 相干的动画事宜到 exparser
  • 1286-1313 行:订阅并转发 WeixinJSBridge 供给的全局事宜到 exparser
  • 1324-1345 行:转发 window 上的 error 以及各类表单事宜到 exparser
  • 1347-3744 行:应用 exparser.registerBehavior 和exparser.registerElement 办法注册各类以 wx- 做为标签开首的元素到 exparser
  • 3744-4498 行:virtual dom 衬着算法实现,供给 diff apply render 等办法,该模块接口根本与 virtual-dom 一致,这里特其余处地点于它所 diff 和生成的并不是原生 DOM,而是各类模仿了 DOM 接口的 wx element 对象
  • 4599-4510 行:插入默认样式到页面

大年夜页面 data 到 dom 的重要流程如下:

  1. var vtree 
  2. var rootNode 
  3.  
  4. document.addEventListener("generateFuncReady"function(e) { 
  5.   var generateFunc = e.detail.generateFunc; 
  6.   wx.onAppDataChange(function(obj) { 
  7.     // 归并 data 到现有 data 
  8.     DataStore.setData(obj.data) 
  9.     // 生成 virtual dom 的 javascript plain object 
  10.     var props = generateFunc(DataStore.getData()) 
  11.  
  12.     // 第一次衬着 
  13.     if (obj.options.firstRender) { 
  14.       vtree = createVirtualTree(props, true
  15.       rootNode = vtree.render() 
  16.       rootNode.WordStrDocumentElement(document.body) 
  17.       wx.initReady() 
  18.     } else { 
  19.       var other_vtree = createVirtualTree(props, false
  20.       var patches = vtree.diff(other_vtree) 
  21.       patches.apply(rootNode) 
  22.       vtree = other_vtree 

      推荐阅读

      微信小程序架构分析 (上)

    【引自第九法度榜样的博客】信赖不少上手试用了微信小法度榜样开辟者对象的开辟者都邑对其实现有些困惑, 本文试图对其架构模型进行一些解析。如出缺点之处,迎接留言指出。本文分为以下几个部分: 小法度榜样调试>>>详细阅读


    本文标题:微信小程序架构分析 (中)

    地址:http://www.17bianji.com/lsqh/35673.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)