前言

  工欲善其事,必先利其器

  首先,我们需要知道微信小程序是什么?微信小程序内核是什么?微信小程序的开发语言什么?这样才能更好的开发微信小程序,以及解决遇到的问题。

一、微信小程序是什么

微信小程序是一个依托于微信,微信提供一个接口运行浏览器内核上的一个程序。

  微信小程序是一个小程序可以有很多页面,每个页面承载不同的功能,页面之间可以互相跳转。小程序分为渲染层和逻辑层,渲染层中包含了多个 WebView,每个 WebView 对应到我们的小程序里就是一个页面 Page,每一个页面都独立运行在一个页面层级上。它也可以做得很丰富,就像native app一样,可以调用原生的各种接口,像网络状态、罗盘,重力,拨打电话等

二、微信小程序内核是什么

微信小程序的编译内核环境根据不同平台而不同。

  • 在 iOS 上,小程序的 javascript 代码是运行在 JavaScriptCore 中
  • 在 Android 上,小程序的 javascript 代码是通过 X5 内核来解析
  • 在 开发工具上, 小程序的 javascript 代码是运行在 nwjs(chrome内核) 中

JavaScriptCore

JavaScriptCores是开源的,下载地址:https://github.com/phoboslab/JavaScriptCore-iOS

OS X Mavericks 和 iOS 7 引入了 JavaScriptCore 库,它把 WebKit 的 JavaScript 引擎用 Objective-C 封装,提供了简单,快速以及安全的方式接入世界上最流行的语言。不管你爱它还是恨它,JavaScript 的普遍存在使得程序员、工具以及融合到 OS X 和 iOS 里这样超快的虚拟机中资源的使用都大幅增长。(参考iOS官方文档:https://developer.apple.com/documentation/javascriptcore?language=objc)

X5 内核

唯一一个属于国人开发,大鹅厂自己的浏览器解析内核

nwjs

原名:node-webkit 当然也是开源的:https://github.com/nwjs/nw.js/

nw.js 是基于 Chromium和 Node.js运行的, 以前也叫nodeWebkit。这就给了你使用HTML和JavaScript来制作桌面应用的可能。在应用里你可以直接调用Node.js的各种api以及现有的第三方包。因为Chromium和 Node.js的跨平台,那么你的应用也是可以跨平台的。现在已经有很多知名的应用是基于NW.js实现,

三、微信小程序的开发语言是什么

1.微信小程序的开发

  微信小程序使用了前端技术栈 JavaScript/WXML/WXSS

  • JavaScript: 微信小程序的 JavaScript 运行环境即不是 Browser 也不是 Node.js。它运行在微信 App 的上下文中,不能操作 Browser context 下的 DOM,也不能通过 Node.js 相关接口访问操作系统 API。所以,严格意义来讲,微信小程序并不是 Html5,虽然开发过程和用到的技术栈和 Html5 是相通的。
  • WXML: 作为微信小程序的展示层,并不是使用 Html,而是自己发明的基于 XML 语法的描述。
  • WXSS: 用来修饰展示层的样式。官方的描述是 “ WXSS (WeiXin Style Sheets) 是一套样式语言,用于描述 WXML 的组件样式。WXSS 用来决定 WXML 的组件应该怎么显示。” “我们的 WXSS 具有 CSS 大部分特性...我们对 CSS 进行了扩充以及修改。”基于 CSS2 还是 CSS3?大部分是哪些部分?是否支持 CSS3 里的动画?不得而知。

四、微信小程序

1.小程序与普通网页开发的区别

小程序的主要开发语言是 JavaScript ,所以通常小程序的开发会被用来同普通的网页开发来做对比。两者有很大的相似性,对于前端开发者而言,从网页开发迁移到小程序的开发成本并不高,但是二者还是有些许区别的。

网页开发渲染线程和脚本线程是互斥的,这也是为什么长时间的脚本运行可能会导致页面失去响应,而在小程序中,二者是分开的,分别运行在不同的线程中。网页开发者可以使用到各种浏览器暴露出来的 DOM API,进行 DOM 选中和操作。而如上文所述,小程序的逻辑层和渲染层是分开的,逻辑层运行在 JSCore 中,并没有一个完整浏览器对象,因而缺少相关的DOM API和BOM API。这一区别导致了前端开发非常熟悉的一些库,例如 jQuery、 Zepto 等,在小程序中是无法运行的。同时 JSCore 的环境同 NodeJS 环境也是不尽相同,所以一些 NPM 的包在小程序中也是无法运行的

网页开发者需要面对的环境是各式各样的浏览器,PC 端需要面对 IE、Chrome、QQ浏览器等,在移动端需要面对Safari、Chrome以及 iOS、Android 系统中的各式 WebView 。而小程序开发过程中需要面对的是两大操作系统 iOS 和 Android 的微信客户端,以及用于辅助开发的小程序开发者工具,小程序中三大运行环境也是有所区别的.如表1-1所示。

<center>表1-1 小程序的运行环境</center>

运行环境 逻辑层 渲染层
iOS JavaScriptCore WKWebView
安卓 X5 JSCore X5浏览器
小程序开发者工具 NWJS Chrome WebView

2.WebView

WebView的运行流程和一些弊端。

流程:
打开一个 WebView 通常会经历以下几个阶段:

  • 交互无反馈
  • 到达新的页面,页面白屏
  • 页面基本框架出现,但是没有数据;页面处于 loading 状态
  • 出现所需的数据

WebView 启动过程大概分为以下几个阶段:

WebView启动过程

存在的问题:
在加载WebView页面时,时常出现白屏现象:

加载WebView出现白屏

除了白屏,影响 Web 体验的问题还有缺少操作的反馈,主要表现在两个方面:页面切换的生硬和点击的迟滞感。

3.微信小程序

1)通信模型

