使用DeviceOne实现微信小程序功能


Posted in Javascript onDecember 29, 2016

微信小程序即将推出,还没推出就火的不行了。基于微信这个巨大平台,小程序必然能有巨大成功。不过它并不能完全取代App,该开发App还得开发。如果我们自己想实现一个基于自己的APP包含类似微信的小程序功能,该如何实现了?我们先来看看小程序的技术特点。

小程序的特点

1. 跨平台,微信就像JRE,在不同操作系统上都有实现,所以微信上的小程序就像运行在JRE上的java程序,从而实现跨平台。另外解决了多平台多机型的适配问题。

2. 体验好,webview加载html是最容易的跨平台方式,但是在手机上的体验太差。小程序和web开发,以及h5其实没有关系了,其ui和运行机制完全是原生,所以体验比公众号强多了。

3. 无需安装,只需扫描二维码。其实还是会有下载了,只不过下载的数据很小,用户根本察觉不到。比如你开发的小程序有10个页面,用户扫描的时候只会下载首页的几个文件,可能1k都不到,而且下载完就缓存在本地和内存了。

其实还有一个最大的优点是微信是巨量用户的粘度最高的应用了,基于这上面的小程序便于推广,这里我们暂时不谈。

我们再来看看缺点:

1. 只能基于微信入口,这是显然的,目前得到的消息是不可能在桌面上有小程序的入口方式,不知道以后是否支持。

2. 只能使用微信应用带的功能,不能使用其它第三方比如地图,支付,统计等功能。微信这些功能都有而且做的也很好,但是多元化更有利用长远的技术发展。

3. 小程序的能力有限,有限的ui和有限的功能不能应付复杂的交互和业务要求。另外开发者也无法扩展其基础功能。

DeviceOne能做到既具备以上优点,也能避免以上缺点,对此大家肯定会有所质疑。我们先简单介绍一下DeviceOne针对以上几点对应的说明,再看看一个示例。

DeviceOne的特点

1. 跨平台,以js或lua为开发语言,一次编写,发布到android,ios和windows平台。而且也是自动适配各种机型。

2. 体验好,从ui到功能,deviceone完全是原生实现,和html没有任何关系。所以是原生的体验效果。

3. 无需安装,这个我们可以从下面的例子再仔细分析。

4. 不是基于一个固定的框架App,也就是说你可以做一个你自己的微信程序,我们暂且称之为主程序,可以有自己的图标,自己的入口,然后加载你自己定义的小程序。包括主程序都是完全可以热升级,就像更新小程序一样的方便。

5. deviceone把app开发完全跨平台组件化了,把开发人员分二部分,开发app的业务开发人员和开发原生组件的原生开发人员。

5.1 开发app的人员不需要懂android和ios,不需要有android和ios开发环境,只需要js就能开发app

5.2 开发组件的人员不需要理解和了解具体app的业务需求,只需要开发可以复用的跨平台的ui和功能组件。所以可以集成任何第三方组件,比如可以集成百度地图,也可以集成高德地图,可以集成alipay也可以集成微信支付。

6. deviceone的组件具有扩展功能,目前官方提供了100多个组件,其它开发者提供了30多个组件,基于deviceone平台,其它原生开发者可以不断的扩展组件商店。

类似小程序的示例

先看运行效果图

使用DeviceOne实现微信小程序功能

这是deviceone动态加载组件API示例的一个应用。我们称之为主程序,本身就是用deviceone开发的。列表中列出的do_App, do_Global之类的都是deviceone的组件,每个组件对应一个新的程序,是示范这个组件功能的一个小例子,我们称之为小程序,但是本质上和主程序没有区别。

运行机制很简单:

1. 程序启动从一个web服务获取到一个json,里面包含多个组件的信息,包括名称,文件大小,下载小程序的url,文件md5值

2. 比较本地的旧的md5是否和新的md5是否一样,如果不一样,提示有更新,可以通过点击更新按钮下载最新的小程序,这里没有使用二维码扫描下载小程序的首页,简单改造就能做到那样。

3. 点击一行,打开新页面,加载小程序,退出页面,关闭小程序。

基本代码如下:

var http = mm("do_Http");
// 显示等待窗口
var waittingLayer = require("source://modules/waittingLayer/call");
waittingLayer.invoke({
 hint : "请稍后"
});
var src = "data://" + data.id + ".zip";
http.url = data.url;
http.on("result", function(d) {
 sm("do_Storage").unzip(src, "data://temp/" + data.id, function(_d, e) {
  var updatesrc = "data://temp/" + data.id + "/source/view";
  sm("do_App").update([ updatesrc ], "source://view", function() {
   sm("do_Page").fire("installed", data.id);
   // 隐藏等待窗口
   var waittingLayer = require("source://modules/waittingLayer/call");
   waittingLayer.invoke({
    close : true
   });
  })
 })
 
})
http.download(src);

总结

感觉是不是很简单,但是意义很重大,除了小程序更新很容易以外,主程序也很容易更新,原理完全一致。这能用于2个基本用途。

1. 实现程序的热更新,deviceone的业务所有逻辑和页面都是文本文件,包括js代码和ui文件(json描述),天然更新非常容易。

2. 对应大一点的应用或企业,完全可以把业务让不同的开发团队和部门独立完成,然后由一个总个框架App来管理,做到应用开发和管理标准化。而且deviceone有强大的云打包能力,编译打包也可以标准管理。

最后要说的是deviceone并不是只是一个想法和实践,它已经是正式运营一年多的产品,已经为互联网很多个人和公司提供了很多服务,上线了很多面向个人和企业的应用。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 幻灯片插件(带缩略图功能)
Jan 24 Javascript
javascript制作loading动画效果 loading效果
Jan 14 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
Dec 12 Javascript
javascript函数式编程程序员的工具集
Oct 11 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 Javascript
jQuery 获取多选框的值及多选框中文的函数
May 16 Javascript
jQuery使用each方法与for语句遍历数组示例
Jun 16 Javascript
Bootstrap3制作搜索框样式的方法
Jul 11 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
Aug 03 Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 Javascript
基于脚手架创建Vue项目实现步骤详解
Aug 03 Javascript
Angularjs 动态改变title标题(兼容ios)
Dec 29 #Javascript
浅谈js算法和流程控制
Dec 29 #Javascript
canvas学习之API整理笔记(二)
Dec 29 #Javascript
Node.js复制文件的方法示例
Dec 29 #Javascript
详解微信小程序——自定义圆形进度条
Dec 29 #Javascript
JS作用域深度解析
Dec 29 #Javascript
javascript中的深复制详解及实例分析
Dec 29 #Javascript
You might like
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
vue.js todolist实现代码
2017/10/29 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
Python中bisect的用法
2014/09/23 Python
Python 互换字典的键值对实例
2019/02/12 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
基于python3的socket聊天编程
2020/02/17 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
大学生就业自荐书
2014/06/16 职场文书
婚庆公司计划书
2014/09/15 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
黄埔军校观后感
2015/06/10 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
公司员工离职感言
2015/08/03 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python