《WebKit 技术内幕》学习之十五(6):Web前端的未来

6 Chromium OS和Chrome的Web应用

6.1 基本原理

        HTML5技术已经不仅仅用来编写网页了,也可以用来实现Web应用。传统的操作系统支持本地应用,那么是否可以有专门的操作系统来支持Web应用呢?当然,现在已经有众多基于Web的操作系统,但它们只支持基于HTML5的Web应用,而不支持本地应用,这的确是一项技术革命。Chromium OS就是支持Web应用的一个Web操作系统。

        Chromium OS也是基于Chromium项目开发出来的,它的核心思想是使用渲染引擎和Chromium浏览器的能力,同时加上对Web应用其他方面的支持,并使用Linux内核和一些第三方库构建成一个操作系统。而对于其他众多的操作系统功能,如果不需要,它根本不会被包含进来,所以它是一个很轻量级的操作系统,结构上非常简单和清晰明了,图15-7中的架构图就是来源于Chromium的官方网站,具体参见这个网址:http://www.chromium.org/chromium-os/chromiumos-design-docs/software-architecture。未来可能有些变化,如图形方面使用新的Aura架构等,但是基本的架构应该是比较稳定的。

                                                图15-7 Chromium OS系统架构图

        图15-7中最下面的部分当然是硬件,在它之上是为该系统定义的Firmware。Chromium OS是基于Linux内核和Linux上一些系统库开发而来的,同时使用X图形架构并定制了自己的窗口管理系统(Window Manager)。这些同传统的Linux区别不是很大,主要区别是Chromium OS做了比较多的定制和裁剪。对于系统层面的技术,这里不做过多的阐述。

        其余部分就是Chromium OS的核心功能,主要基于Chromium项目,它能支持Web应用、网页和Chromium的扩展实例。Chromium的扩展机制在第10章中做过介绍,这里主要介绍Web应用的支持。

        刚开始,Chromium只是支持扩展(Extension),在Google的Chrome Web Store中也只是包括了各种开发者开发的扩展,但是扩展只是浏览器的补充和功能的延伸。在目前的Chrome Web Store中,已经有应用和扩展等不同的类别。不过应用是基于扩展的结构发展起来的,那么到底对于应用方面有哪些不同之处呢?

        Web应用在Chromium中称为Chrome Apps,它的目标是提供像本地应用一样的能力,但是可以像网页一样安全,也就是使用各种安全技术来加强安全性。Chrome Apps看起来和用起来,感觉更像本地应用。每一个应用使用单独的窗口,像本地应用一样被打开或者被关闭。

        外观上看起来像本地应用只是一方面,更重要的是系统能够提供什么样能力给Chrome Apps。在Chromium中,主要是通过“chrome.*”编程接口来将本地系统的能力提供给Web开发者的。

  • 首先来看称为Manifest.json的清单文件,该文件类似于Android系统应用程序所使用的AndroidManfiest.xml,它定义了应用的各种设置,如图标、名称、入口文件、语言、权限等信息,也就是一个本地应用启动时候的设置加上一些Web应用的特殊设置,一个简单的Manifest.json非常类似于示例代码15-1中描述的那样,只是对于某些属性的定义不一致,但是例如名字、图标都是相同的含义。其中很大的不同点在于,Chromium的清单文件引入了“Background Page”概念,这表示Web应用可以从一个JavaScript文件启动,而不是HTML网页。这个有点类似于本地应用是从“main”函数开始执行的。Chromium这样做的好处就是能够引入应用生命周期、安装卸载等概念。
  • 其次是离线技术。Web应用使用起来想要像一个本地应用,那就不能只在网络连接的时候才能够使用,Chrome Apps默认Web应用可以离线使用。
  • 最后是Chrome Apps的应用程序生命周期(App Life Cycle),这同现在移动系统上的概念是一致的。在Chromium中,包括了“onLaunch”、“onSuspend”、“onSuspendCanceled”等,还包括安装和卸载相关的如“onInstalled”、“onUpdateAvailable”等,这也是Chromium为应用特别引入的编程接口。

        接下来是安全机制。在第12章介绍了安全机制,包括CSP和CORS等安全技术,在Manifest.json中,也同样定义了这些信息,因为这些应用不一定从网络上传输过来,所以这些设置不能定义在HTTP消息头中,而是定义在Manifest.json中,所以同样需要将安全机制引入了Chrome Apps。

        目前Chromium OS只支持传统的桌面硬件,但是,它也逐步加入触控等移动领域的技术,发展也很迅速,至于未来会发展成什么样,笔者将会和大家一起关注。