小程序的渲染层和逻辑层分别由2个线程管理:渲染层的界面使用了WebView 进行渲染;逻辑层采用JsCore线程运行JS脚本。一个小程序存在多个界面,所以渲染层存在多个WebView线程,这两个线程的通信会经由微信客户端(下文中也会采用Native来代指微信客户端)做中转,逻辑层发送网络请求也经由Native转发,小程序的通信模型如下图所示。

渲染过程

这就是小程序双线程模型的由来:

  • 逻辑层:创建一个单独的线程去执行 JavaScript,在这个环境下执行的都是有关小程序业务逻辑的代码
  • 渲染层:界面渲染相关的任务全都在 WebView 线程里执行,通过逻辑层代码去控制渲染哪些界面。一个小程序存在多个界面,所以渲染层存在多个 WebView 线程.

2)双线程下的界面渲染

小程序的逻辑层和渲染层是分开的两个线程。在渲染层,宿主环境会把WXML转化成对应的JS对象,在逻辑层发生数据变更的时候,我们需要通过宿主环境提供的setData方法把数据从逻辑层传递到渲染层,再经过对比前后差异,把差异应用在原来的Dom树上,渲染出正确的UI界面,如下图所示。

界面渲染

小程序的渲染的整体流程:

  • 1.在渲染层把 WXML 转化成对应的 JS 对象。
  • 2.在逻辑层发生数据变更的时候,通过宿主环境提供的 setData 方法把数据从逻辑层传递到 Native,再转发到渲染层。
  • 3.经过对比前后差异,把差异应用在原来的 DOM 树上,更新界面。

总之,小程序通过双线程的方式解决WebView存在的各种问题,让小程序更加想Native的体验。

