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