浏览器加载 XML 网页时,能由网页中的 Script 内容自行作运算产生动态网页的效果,来减少服务器的
速度的限制
在非 PC 平台上,处理器的效能不若 PC 平台上强大。因此,微型浏览器的效能必须要被提升。就这方面来说,我们设计两个能够提升整体效能的方法:
● 以C语言实作核心:
Rock Browser 是以 UML 的观点设计,因此在架构上是以对象导向为概念,但是在实作之初,考虑到对象导向语言在实作继承、多形和封装时,额外的机制会造成程序代码变大变慢,且在移植平台的语言支持上,C 语言是较常被支持的。因此决定以 C 语言来实作对象导向观念所设计的项目。这样不但可以制作快速而小的程序,同时也具备了较高的移植性。
● 数组堆栈:
在微型浏览器中,数组堆栈是一个经常被使用的组件,因此这部分的效能会影响整个微型浏
览器的效能。所谓的数组堆栈是指先配置一块内存,用来存放每次推入(push)和取出(pop)的数据,可是这样有个先天的缺点就是必须是固定长度的堆栈,若是超过堆栈的长度,程序就很可能出问题。所以我们使用 realloc 的方式来改善这个缺点。底下的程序代码是我们实作的原理,我们将每个堆栈的数据当成只有四个字节:
我们在开始处先判断堆栈的指针是否为真,若为空的,先配置一块预设大小的内存,下次再有数据需要推入时,我们会去检查他的大小,若是配置的内存超过他所能够推入的数据,那我们就利用 realloc 重新配置一块大小为两倍内存空间在同一个指针位置。观念很简
单,主要的用意是要达成利用数组的方式实作堆栈,如此存取快速,又可以克服数组只能用在固定大小的堆栈,而取出数据时只需要将内存空间写成默认值,不需要将内存释放。我们测试效能之后,发现和一般利用动态配置内存串成堆栈的方式相比,存取 1000000 比数据快了将近有 40 倍之多。因篇幅有限,整套API实作程序代码的,也就不再详述。
可移植性
以可移植性而言,在微型浏览器的设计中,我们将微型浏览器中与平台相关的部分切割出来成为单一模块。当微型浏览器需要被移植到各种不同平台时,只要修改该模块即能移植至其它异质平台上来达到微型浏览器的高移植性,减少软件移植的时间。这些模块包括:
● 使用者接口方面:
微型浏览器所使用到的使用者界面会依据不同的窗口操作系统而被更动。如按钮键 (Button) 的产生等窗口组件的绘制,或是窗口组件的事件产生,都会随着不同的窗口操作系统而不同。因此在微型浏览器的设计中,为了高移植性需要将这部分的处理单一模块化。
● 操作系统相关方面:
如 Thread、Socket、File 等跟系统相关的运作,通常这些操作会随着平台的操作系统不同而改变其使用方式或是行为的动作,因此这部分也需要单一模块化。
● 工具接口方面:
像是 List、String 等常使用的公用工具,将它单一模块化除了为了移植性的考虑,也可独立出来供其它应用程序使用。
微型浏览器的架构
以下将为读者开始讲述我们独力开发的微型浏览器 Rock Browser。下图为微型浏览器的架构图:
图1:Rock Browser 架构图
我们将微型浏览器切割成五大模块,分别叙述如下:
● 可移植性 (Portable Interface) 模块
将跟系统平台有关的程序,切割成 Portable Interface 模块,以便微型浏览器能在最短时间能移植至异质平台上。因此这部分的模块程序多为与系统平台相关操作,包含了:GUI Interface、Thread Interface、Network Interface、Storage Interface、Utility Interface 等。
● 使用者接口 (Browser main and User Interface) 模块
此模块主要负责与使用者间的互动讯息以及使用者接口的呈现与管理。这部分包含了 Skin Manager (管理浏览器的使用者接口的样式) 、Bookmark Manager (管理使用者所设定的 Bookmark) 、Browser User Interface (微型浏览器的使用者接口)、Browser Main (使用者的事件处理)等。
● 核心(Browser Engine) 模块
此为微型浏览器的核心部分,主要用来处理与管理微型浏览器所接收到的 XML 网页。包含
有:XML Tag 处理、CSS 的Style 处理、Script 的处理、网页图形处理,Layout Manager、Storage Manager、Parser、History Manager 等。
● 网络 (Network Protocol) 模块
此为网络实际运作模块。如 HTTP,WAP 1.x 等通讯协议。
微型浏览器的运作方法
在介绍完 Rock Browser 的架构后,接下来,我们将带领读者进入 Rock Browser 的运作流程。我们将从一个 XML 的网页的加载开始,一步一步带领读者进入微型浏览器的运作流程中,并于各个流程中探讨微型浏览器的设计秘辛。从微型浏览器的开启、网页的抓取、进入 Parser 的处理、Layout 的处理、网页的呈现等程序来介绍微型浏览器的设计。
开启微型浏览器
乍看这个标题,读者或许会问,微型浏览器的开启会有什么的特别的技巧。事实上,在非 PC 平台上,嵌入式系统处理器效能不似PC平台上那样快速,往往为了加载一个应用程序
而消耗一大段系统时间,有时甚至会让使用者误以为系统当机。在人机接口的设计上,为了解决这个问题,我们将微型浏览器的初始化步骤细分成几个部分:
1.使用者接口初始化:
为了让使用者能够有系统正在执行的感觉,我们先再画面上呈现微型浏览器的外框,包括一些基本的视觉对象,如标题列、工具列状态列等对象。如下图所示:
2.载入首页:
接下来,微型浏览器会处理一些跟使用者接口较无关系的动作。根据使用者所设定的首页或经由别的程序传入值,决定要加载的首页,并执行抓取、编排和显示网页。这部分流程包含抓取网页内容等动作,还有一些必要的对象如快取机制(cache)和历史纪录(history)功能等。其结果如下面画面所示:
3.使用者设定:
一般而言,供使用者设定微型浏览器选项的接口画面,并不需要在微型浏览器被加载时,就被先计算且呈现在画面上。一般都是等到使用者点选某个按钮或功能才会处理画面的呈现。因此,我们将这部分的画面加载处理程序,移至使用者去触发时,才处理,以便增加为型处理器加载的速度。如下两图所示:
对于这样的加载流程,可以减少使用者等待系统反应的等待时间,而使得整个微型浏览器的加载流程会更为流畅,产生加速的效果。
抓取网页
浏览器最基本的功能,就是能够将因特网上的众多资源,例如网页上的内容与信息或是在线服务等,呈现给使用者并让使用者得以使用存在于因特网上的各项服务。因此透过网络传输数据对浏览器来说,是相当重要且必备的一项能力。为了让微型浏览器能够存取因特网上的各项资源并适应各种不同的网络环境,我们开发出 WAP 2.0 Protocol Stack 提供 WP-HTTP/WP-TCP 与 WSP/WTP/WDP 这两大网络通讯协议架构,让浏览器可以因应不同网络环境的需要,使用适当的网络通讯协议来抓取因特网上的数据。
图6:微型浏览器利用 WP-HTTP/WP-TCP/IP 等通讯协议去抓取数据
图7:微型浏览器利用WSP/WTP/WDP等通讯协议去抓取数据
浏览器除了要能透过网络去抓取数据外,亦需提供数据快取(Cache)功能,将抓回的网页数据选择性的储存在手持装置上,并提供快取管理机制,将已过时(expired)的网页数据从快取储存区中移除,避免让使用者浏览到无效的信息。然而快取在手持装置上的数据也应有总容量的限制,让使用者可以根据手持装置的配备能力,来决定可储存多少的快取数据。
写网页用什么语言 此外目前因特网上常用的 Cookie 机制,也是微型浏览器应支持的一项功能。Cookie 是使用者透过浏览器在网上浏览时,网络服务器「要求」浏览器所记录下来的数据,可以用来追踪使用者或对重返的使用者进行确认,而网络服务器也会告知浏览器,有哪些人可以看到这个 Cookie,以及 Cookie 资料有效的时间长度。Cookie 的内容可储存使用者上网的许多个人信息,虽然可以让使用者浏览时更为方便,但也由于 Cookie 能够追踪使用者在网络上的许多动作,因此也有其安全上的顾虑。因此浏览器在提供 Cookie 功能的同时,也需提供一定程度的安全机制来保护使用者的个人信息不会被任意侵犯。
待续
截至目前为止,我们已经就微型浏览器的加载以及网页的抓取流程作简单的介绍,由于篇幅有限,我们将在下一篇中继续为读者剖析介绍微型浏览器的核心技术。
深入微型浏览器 (Micro Browser) 三之二
信息工业策进会 嵌入式系统实验室
WAP 技术小组
WAP 技术小组
前言
在上一篇的文章中,我们介绍了目前各家微型浏览器的现况,以及在嵌入式系统上开发微型浏览器所需要的考虑与技术上的挑战等等。并且简介了我们自行开发的微型浏览器的使用者接口以及初始化的运作流程。紧接着在本篇文章中,我们将以节录部分程序代码配合概念解说的方式,带领读者进一步的深入了解微型浏览器的核心技术。
深入微型浏览器核心
微型浏览器的最重要核心技术,便是将网页设计者撰写的 HTML、XML、WML…等标示语言(Markup Language),经过处理还原成具有多媒体呈现效果的网页。这个过程主要可以区分成两步骤,先将网页的原始码经由 Parser 处理成具有意义的数据结构,再由 Layout Manager 来进行网页页面的编排,将标示语言还原成原来的面貌。因此,本篇文章的前半部将先从 Parser 处理及数据结构的概念谈起,介绍标示语言的处理方法及需要特别注意的地方;后半部则从 C 仿真 C++ 语言谈起,以实作的方式介绍我们如何以 C 语言为核心,建构出 C++ 语言的继承关系,然后到整个网页的完整呈现,为读者做一个完整的介绍。
微型浏览器核心运作流程
微型浏览器从网络下载回数据后,首先会交由一个称为 "Dispatcher" 的对象来处理(图一)。Dispatcher 对象是由 Queue(队列)的数据结构所组成,当网络层有数据送回来的时候,会透过 Storage Manager 放进 Dispatcher 的 Queue 中,再由 Dispatcher 分辨来源资料的 MIME Type。然后依据不同的 MIME Type 交由不同的组件进行处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论