如何给APP开发属于自己的小程序相关推荐

  1. PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP

    项目介绍 一款轻量级.高性能.前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城. 完整代 ...

  2. 大型程序是如何开发的_大型小程序如何研发提效

    作者:王梦君 微信公众号:滴滴顺风车技术 出处:https://mp.weixin.qq.com/s/M1VArJ_ORY-eXSKzD6ysQw 导读: 自2016年小程序诞生以来,小程序以其&qu ...

  3. 云服务器定时启动程序_过去、现在和未来:开发一款微信小程序的技术迭代全过程...

    2019 年 10 月 19 日,由腾讯云与微信小程序团队联合举办的"小程序·云开发"技术峰会在北京召开.23 万小程序·云开发注册账户,50 多万开发者上手使用,这是腾讯云与微信 ...

  4. webview加载百度失败_移动AI系列百度paddle.js在助力开发智能化的微信小程序

    本文作者为百度 APP 移动研发部高级研发工程师,百度 Web 前端智能化方向主要成员.过去一段时间,曾负责百度多模视觉搜索前端业务及多模视觉搜索的前端性能优化等相关工作.划重点:文末有照片! 早在今 ...

  5. Android studio开发-单界面单机小程序

    Android studio开发-单界面单机小程序 最终结果展示 步骤: 建立项目 file-new-new project 新建一个项目文件 选择一个empty activity 配置项目名称以及项 ...

  6. 微信小程序开发语言(微信小程序开发教程)详细步骤

    微信小程序开发语言 开发微信小程序用什么语言 1.微信小程序开发所需要的语言比较特别,首先介绍一下需要使用到的文件类型大致分为:WXML(WeiXin Mark Language 微信标记语言).WX ...

  7. 0基础快速开发口袋网盘小程序

    点击观看大咖分享 口袋网盘小程序使用的是小程序的云开发,云开发自带免费的云存储.云数据库,开始时不需要涉及服务器的搭建及运维,也不需要进行域名注册与备案,只需要通过一些简单的API就能实现一个完整项目 ...

  8. 如何开发一个个人微信小程序,微信小程序开发入门教程

    做任何程序开发要首先找到其官方文档,我们先来看看其有哪些官方文档. 微信小程序开发文档链接为:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html, ...

  9. 微信小程序的开发:通过微信小程序看前端

    前言 2016年9月22日凌晨,微信官方通过"微信公开课"公众号发布了关于微信小程序(微信应用号)的内测通知.整个朋友圈瞬间便像炸开了锅似的,各种揣测.介绍性文章在一夜里诞生.而真 ...

最新文章

  1. IDEA下JNI开发快速生成头文件方法
  2. php root权限执行命令,如何使用PHP执行需要root权限的系统命令
  3. C# static变量、const变量、readonly变量
  4. 极简代码(二)—— 转置 list of lists
  5. java string的内存模型_Java String内存模型
  6. python如何保存源文件_python处理document文档保留原样式
  7. oneday2mybatis下载
  8. win10访问不了win7文件服务器,win7系统无法访问win10系统的共享文件的解决方法
  9. 复杂UI卡顿问题没想到还能这么优化?
  10. 蓝牙beacon入门教程
  11. 【解密】筛选数据分析师简历全流程
  12. Mac finder 文件剪切方法 怎么剪切/移动 剪切快捷键
  13. docker MySQL 双主_DockerMysql数据库实现双主同步配置详细·TesterHome
  14. Unity中,区别LookAt与LookRotation
  15. 10电脑睡眠后自动关机怎么回事 win_win10睡眠变自动关机怎么办
  16. 【一起学Rust | 框架篇 | Frui框架】rust一个对开发者友好的GUI框架——Frui
  17. Flexigrid在FleaPHP下的使用方法介绍
  18. Groovy(Java笨狗)系列--datatypes
  19. 【黑猩猩算法】基于加权反对技术和贪婪搜索进化黑猩猩优化算法求解多模态工程问题附matlab代码
  20. 公众号榜单 | 2020·7月公众号原创排行榜重磅发布

热门文章

  1. mvn 使用中的错误
  2. 为什么公司要努力发展数字化战略
  3. Palo Alto Networks漏洞防护扩展至云端
  4. SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)...
  5. 关于ASP.NET 中的主题
  6. Struts1.x在MyEclipse中的环境搭建和配置
  7. 应用层——使用 Socket 通信实现 FTP 客户端程序
  8. 详解VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射
  9. virtualbox 命令
  10. php怎样数据缓存文件,php数据缓存到文件类设计