浏览器的开发技术手册

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

浏览器加载XML网页时,能由网页中的Script内容自行作运算产生动态网页的效果,来减少服务器的速度的限制在非PC平台上,处理器的效能不若PC平台上强大。因此,微型浏览器的效能必须要被提升。就这方面来说,我们设计两个能够提升整体效能的方法:●以C语言实作核心:RockBrowser是以UML的观点设计,因此在架构上是以对象导向为概念,但是在实作之初,考虑到对象导向语言在实作继承、多形和封装时,额外的机制会造成程序代码变大变慢,且在移植平台的语言支持上,C语言是较常被支持的。因此决定以C语言来实作对象导向观念所设计的项目。这样不但可以制作快速而小的程序,同时也具备了较高的移植性。●数组堆栈:在微型浏览器中,数组堆栈是一个经常被使用的组件,因此这部分的效能会影响整个微型浏览器的效能。所谓的数组堆栈是指先配置一块内存,用来存放每次推入(push)和取出(pop)的数据,可是这样有个先天的缺点就是必须是固定长度的堆栈,若是超过堆栈的长度,程序就很可能出问题。所以我们使用realloc的方式来改善这个缺点。底下的程序代码是我们实作的原理,我们将每个堆栈的数据当成只有四个字节:我们在开始处先判断堆栈的指针是否为真,若为空的,先配置一块预设大小的内存,下次再有数据需要推入时,我们会去检查他的大小,若是配置的内存超过他所能够推入的数据,那我们就利用realloc重新配置一块大小为两倍内存空间在同一个指针位置。观念很简单,主要的用意是要达成利用数组的方式实作堆栈,如此存取快速,又可以克服数组只能用在固定大小的堆栈,而取出数据时只需要将内存空间写成默认值,不需要将内存释放。我们测试效能之后,发现和一般利用动态配置内存串成堆栈的方式相比,存取1000000比数据快了将近有40倍之多。因篇幅有限,整套API实作程序代码的,也就不再详述。可移植性以可移植性而言,在微型浏览器的设计中,我们将微型浏览器中与平台相关的部分切割出来成为单一模块。当微型浏览器需要被移植到各种不同平台时,只要修改该模块即能移植至其它异质平台上来达到微型浏览器的高移植性,减少软件移植的时间。这些模块包括:●使用者接口方面:微型浏览器所使用到的使用者界面会依据不同的窗口操作系统而被更动。如按钮键(Button)的产生等窗口组件的绘制,或是窗口组件的事件产生,都会随着不同的窗口操作系统而不同。因此在微型浏览器的设计中,为了高移植性需要将这部分的处理单一模块化。●操作系统相关方面:如Thread、Socket、File等跟系统相关的运作,通常这些操作会随着平台的操作系统不同而改变其使用方式或是行为的动作,因此这部分也需要单一模块化。●工具接口方面:像是List、String等常使用的公用工具,将它单一模块化除了为了移植性的考虑,也可独立出来供其它应用程序使用。微型浏览器的架构以下将为读者开始讲述我们独力开发的微型浏览器RockBrowser。下图为微型浏览器的架构图:图1:RockBrowser架构图我们将微型浏览器切割成五大模块,分别叙述如下:●可移植性(PortableInterface)模块将跟系统平台有关的程序,切割成PortableInterface模块,以便微型浏览器能在最短时间能移植至异质平台上。因此这部分的模块程序多为与系统平台相关操作,包含了:GUIInterface、ThreadInterface、NetworkInterface、StorageInterface、UtilityInterface等。●使用者接口(BrowsermainandUserInterface)模块此模块主要负责与使用者间的互动讯息以及使用者接口的呈现与管理。这部分包含了SkinManager(管理浏览器的使用者接口的样式)、BookmarkManager(管理使用者所设定的Bookmark)、BrowserUserInterface(微型浏览器的使用者接口)、BrowserMain(使用者的事件处理)等。●核心(BrowserEngine)模块此为微型浏览器的核心部分,主要用来处理与管理微型浏览器所接收到的XML网页。包含有:XMLTag处理、CSS的Style处理、Script的处理、网页图形处理,LayoutManager、StorageManager、Parser、HistoryManager等。●网络(NetworkProtocol)模块此为网络实际运作模块。如HTTP,WAP1.x等通讯协议。微型浏览器的运作方法在介绍完RockBrowser的架构后,接下来,我们将带领读者进入RockBrowser的运作流程。我们将从一个XML的网页的加载开始,一步一步带领读者进入微型浏览器的运作流程中,并于各个流程中探讨微型浏览器的设计秘辛。从微型浏览器的开启、网页的抓取、进入Parser的处理、Layout的处理、网页的呈现等程序来介绍微型浏览器的设计。开启微型浏览器乍看这个标题,读者或许会问,微型浏览器的开启会有什么的特别的技巧。事实上,在非PC平台上,嵌入式系统处理器效能不似PC平台上那样快速,往往为了加载一个应用程序而消耗一大段系统时间,有时甚至会让使用者误以为系统当机。在人机接口的设计上,为了解决这个问题,我们将微型浏览器的初始化步骤细分成几个部分:1.使用者接口初始化:为了让使用者能够有系统正在执行的感觉,我们先再画面上呈现微型浏览器的外框,包括一些基本的视觉对象,如标题列、工具列状态列等对象。如下图所示:2.载入首页:接下来,微型浏览器会处理一些跟使用者接口较无关系的动作。根据使用者所设定的首页或经由别的程序传入值,决定要加载的首页,并执行抓取、编排和显示网页。这部分流程包含抓取网页内容等动作,还有一些必要的对象如快取机制(cache)和历史纪录(history)功能等。其结果如下面画面所示:3.使用者设定:一般而言,供使用者设定微型浏览器选项的接口画面,并不需要在微型浏览器被加载时,就被先计算且呈现在画面上。一般都是等到使用者点选某个按钮或功能才会处理画面的呈现。因此,我们将这部分的画面加载处理程序,移至使用者去触发时,才处理,以便增加为型处理器加载的速度。如下两图所示:对于这样的加载流程,可以减少使用者等待系统反应的等待时间,而使得整个微型浏览器的加载流程会更为流畅,产生加速的效果。抓取网页浏览器最基本的功能,就是能够将因特网上的众多资源,例如网页上的内容与信息或是在线服务等,呈现给使用者并让使用者得以使用存在于因特网上的各项服务。因此透过网络传输数据对浏览器来说,是相当重要且必备的一项能力。为了让微型浏览器能够存取因特网上的各项资源并适应各种不同的网络环境,我们开发出WAP2.0ProtocolStack提供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功能的同时,也需提供一定程度的安全机制来保护使用者的个人信息不会被任意侵犯。待续截至目前为止,我们已经就微型浏览器的加载以及网页的抓取流程作简单的介绍,由于篇幅有限,我们将在下一篇中继续为读者剖析介绍微型浏览器的核心技术。深入微型浏览器(MicroBrowser)三之二信息工业策进会嵌入式系统实验室WAP技术小组前言在上一篇的文章中,我们介绍了目前各家微型浏览器的现况,以及在嵌入式系统上开发微型浏览器所需要的考虑与技术上的挑战等等。并且简介了我们自行开发的微型浏览器的使用者接口以及初始化的运作流程。紧接着在本篇文章中,我们将以节录部分程序代码配合概念解说的方式,带领读者进一步的深入了解微型浏览器的核心技术。深入微型浏览器核心微型浏览器的最重要核心技术,便是将网页设计者撰写的HTML、XML、WML…等标示语言(MarkupLanguage),经过处理还原成具有多媒体呈现效果的网页。这个过程主要可以区分成两步骤,先将网页的原始码经由Parser处理成具有意义的数据结构,再由LayoutManager来进行网页页面的编排,将标示语言还原成原来的面貌。因此,本篇文章的前半部将先从Parser处理及数据结构的概念谈起,介绍标示语言的处理方法及需要特别注意的地方;后半部则从C仿真C++语言谈起,以实作的方式介绍我们如何以C语言为核心,建构出C++语言的继承关系,然后到整个网页的完整呈现,为读者做一个完整的介绍。微型浏览器核心运作流程微型浏览器从网络下载回数据后,首先会交由一个称为Dispatcher的对象来处理(图一)。Dispatcher对象是由Queue(队列)的数据结构所组成,当网络层有数据送回来的时候,会透过StorageManager放进Dispatcher的Queue中,再由Dispatcher分辨来源资料的MIMEType。然后依据不同的MIMEType交由不同的组件进行处理。Dispatcher会将MIMEType属于卷标语言类型的数据送至Parser进行处理。现今处理此种卷标语言的标准主要分为两大主流,其一是强调效能和使用简单的SimpleAPIforXML(SAX),另一个是功能齐全且被广泛应用在XML和HTML文件的标准程序存取接口,DocumentObjectModel(DOM)。SAX的好处在于只需较少的内存空间且具有较佳的执行效率。但是相对的,它在对于数据结构存取方面的能力则比较不足,而微型浏览器这类型的应用程序又是属于需要频繁的存取文件以及相关的信息。所以我们在考虑设计的弹性和完整性后,决定采用DOM的存取接口。什么是DOM(Documentobjectmodel)?DOM(文件对象模型),顾名思义就是用对象的观念来描述一份文件,以便在内存中储存XML、HTML这类结构性文件,让应用程序能有效率的存取其中相关信息。它在W3C的建议案中,被定位为一种与语言和操作系统平台独立的对象模型。依据功能的完整性,DOM可被分为Level1~Level3三种等级。Level1提供了最基本的对XML、HTML文件浏览(Navigation)和操作的功能。Level2加入了StyleSheetObjectModel、TraversalDocument的支持,以及支持XML的Namespace属性。最新拟出草稿的Level3加入了DocumentValidate、和一些Event如KeyEvent、EventGroups的支持。DOM最主要的功能是利用对象的观念,把结构性文件建立成类似Tree(或是说Forest)的数据结构,以便透过操作Tree结构的方式加速数据存取的速度。举例来说,图二(a)这个HTML文件,可以转换成为如图二(b)这样的一个Tree的结构。在图二(b)中左边灰色的TR这个节点,我们可以透过DOM定义的getParentNode()这个接口去找到它的父节点,用getFirstChild()和getLastChild()分别可以取得它的第一个子节点

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功