本文在2017年1月11日首发于王柏元的博客, 适值微信小程序正式发布两天后
(2017年)1月9日,万众期待的微信小程序正式发布;朋友圈早早地被微信小程序的相关信息所刷屏,极客人也耐不住心里的好奇心,也关注了几个微信小程序尝了尝鲜儿。从技术的角度上,微信小程序个人认为谈不上有什么可圈点的创新;但是在软件应用的生态上,可能会产生巨大的影响。
微信小程序背后的思考
早在一年多前,那时候还没有人任何微信小程序的风声,极客人在和同学的交流过程中,就曾“预言”了“小程序”的出现。那时候微信公众号只有 订阅号和服务号,我说,微信公众号应该可以加一个“应用号”,一年多以后,微信小程序横空出世,微信公众号也真的多了一个类型 “应用号”,名字和我当初起的都一模一样。当然,我在这里并不是想炫耀自己前瞻眼光,而是想表明,微信小程序的出现是软件开发中一个很正常的产物。
在软件开发繁荣的今天,编程语言越来越多,软件开发的平台不尽相同,软件开发商为了迎合不同使用平台的用户,不得不开发各个平台上的应用,IOS、Android作为移动操作系统的两大巨头,每个都有巨大的用户群,这意味着软件厂商要做一个同样的软件,都要编写两套代码:Android上的JAVA,IOS上的Object C/Swift,这无疑提高了成本。从近几年的软件开发的趋势来看,虽然大家都以标榜自己“全栈开发工程师”为荣,但是我却认为这也只是无奈之举,如果有一套代码在所有平台都能跑的话而且都拥有绝佳的性能的话,没人吃饱着撑着,造出各种开发语言。
软件开发百花齐放的今天,无论是程序员,还是软件厂商,都希望能够有一个“大一统”来结束这个既繁荣又混乱的局面。前几年,HTML5开发移动APP企图基于各平台的浏览器实现跨平台;Web中的前端开发中的“响应式布局”实现一套代码在 PC、平板、手机上智能化显示最适合的界面;QT开发工具希望用一套C++代码开发出在Windows、Linux、Android、IOS的原生APP;最近,React 正在用JS统治Web、IOS、Android的路上越走越远……
微信小程序要做的,就是开发一套代码,在IOS、Android拥有相同的用户体验,而它基于的是HTML。HTML无疑在各个平台拥有最好的兼容性,哪里有浏览器,哪里就可以解析HTML。
如果让我用一些关键词来概括软件开发的特点的话,在我的答案中一定有一个词就是“虚拟化”。操作系统完成了底层硬件的虚拟化,让上层应用不需要关心底层硬件的操作细节和差异。虽然运行着windows操作系统的计算机数以亿计,它们的CPU、网卡、磁盘等都各不相同,通过Windows系统的Win32 API,程序员和上层应用不必理会底层环境的差异性,程序员运用相同的代码就可以对不同型号的硬件进行操作。同理的还有Java虚拟机。
可以这么说,微信的小程序,就是以微信为平台,通过相同的代码,可以在IOS和Android上拥有相同的操作,比如布局、支付、定位等等,微信虚拟化了布局、支付、定位这一层在Android和IOS上的细节 。在这个意义上,可以说微信是个“操作系统”。当然这样就把操作系统说的太简单,更准确的是微信应该是一个虚拟机。
能预言到“微信小程序”的出现,是不足为奇的,现在许多软件在完成各自职能的同时,往往自身也作为平台出现。
平台是什么?牛顿说,“如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。”。那么这个巨人就是牛顿的平台了。虚拟化带来的结果,就是为上层应用带来更坚实的平台。在平台之上,我们可以忽略平台下面的实现细节。
作为平台出现的软件,可以实现诸多的扩展。极客人的博客是使用wordpress CMS平台搭建的,在wordpress上面,我们可以利用安装插件的方式实现防垃圾评论等等功能;在Chrome浏览器上,我们通过安装插件实现了广告屏蔽;而QQ内置查看word文档的功能,也是通过插件实现的(极客人实习的时候看过QQ的源代码)。
插件是平台之外的扩展,基于平台的插件,忽略了底层细节,同时让平台的功能更加丰富,走得更远。同时,开放的平台,也让平台更加活跃,为自己的生存灌输了青春。
微信小程序在某种意义上也是微信的插件,在极客人尝试了用wordpress、Chrome装插件后,我想,预知“应用号”的出现不会是什么难事。
曾经看过一篇文章,每个软件厂商都希望让自己开发的软件在用户的PC、手机上不被卸载,而其中的关键就是占领用户的桌面和状态栏。然而现在的应用市场上的APP千千万,由于过多的APP会导致手机的速度变慢、可用ROM变小,许多用户都是装完一个APP就马上卸载。
由于微信小程序的即用即删性,符合了用户的“洁癖”心理,在一些不常用的应用上,微信小程序必定大受欢迎。
在微信小程序发布之前,谷歌在2016年谷歌大会上,曾计划推出一种类似的"小程序"—Android Instant APP;通过谷歌Deep link,用户点击一下链接即可以运行应用,目前仅支持比较简单而基础的应用,可以说它介于纯粹的Web应用和应用程序之间,“Instant Apps”将应用下载大小限制为最高4MB,并向下兼容到安卓4.1操作系统。
我们如今手机安装的应用,占用内存动辄百兆起步,许多应用添加了我们根本不需要的功能,应用间的相互串联也是让我们苦不堪言。如今Instant Apps为我们开启了一扇新的大门,我们手机目前也有点击网页跳转应用的功能,与此不同的是,Instant Apps的跳转直接并非转往完整的应用,而是根据用户的需要,跳转至拥有某个特定功能的APP,比如说我们在网页观看视频,需要转往应用观看,然而该视频应用十分卡顿,经常推送一些无用信息,若该视频应用开发了Instant Apps,那么我们会跳转到该视频的Instant Apps界面,该界面仅包含视频播放的相关功能,十分简洁流畅。 这么一来,若许多购物应用和社交应用都开发了Instant Apps,那么我们的用户体验将会有很大提升,手机的负担也不会那么沉重。从开发者的角度讲,这类应用的推广难度降低,甚至不需提交至应用商店,仅需分享应用的相关连接即可,十分省心。用户点击即用,倒也快捷
基本应用场景和微信小程序类似,个人认为的最大优点可能是原生开发性能会优于微信。但是由于微信小程序拥有微信这个大流量的入口,而且已经先发制人地发布了,我想,Instant APP至少在中国地区胎死腹中。
目前微信小程序里里面还没有广告(笔者注:显然到今天2018年这个猜想已经得到验证,小程序广告方兴未艾),但是不久的将来,目测微信很快就会提供财付通的广告SDK方便开发者接入,这么应用转向微信小程序,腾讯的广告收入必定迎来一波大幅度增长。