网站首页 > 技术文章 正文
文/龙翔
历史的车轮
Web app向Native app发起挑战已经有好些年了。以各大公司志向宏大的操作系统为例就有:名噪一时现在栖身于LGTV的WebOS,Google力推在教育领域还算混的不错的ChromeOS,Samsung和Intel主导但是一直雷声大雨点小的Tizen, Mozilla面向低端设备的FirefoxOS。还有各种开发、打包web/hybrid应用的产品:Cordova, Crosswalk,nw.js,Electron。它们也许在各自领域有所成功,但整体的现状和处境很难说web app对native app的世界造成了足够威胁。
但Web app也在不断反思和演进,近来一系列技术革新与发展让web app成为操作系统头等公民的目标变得不同以往的清晰。让我们看看“扬长避短”之后的web app是不是真的可以开始跟native app掰掰手腕了。
“扬长”
Web app之长首先源自web。Web不是于某家藩篱之内的封闭花园,它是一个任意提供了标准支持的终端都可以平等访问的野蛮生长的开放大草原。Web协议栈让全世界的网页成为即时更新并通过URL相互联系的网络。回顾W3C Packaged App(Widget)标准和SysApps(System Application Working Group)的衰落很大程度上也在于放弃了web的这些核心竞争力。
Web app之长也源自HTML,CSS,JavaScript。它们虽然招到很多诟病,但它们也是最广泛使用的开发工具。而新的ES6,Web Components标准也在让它们变得具有更强的开发、表达能力。当然HTML的语义话表达也是搜索的基石之一,这让web app易于被索引和发现。
“避短”
Web app之短首先在于能力的缺失。虽然有Cordova之类工具架起和native API之间桥梁,但打包之后web app的“长”呢?所以web标准化组织一方面在努力提供各种硬件访问的接口。另一方面提出了Service Worker来解决web app本身存在的无法通过简单增加API来处理的关键问题:
其一,web app缺少在后台运行的能力,Web Worker可以在后台运行,但是它依赖于页面,不能在页面不存在的时候运行;
其二,通过URL访问的web 页面是彼此孤立的,虽然可以通过Web Messaging来相互通信,但是这是一种弱联系,并需要消息传递之间的页面有关联。
Service Worker通过一个新的web app编程模型和一套API统一解决了这两个问题。简单的说service worker就是一个生命周期短暂的、事件驱动的后台线程,它处理来自系统和被其控制的页面的事件。目前可以通过Service Worker实现的功能包括:替代坑坑洼洼的Application Cache的可编程离线缓存,Push Notification(消息推送),Background Sync(后台同步)。Service Worker能成为诸多需要跨越页面处理能力的入口。比如如果你怀念Web Intents的话,Service Worker也许也能成为它复活的平台:通过Service Worker注册某个intent事件,在事件到来时worker被启动,针对不同的intent worker可以选择打开不同的页面或重新聚焦某个已经打开的页面。
辅助以W3C Manifest标准,web app有了理论上足以超脱浏览器成为系统一部分的能力。
Web app之短也在性能。当然性能的问题不在于比较和native app跑分一较高下,而在于用户体验。在JavaScript方面各个浏览器厂商一直在挖掘更高的性能,而近日多个巨头同时参与的Web Assembly的提出更让业界更是充满期望。请想象一下,浏览器直接执行的游戏引擎代码是优化过的二进制中间表达形式(IR),甚至是可能是缓存下来的后端转换过的机器码。另外在渲染引擎方面,60FPS的性能也一直是近一年来Blink的主要目标,相信Edge、WebKit等也不会被拉在后面。
渐进式web app
“扬长避短”之后的web app应该以一种怎样的形式进入系统并成为系统一员呢?Alex Russell最近就提出了一种渐进式web app的理念,而且这一理念已经可以在Android上看到萌芽。
在Android Chrome上通过搜索或者链接发现了并使用了某个页面。当这个页面或者某个域范围内的页面在一定时间内被多次访问后,浏览器会认为这些网页是可以被升级成app的,并弹出对话框让用户选择是否安装这个web app到系统。这个web app可以享有和native app类似的权利,比如主界面启动,独立的应用选择栏。目前在Chrome上指定了只有使用了Service Worker 和 Manifest 的网页能够升级成web app被安装,用来保证app的质量。
这种渐进式web app的理念在我看来可以用人和人的交往来类比,一个人从陌生,到熟悉,再到相信。展开想象,是不是web app的权限管理也可以渐进呢? 安全、隐私级别高的API访问控制会随着你对这个app的相信程度来适配。
总结
各种web操作系统和hybrid打包工具已经向native app主导的世界发起了挑战,随着web技术的进一步成熟,open web也逐渐能通过渐进的方式像native app一样成为系统的一部分。我期望着某一天自由、平等、开放的web能成为开发者的首选平台。
作者:龙翔,现为Intel开源软件中心资深软件开发工程师,从事多年web平台开发,也是Chromium开源项目的Committer。
注:本文为作者独立观点,不代表
立场。
- 上一篇: 电脑总提示内存不足,我有妙招
- 下一篇: Electron简介
猜你喜欢
- 2025-01-04 一次“败笔”之后,微信会否遭遇QQ的困境?
- 2025-01-04 鸿蒙ArkUI-X已更新适配API13啦
- 2025-01-04 微软详解.Net Native:Win10通用应用性能的保障
- 2025-01-04 Hibernate 和 JPA
- 2025-01-04 开发不同类型的App需要用到哪些技术?
- 2025-01-04 迅雷极速版v1.0.12 下载:批量下载磁力链接
- 2025-01-04 DevExpress v16.1新功能介绍
- 2025-01-04 Android native开发环境搭建
- 2025-01-04 基于C++音视频高手课-WebRTC远程桌面后台服务实战
- 2025-01-04 Electron简介
- 05-16在实际操作过程中如何避免出现SQL注入漏洞
- 05-16MySQL中 in数量限制
- 05-16一文讲懂SQL筛选子句HAVING子句
- 05-16性能调优实战:Spring Boot 多线程处理SQL IN语句大量值的优化方案
- 05-16sqlserver数据库中的模糊查询like和通配符的使用
- 05-16SQL必备 和 表关联
- 05-16SQL Server优化50法
- 05-16他们一直都在!最新强军大片来了
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)