打开iOS4.3上的iPad Safari,再跟iOS6.1上的对比,也许你会觉得4.3没有标签栏,不够好用,但那个多窗口的设计却又非常酷。
iPhone上的Safari 4.3也和iPad差不多。这个多窗口的设计,影响了那个年代的第三方浏览器,UC啊,QQ啊都这么学。可是后来呢,iPad上的诸多第三方浏览器都是有标签栏的,Safari估计是被骂多了,在iOS5开始也这么干。
可是其实,iOS4的Safari代码里就已经有关于Tab的代码,可见Safari的重构优化是伴随着发布的,没做完的功能也一起发布,只是不公开。类似的,现在iOS6的代码里,有这么一个API:
-[WebView _setWebGLEnabled:(BOOL)arg1]
大家都知道Safari还没公开支持WebGL,这可否说明iOS7可能就要支持了呢?
iOS的Safari很明显是和Mac的Safari同源的,可是两者在共用代码的设计上,应该是经过了一个反复的设计阶段。早期的iOS Safari效率很低,特别是iPhone上的,打开一个网易首页都要load好半天。之前的研究可以确定iOS为了共用Mac的代码做了不少适配转接的工作,但这也必然带来性能的损耗。随着iOS的版本升级,这些适配带来的损耗在降低,可是Safari功能的升级又会引入更多代码,中和掉了。
看样子,iOS Safari是不会独立发展来获取性能的,要解决也很简单,等待硬件升级就好了……
iOS Safari没有用供普通开发者所使用的UIWebView。iOS的WebKit.framework还没成熟到像Mac那样给开发者使用,就用这个UIWebView作为门面了,它封装得不错,可是功能也实在太有限。市场上那些用UIWebView的第三方浏览器,或多或少地会用与UIWebView相关的non-public API,当然也会用到WebKit.framework的。虽然他们能以不违反apple的规则的方式来使用私有API,但apple肯定是能查出来的,睁只眼闭只眼罢了,难道还能扼杀掉所有第三方浏览器吗。
iOS Safari是直接使用UIWebBrowserView。 UIWebBrowserView和WebView其实有不少函数和设置项是为iOS Safari服务的,UIWebView默认不用。这必然的,还是尽量共用代码嘛,少要些人来维护更多代码。这相当于也是给第三方浏览器一些生存空间,利用Objective-C运行时的特性,自己去挖掘那些Safari用了但UIWebView没用的东西。例如保存form的账号密码,缓存网页,截图什么的。
当然了,Safari单独提供的额外功能,UIWebView是做不到的,例如阅读器,还有键盘上的页内查找。第三方浏览器只好用JavaScript或者后台服务器来做。效果参差不齐,就算比不上Safari也得做嘛,这风不跟就会落后了。
总之,Mac上的Safari版本号基本上是和iphone OS版本号对得上的,基本可以认为iOS Safari、UIWebView和Mac Safari是同步更新的,对用户而言是个好事。4核的iPad出来后,也许再没人说Safari慢了。