1、 微信小程序框架解析hongweiqu(渠宏伟)CONTENTS 01 小程序介绍和演示 02 小程序架构 03 小程序视图层 04 小程序逻辑层05 小程序开发经验 小程序介绍 小程序的特点类WEB 不是HTML5媲美原生操作体验即用即走,随手可得拥有离线能力基于微信跨平台 小程序演示企鹅电竞小程序体验 为什么那么快Native预先加载一个WebView当打开指定页面时,无需加载额外资源直接渲染返回显示历史View退出小程序,View状态不销毁Page Frame common lib user common js 小程序架构 小程序架构View(视图层)PagePagePageWXMLWX
2、SSApp Service(逻辑层)ManagerAPINative(系统层)JSBridge微信能力离线存储网络请求DataEventDataEvent 小程序架构ViewApp ServiceCDNWeb ServerDataEventDataEventIn WeChatStorgeInit requestPackageAjax requestJSON DataNetwork View(页面视图)View-WXML支持数据绑定支持逻辑算术、运算支持模板、引用支持添加事件(bindtap)WXML(WeiXin Markup Language)WXMLJSVirtualDOMDOM Tree
3、CompilerDataVirtual DOM View-WXSS支持大部分CSS特性添加尺寸单位rpx,可根据屏幕宽度自适应使用import语句可以导入外联样式表不支持多层选择器-避免被组件内结构破坏WXSS(WeiXin Style Sheets)WXSSJSCSSCompilerWidth,DPR View WXSS Selectors选择器样例样例描述.class.intro选择所有拥有 class=intro 的组件#id#firstname选择拥有 id=firstname 的组件elementview选择所有 view 组件element,elementview,checkbox
4、选择所有文档的 view 组件和所有的 checkbox 组件:afterview:after在 view 组件后边插入内容:beforeview:before在 view 组件前边插入内容 View-Component大类大类细分细分WXMLWXMLHTMLHTML视图容器视图容器普通视图容器viewdiv、ul、li、article、section滚动视图scroll-view滑块视图swiper基础内容基础内容文本textspan、em、p图标iconspan、em、i进度条progressdiv链接、导航链接、导航链接、导航navigatora表单表单按钮buttonbutton、in
5、put单选radioinput多选checkboxinput表单formform输入框inputinput改进表单可用性labellabel滚动选择器pickerselect开关选择器switchinput、div操作反馈操作反馈底部菜单action-sheetdiv、ul弹窗modaldivtoasttoastdiv加载loadingimg、span、div媒体媒体图片imageimg音频audioaudio视频videovideo地图地图地图mapmap画布画布画布canvascanvas View-Component小程序的组件基于Web Component标准使用Polymer框架实现
6、Web Component View-Native ComponentNative组件层在WebView层之上 App Service(逻辑层)App Service逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈1、App()小程序的入口;Page()页面的入口3、提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。4、每个页面有独立的作用域,并提供模块化能力。5、数据绑定、事件分发、生命周期管理、路由管理运行环境IOS-JSCoreAndroid-X5 JS解析器DevTool-nwjs Chrome 内核 App Service-Binding App Servi
7、ce-Life CylceNativeLaunchonLaunchApp ServiceViewinitPageinitRenderonLoadonShowonReadyHandlerUser EventEventNotifySend init DataRe-RenderSend DataNew ViewNew PageonHideonShowRouteRoute App Service-APIAPI通过JSBridge和Native 进行通信分类分类名称名称API网络网络发起请求request上传下载uploadFile/downloadFileWebSocketconnectSocket/
8、onSocketOpen/onSocketError/sendSocketMessage/onSocketMessage/closeSocket/onSocketClose媒体媒体图片chooseImage/previewImage/getImageInfo视频chooseVideo音频playVoice/pauseVoice/stopVoice录音startRecord/stopRecord文件saveFile/getSavedFileList/getSavedFileInfo/removeSavedFile数据数据数据缓存setStorage/getStorage/removeStorag
9、e/clearStorage位置位置获取位置getLocation查看位置openLocation设备设备网络状态getNetworkType系统信息getSystemInfo重力感应onAccelerometerChange罗盘onCompassChange拨打电话makePhoneCall界面界面CanvasdrawCanvas/drawCanvas/canvasToTempFilePath动画createAnimation导航、设置导航条navigateTo/redirectTo/navigateBack交互反馈showToast/showModal/showActionSheet开放接
10、口开放接口登录login用户信息getUserInfo微信支付requestPayment模板消息 App Service-RouternavigateTo(OBJECT)保留当前页面,跳转到应用内的某个页面,使用navigateBack可以返回到原页面。页面路径只能是五层redirectTo(OBJECT)关闭当前页面,跳转到应用内的某个页面。navigateBack(OBJECT)关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()获取当前的页面栈,决定需要返回几层。小程序开发经验 小程序可以借鉴的优点1 1、提前新建、提前新建WebViewWebView,准备
11、新页面渲染。,准备新页面渲染。2 2、ViewView层和逻辑层分离,通过数据驱动,不直接操作层和逻辑层分离,通过数据驱动,不直接操作DOMDOM。3 3、使用、使用VirtualVirtual DOMDOM,进行局部更新。,进行局部更新。4、全部使用https,确保传输中安全。5、前端组件化开发。6、加入rpx单位,隔离设备尺寸,方便开发。小程序存在的问题1 1、小程序仍然使用、小程序仍然使用WebViewWebView渲染,并非原生渲染渲染,并非原生渲染2 2、需要独立开发,不能在非微信环境运行。、需要独立开发,不能在非微信环境运行。3 3、开发者不可以扩展新组件。、开发者不可以扩展新组件
12、。4、服务端接口返回的头无法执行,比如:Set-Cookie。5、依赖浏览器环境的js库不能使用,因为是JSCore执行的,没有window、document对象。6、WXSS中无法使用本地(图片、字体等)。7、WXSS转化成js 而不是css,为了兼容rpx。8、WXSS不支持级联选择器。9、小程序无法打开页面,无法拉起APP。脱离微信的“小程序”:PWA 渐进式应用PWA-Progressive Web App PWA 特点 渐进增强渐进增强-支持的新特性的浏览器获得更好的体验,不支持的保持原来的体验。离线访问离线访问-通过 Service Workers 可以在离线或者网速差的环境下工作
13、。类原生应用类原生应用-使用app shell model做到原生应用般的体验。可安装可安装-允许用户保留对他们有用的应用在主屏幕上,不需要通过应用商店。容易分享容易分享-通过 URL 可以轻松分享应用。持续更新-受益于 service worker 的更新进程,应用能够始终保持更新。安全-通过 HTTPS 来提供服务来防止网络窥探,保证内容不被篡改。可搜索-得益于 W3C manifests 元数据和 service worker 的登记,让搜索引擎能够找到 web 应用。再次访问-通过消息推送等特性让用户再次访问变得容易。PWA-Web App Manifest使Web更像NativeWeb App Manifest以JSON的格式定义Web 应用的相关配置(应用名称、图标或图像连接、启动URL、自定义特性、启动默认配置、全屏设置等)。PWA-Service Workers增强Web能力通过Service Works实现资源离线缓存和更新 PWA-App Shell 提升显示效率App Shell(应用外壳)是应用的用户界面所需的最基本的 HTML、CSS 和 JavaScript,首次加载后立刻被缓存下来,不需要每次使用时都被下载,而是只异步加载需要的数据,以达到UI保持本地化。THANK YOU