看了bang的博客对微信小程序的技术方案有了更深入的理解:
微信小程序必须要符合两个刚需:管控 & 体验
管控:
对于一个可以发布“小应用”的平台,微信必须对其下发布的“小应用”用着绝对的管控能力。
体验:
作为一个小程序需要让其体验接近原声,普通H5的体验不能达到这一需求。括页面切换,启动速度,页面的整体体验,相对于原生都是无法相比的。
针对于以上两个刚需,微信小程序是这样做的:
对于管控:
(1)DLS:想要对开发者进行管控,最好的方法就是自己设计一套框架,让开发者按照自己框架的规范进行编码,利用这套DLS(针对某一特定的领域设计的计算机语言)可以更好的针对不同的需求去优化。
(2)JS环境:写过小程序的开发者都了解,小程序中是无法调用任何DOM API的,为什么呢?是因为小程序实现了js的运行环境与浏览器分离,运行在单独的js引擎上,脱离了浏览器,一切DOM操作在你的JS中是无法操作的,而小程序的核心JS是运行在浏览器中的,这样做的好处和坏处是什么呢?
好处:
(1)避免开发者进行DOM操作,因为开发者可能会通过不同的方式进行上线后,绕过检查,注入js文件,自由操作DOM接口去修改的界面和内容,变成和审核时候不一样的小程序来达到自己的目的,这中现象和之前iOS的热更新原理是一样的,在APP上线后,通过js脚本,去修改界面的样式,内容,或者调用官方私有API来做一些非法的操作,这种现象对于苹果,微信这种超级平台是很不敬的,同时对其安全也是有很大威胁的,它不会允许这种不可控的事件在自己的眼皮底下发生。但是热更新对于原生APP来说还是一个非常重要的需求。
(2)js和页面渲染并行执行,不会出现由于js执行而卡住页面的现象,提高渲染的性能。坏处:
(1)做过iOS和JS交互的同学应该清楚大致流程,在iOS中执行JS需要讲JS代码转化为字符串,所以,小程序中的js要传输给原声webview使用,需要进行转换为字符串来执行。
(2)iOS上原生的WKWebView的JS引擎比javaScriptCore框架做了很多的优化(使用和Safari相同的JS引擎),小程序上的js则无法享受这一优点。
对于体验:
(1)因为小程序是寄生在原生下的应用,通过native接口,我们可以用js调用一些原生的组件和方法,做出一些H5无法完成的任务和体验。
(2)退出小程序后,小程序后,小程序可以在后台运行5分钟,用户再次打开时,不需要重洗渲染小程序。
(3)同时得益于在原生环境下,小程序可以预加载多个WKWebView,可以省去WKWebView加载时间,提高用户体验。
这之间的取舍就是对于业务和技术之间的取舍。在对用户体验影响不大的情况下,对于技术上的取舍在业务上至关重要。
以上是通过bang的博客以及自己的理解记下的。
以下是自己最于最近的现象的一些见解唠叨:
(1)微信小程序平台的管理机制:小程序的管控机制其实很大程度上是效仿苹果对于旗下应用的管控机制。苹果对自家的应用或者语言的监控可谓是家长对于孩子般的照顾了,当然这和其自身利益和自身价值是分不开的,对于前阶段苹果对于混合开发的动作(当然这和安全隐患有着关系,如JSPatch调用私有API),大家可以搜索一下2016年之前和2016年之后Object-C和Swift的语言排行,相信可以看到一下原因。所以对旗下产品的管控对于其自身利益又着很大的作用。
(2)支付宝小程序和微信小程序:支付宝小程序刚推出时,我看了一下它的文档,确实和小程序很像,抄袭理念也是自然的了。这个我不考虑,只是写一些对与两个超级平台的不同看法(纯属个人见解,欢迎一起分享讨论),两个小程序确实存在着竞争,但是我认为(不考虑两个巨头对于市场的战略竞争),两个不同的平台都拥有着自己不同优势产品细分领域下的深层的挖掘,比如说,在微信小程序上,我们可以对其社交进行不同的细分,这种场景对于支付宝来说并不合适的,但是在支付宝小程序中,金融类领域相对于微信来说是其优势,在支付宝中对其进行深层次的挖掘也会带来不一样的效益。其实关键在于两家超级平台对于旗下优势产品的大数据层次的开放程度,这些数据对寄生或者共存在其生态下的商户来说是可遇不可求的。这些数据和资源足可以再次创造多个的美团和饿了么了,对于小公司的吸引力是很大的。所以个人认为支付宝和小程序胜出关键在于对数据的开发和不同时间节点的营销了,不同时间节点的营销同样是很重要的,这个就是天时了。一个产品的成功,不仅仅靠的技术,理念,甚至体验,因为这些都是可以改变的,但是天时足可以影响一个产品的成败。天时,地利,人和才是其成功的关键。关于两个超级平台的发展,我们只能静静地观察了,因为对于吃瓜群众的我而言,现在只能说说理解,发发牢骚(其实很多人都是了),但是我感觉这对个人的成长也是有很大的好处的。