深入的wepy源代码:Wepy运行原理分析
2019-07-31 09:40:14 来源:沈阳小程序开发 作者:沈阳软件开发
在分析源代码之前,让我们回顾一下wepy的使用:
让我们看一下导出的类以及它如何转换为小程序。
在《深入wepy源码:wpy文件编译过程》中,我们介绍了wepy-cli如何编译wpy文件。据说complie-script.js会在处理脚本代码时添加wepy初始化代码。编译dist目录中的文件后,如下所示:
//dist/app.jsApp(require('。/npm/wepy/lib/wepy.js')。default。$ createApp(_default,{})); //dist/pages/index.js Page(require( '././npm/wepy/lib/wepy.js').default.$createPage(Index,'pages/index'));如您所见,$ createApp和$ createPage方法主要被调用。在查看这两种方法之前,让我们先看一下wepy的目录结构,以便以后的分析能够更好地理解。
wepy目录结构├─wepy ├─src ├─app.js 全局app逻辑,请求优化、promisify API、拦截器功能等 ├─base.js 定义了 $createApp 和 $createPage 等方法 ├─component.js 组件逻辑,脏值检查、组件通信等 ├─event.js 事件方法 ├─mixin.js 混合方法 ├─native.js 空,代码里用于app.js中重新定义wx接口 ├─page.js 继承component,page的一些优化 ├─util.js 工具方法 ├─wepy.js 入口文件 ├─test ├─...
createApp和createPage
$createApp// dist/app.jsApp(require('./npm/wepy/lib/wepy.js').default.$createApp(_default, {}));
$ createApp()返回一个object类型的配置,其中包含方法['onLaunch','onShow','onHide','onError']。
还实现了$ initAPI(),它主要使用Object.defineProperty的get方法将返回值封装为promise。这也是API实现承诺的核心。
$createPage// dist/pages/index.js Page(require('./../npm/wepy/lib/wepy.js').default.$createPage(Index , 'pages/index'));
$ createPage()类似于$ createApp(),除了它返回Page的方法。此外,在生命周期中,添加了数据脏值检查$ apply()。
数据绑定
Wepy使用脏数据检查封装本机小程序setData,并在函数运行周期结束时执行脏数据检查。如果在异步函数中更新数据,则需要手动执行$ apply()。
在$ createPage()中,在生命周期中调用$ apply()以查看其定义:
$ apply(fn){if(typeof(fn)==='function'){fn.call(this);这适用于$(); } else {if(this。$$ phase){this。$$ Phase='$ apply'; } else {this。$ digest(); }}}$$阶段标志检查是否存在脏数据检查。如果它没有运行,请执行$ digest()。
$ digest(){let k; let originData=this。$ data;这个。$$ phase='$ digest';这个。$$ dc=0; while(this。$$ phase){this。$$ dc ++;如果(此。$$ dc>=3){throw new Error('不能在$ apply进程中调用$ apply');这. $$阶段=(这个。$$阶段==='$ apply')? '$ digest': false; }}执行$ digest()时,它主要遍历originData并将originData [k]与此[k]进行比较。如果它不相同,则将其放在readyToSet中,并在循环之后,统一执行setData方法。
最后,检查$$ phase是否设置为'$ apply',如果是,则执行另一次脏数据检查。
< 汇海(www.hvihi.com)是国内知名的商城系统和商城网站建设提供商,其中汇海技术小程序系统提供小程序商城开发,小程序配送系统,微分配系统,商城系统,电子商务网站建设, 微信发行系统,小程序商城及其他多端商场和电子商务行业解决方案>
确认:这个文件和图像源网络编辑器的网站部分,如果有侵权及时通信删除。 汇海hvihi.com网站原创文章,请注明出处。
“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与
我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同
其观点或证实其内容的真实性。
热门文章
使用“扫一扫”即可将网页分享至朋友圈。