6.2 其他Web操作系统

        下面选取目前一些主流的Web操作系统来做一些简单的介绍和比较,它们分别是WebOS、Tizen、Chromium OS及Firefox OS。

        上面介绍的很多Web操作系统都是基于WebKit(或者Blink)渲染引擎开发的,如WebOS、Tizen和Chromium OS。只有Firefox OS是基于自身的Gecko引擎开发的。接下来的内容主要是从架构或者模块方面进行一些分析。

        WebOS最早来源于Palm,后来到惠普,到现在被LG收购,经历非常复杂。图15-8是来自于WebOS官方网站上给出的架构图,图中隐去了很多比较细节的东西,其中Core OS主要是基于Linux内核和WebKit渲染引擎打造的系统,二者提供,Web应用运行的系统环境。

                                图15-8 WebOS官方架构图

        在这之上的左侧是用户界面的管理,如Web应用切换、窗口等,这同传统操作系统非常类似。它的右侧是提供的各种服务,这些服务的接口是JavaScript接口。每个应用都可以通过JavaScript和系统的服务框架来调用这些服务,这看起来非常像Linux系统的Daemon服务进程和它的使用进程。在服务之上的是Mojo框架,现在已经变为Enyo和Enyo2,它们主要是提供应用开发所需要的应用框架和基础库。在最上面的当然是Web应用了,有了上面提到的这些库和界面管理器,Web应用可以像本地应用一样在WebOS中运行了。

        接下来是Tizen系统。Tizen是由英特尔和三星联合开源社区打造的新一代Web操作系统,它同样也是基于Linux内核和WebKit(在某个版本之后基于WebKit2)引擎开发的。虽然支持Web应用,但是Tizen目前依然支持本地应用,也就是使用C/C++语言和EFL图形库开发的应用。图15-9是来自Tizen官方网站的架构图,看起来比较琐碎。但是,大体上还是包含几个部分,最下面是Linux内核,内核之上是各种基础库和框架,它们当然是使用本地语言开发的,该架构中还包含了窗口管理系统,也就是图中的“Core”部分。

                                               图15-9 Tizen系统官方架构图

        图中的“Core”部分之上分成两块,一块是支持Web应用的框架,另外一块是支持本地应用的框架。右侧的本地框架同很多本地系统差别不大,而左侧的框架主要是为支持Web应用而存在的,包括了各种W3C/HTML5定义的功能,同时也包括了各种设备接口,如蓝牙等,这些都会以JavaScript接口的方式被Web应用所使用。

        Firefox OS是在Firefox浏览器的基础上发展起来的,是基于Linux内核和Gecko渲染引擎开发出来的。Firefox OS的分层结构如图15-10所示,主要思想来自于Firefox官方网站,这里笔者进行了一些简化以方便理解。

                                        图15-10 Firefox OS的层次架构图

        图中可以看出从模块结构上Firefox OS可以分成三个层,最下层的基础层称为Gonk层,它包括了Linux内核和众多的基础库,这个基本上所有操作系统都是一样的。在Gonk层上面的是Gecko层,它主要是Gecko渲染引擎和Web应用所需要的众多JavaScript接口的具体实现。在Gecko层上面的是Gaia层,它包含了各种帮助生成Web应用的工具,以及基于系统的应用(如通信录、电话应用等)和经过认证的其他应用。结合上面介绍的各种Web操作系统来看,这些系统大体上的架构比较类似,只是在细节或者某些模块的组织上面有些不同点。就笔者看来,目前这些Web操作系统仍然在发展的初期阶段,很多能力上不足以与传统的操作系统媲美,但是这并不妨碍它们的优势,比如开发者使用HTML5技术来开发应用程序。随着HTML5技术的不断发展,HTML5在能力和性能上的差距不断缩减,HTML5所带来的巨大优势会逐步成为Web操作系统的助推力。笔者有理由相信,HTML5技术和Web平台化战略会逐步深入下去,让我们一起见证新技术带来的震撼吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跟无神学AI之Prompt

在大模型时代会写prompt变得很重要。 Prompt翻译为中文为提示词,在大模型的特定领域指的是大模型使用者给大模型提交的一种有一定格式的交互命令,让我们看看科大讯飞的大模型给出的答案—— Prompt是一种向人工智能模型提供的输入文本或指令&#xff0…

uv胶UV大灯修复液修复汽车车灯大灯尾灯?

使用UV胶进行汽车大灯修复是一种常见的方法,特别是用于修复裂纹、划痕或氧化的透明塑料表面。以下是使用UV胶修复汽车大灯的一般步骤: 1.准备工作: 确保汽车大灯表面是干净的,没有灰尘、油脂或其他污垢。可以使用清洁剂和软布进行…

Microsoft Remote Desktop for Mac(远程桌面连接)激活版

Microsoft Remote Desktop是一款由微软开发的远程桌面连接工具,它允许用户从另一台计算机或移动设备远程连接到Windows桌面或服务器。 以下是该软件的一些主要特点和功能: 跨平台支持:Microsoft Remote Desktop支持Windows、macOS、iOS和Andr…

leetcode:二叉树的中序遍历(外加先序,后序遍历)

题外:另外三种遍历可以看这: 层序遍历: Leetcode:二分搜索树层次遍历-CSDN博客 先序遍历: 二叉树的先序,中序,后序遍历-CSDN博客 后序遍历: 二叉树的先序,中序,后序…

