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

news2024/11/16 13:57:38

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平台化战略会逐步深入下去,让我们一起见证新技术带来的震撼吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

环形链表的检测与返回

环形链表 王赫辰/c语言 - Gitee.com 快慢指针的差距可以为除一以外的数吗?不可以如果差奇数则无法发现偶数环,是偶数无法发现奇数环,本题思路为指针相遇则为环,而以上两种情况会稳定差一,导致指针永不相遇 最终返回…

<蓝桥杯软件赛>零基础备赛20周--第19周--最短路

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…

单片机学习笔记---独立按键控制LED亮灭

直接进入正题! 今天开始我们要学习一个新的模块:独立按键! 先说独立按键的内部结构: 它相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实…

深度学习知识

context阶段和generation阶段的不同 context阶段(又称 Encoder)主要对输入编码,产生 CacheKV(CacheKV 实际上记录的是 Transformer 中 Attention 模块中 Key 和 Value 的值),在计算完 logits 之后会接一个Sampling 采…

CC++内存管理【非常详细,对新手友好】

文章目录 一、程序内存划分1.基础知识2. 堆栈的区别3. 题目练手 二、C语言中动态内存管理方式三、C中动态内存管理方式1. new/delete操作内置类型2. new/delete操作自定义类型 四、operator new和operator delete函数1. 汇编查看编译器底层调用2. 透过源码分析两个全局函数 五、…

GD32移植FreeRTOS+CLI过程记录

背景 之前我只在STM32F0上基于HAL库和CubeMX移植FreeRTOS,但最近发现国产化替代热潮正盛,许多项目都有国产化器件指标,而且国产单片机确实比意法的便宜,所以也买了块兆易创新的GD32F303开发板,试一试它的优劣。虽然GD…

【开源】基于JAVA的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

【系统备份/迁移】解决克隆win10系统分区后,进系统黑屏、有鼠标指针(无需修改注册表)

【解法】简单来说就是,在PE系统中修复引导,修复成功后再进入系统就正常了。 1、问题 笔者通过DiskGenius克隆系统分区来备份自己的win10系统。克隆完成后,进入新系统里,发现是黑屏,移动鼠标时可以看到鼠标指针&#x…

通过铭文赛道的深度链接,XDIN3 与 opBNB 的双向奔赴

​进入到 2024 年以来,随着铭文市场基建设施的不断完善,铭文正在被赋予捕获价值与流动性的能力,并且铭文投资者们也正在趋于理性,这也意味着铭文赛道正在向价值回归的全新方向发展。 XDIN3 是推动铭文资产捕获价值的重要基建设施&…

第7章 面向对象基础(下)

第7章 面向对象基础(下) 学习目标 会区分静态的类变量和非静态的实例变量 会区分静态的类方法和非静态的实例方法 了解类初始化 认识枚举类型 会使用枚举类型 认识包装类 会使用包装类进行处理字符串 会分析包装类的相关面试题 能够声明抽象类 能够说出…

ZigBee学习——浅析协议栈

✨记录学习过程 文章目录 一、初识OSAL1.1 Z-Stack和Zigbee的OSAL是什么关系?1.2 OSAL可以解决Z-stack在不同厂商的芯片上的使用吗? 二、协议栈运行机制2.1 初始化涉及内容2.2 初始化过程 一、初识OSAL OSAL,全称是操作系统抽象层&#xff0…

【驱动系列】C#获取电脑硬件显卡核心代号信息

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《驱动系列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点…

代码随想录算法训练营day4 | 链表(2)

一、LeetCode 24 两两交换链表中的节点 题目链接:24.两两交换链表中的节点https://leetcode.cn/problems/swap-nodes-in-pairs/ 思路:设置快慢指针,暂存节点逐对进行交换。 代码优化前: /*** Definition for singly-linked list…

总结和考试

总结和考试 1. 代码规范1.1 名称1.2 注释1.3 todo1.4 条件嵌套1.5 简单逻辑先处理1.6 循环1.7 变量和值 2.知识补充2.1 pass2.2 is 比较2.3 位运算 3.阶段总结4.考试题 1. 代码规范 程序员写代码是有规范的,不只是实现功能而已。 1.1 名称 在Python开发过程中会创…

EndNote20 添加GBT7714文献格式

GBT 7714格式是中国国家标准《文后参考文献著录规则》的规定,用于指导学术论文、期刊文章等文献的参考文献著录。GBT 7714标准规定了参考文献的格式、内容和著录要求,以确保文献的一致性和标准化。 在EndNote 20中,若需要按照GBT 7714格式在W…

JavaScript 之 作用域变量提升闭包

一、JavaScript 代码的执行 浏览器内核是由两部分组成的,以 webkit 为例 WebCore:负责HTML解析、布局、渲染等等相关的工作JavaScriptCore:解析、执行 JavaScript 代码 另外一个强大的 JavaScript 引擎就是 V8 引擎 二、深入 V8 引擎原理 …

Django介绍

一、介绍 Django是Python语言中的一个Web框架,Python语言中主流的web框架有Django、Tornado、Flask 等多种 优势:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等功能,是一个全能型框架,拥有自己的Admin数据管理后台,第三方工具齐全,性能折中 缺点:…

用ChatGPT写申请文书写进常春藤联盟?

一年前,ChatGPT 的发布引发了教育工作者的恐慌。现在,各大学正值大学申请季,担心学生会利用人工智能工具伪造入学论文。但是,聊天机器人创作的论文足以骗过大学招生顾问吗? ChatGPT简介 ChatGPT,全称聊天生…

C++:引用

目录 概念: 引用的使用格式: 引用特性: 常引用 使用场景: 1、做参数 二级指针时的取别名 一级指针取别名 一般函数取别名 2、做返回值 函数返回值的原理: 引用的返回值使用: 引用和指针的对比&…

基于 SpringBoot+Vue 的免税商品商城系统的研究与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…