网络安全全栈培训笔记(58-服务攻防-应用协议设备KibanaZabbix远控向日葵VNCTV)

第58天 服务攻防-应用协议&设备Kibana&Zabbix&远控向日葵&VNC&TV 知识点: 1、远程控制第三方应用安全 2、三方应用-向日葵&VNC&TV 3、设备平台-Zabbix&Kibanai漏洞 章节内容: 常见版务应用的安全测试: 1…

【Web】CTFSHOW SQL注入刷题记录(上)

目录 无过滤注入 web171 web172 web173 web174 web175 时间盲注 写马 过滤注入 web176 web177 web178 web179 web180 web181-182 web183 web184 web185-186 web187 web188 web189 web190 布尔盲注 web191 web192 web193 web194 堆叠注入 web195 …

[C++]使用纯opencv部署yolov8旋转框目标检测

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 YOLOv8是一种先进的对象检测算法,它通过单个神经网络实现了快速的物体检测。其中,旋转框检测是YOLOv8的一项重要特性,它可以有效地检测出不同方向和角度的物体。…

格子表单GRID-FORM | 嵌套子表单与自定义脚本交互

格子表单/GRID-FORM已在Github 开源,如能帮到您麻烦给个星🤝 GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互 新版本功能 🎉 不觉间,GRID-FORM 已经开源一年(2023年1月29日首次提交…

【JaveWeb教程】(28)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(1)

目录 SpringBootWeb案例011. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建 1.2 开发规范 2. 部门管理 SpringBootWeb案例01 前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库…

QT+VS实现Kmeans聚类算法

1、Kmeans的定义 聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为无监督学习。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使…

Java 基础知识-IO流

大家好我是苏麟 , 今天聊聊IO流 . 资料来源黑马程序员 . IO概述 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬…

ajax点击搜索返回所需数据

html 中body设置&#xff08;css设置跟进自身需求&#xff09; <p idsearch_head>学生信息查询表</p> <div id"div_1"> <div class"search_div"> <div class"search_div_item"> …

day22 事件委托

目录 事件委托 事件委托 事件委托是利用事件流的特征解决一些开发需求的知识技巧 优点&#xff1a;减少注册次数&#xff0c;提高程序性能原理&#xff1a;事件委托其实是利用事件冒泡的特点 给父元素注册事件&#xff0c;当触发子元素时&#xff0c;会冒泡到父元素上&#x…

automa插件使用的一些实战经验3

1 子流程的变量怎么传回父流程 主流程向子流程传参很容易 在子流程可以看到&#xff0c;父流程定义的表格&#xff0c;在子流程中是看不到的&#xff0c;那么子流程定义的变量如何传回父流程呢&#xff1f;另外在子流程再添加执行工作流&#xff0c;是无法选择父流程本身&…

C++:vector容器(memcpy浅拷贝问题、迭代器失效问题)

文章目录 一. vector 的介绍二. vector 的使用1. string 和 vector<char> 的区别2. 为什么 vector 没有 find() 接口 三. vector 的模拟实现1. vector 的基本框架2. memcpy 和 memmove 的浅拷贝问题3. vector 迭代器失效问题4. 模拟代码 一. vector 的介绍 vector 的文档…

二次元动漫卡通手机APP应用下载页HTML源码

HTML源码&#xff0c;记事本修改里面的内容即可&#xff0c;本地双击index.html即可运行 蓝奏云&#xff1a;https://wfr.lanzout.com/itZRg1mf3b9c

华为HCIP Datacom H12-831 卷18

判断题 1、对于同一个MAC地址,手工配置的MAC表项优先级高于动态的表项,某二层报文的源MAC地址已经绑定在了交换机的GEO/0/1接口,当交换机从GEO/0/2收到该报文时,会丢弃该报文 A 对 B 错 正确答案 A 解析:为了提高接口安全性,网络管理员可手工在MAC地址表中加入特定M…

Mac电脑如何安装幻兽帕鲁游戏,Mac虚拟机CrossOver如何安装幻兽帕鲁

《幻兽帕鲁》能在哪些平台玩&#xff1f; | 《幻兽帕鲁》是一款动作冒险生存游戏&#xff0c;自1月中旬发布以来&#xff0c;在Steam榜单上迅速攀升。目前该游戏可在Xbox Series X/S、Xbox One和PC上运行&#xff0c;并可通过Xbox Game Pass在Xbox和PC平台上使用。虽然游戏还未…

taro3 + vue3 + ts 跨平台体验记录

taro3 vue3 ts 跨平台体验记录&#xff0c;根据进度不定期更新。 目标平台包含&#xff1a;H5、微信小程序、APP。开发环境&#xff1a;windows 安装cli【官方安装文档】 npm install -g tarojs/cli常用命令 // 查看taro版本 npm info tarojs/cli创建demo项目 taro init…

【Unity3D日常开发】Unity3D中设置Text行首不出现标点符号

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中会遇到Text的文本内容行首出现标点符号的情况&#xf…