浏览器设计与实现论文.docx

上传人:b****1 文档编号:3377135 上传时间:2023-05-05 格式:DOCX 页数:57 大小:290.57KB
下载 相关 举报
浏览器设计与实现论文.docx_第1页
第1页 / 共57页
浏览器设计与实现论文.docx_第2页
第2页 / 共57页
浏览器设计与实现论文.docx_第3页
第3页 / 共57页
浏览器设计与实现论文.docx_第4页
第4页 / 共57页
浏览器设计与实现论文.docx_第5页
第5页 / 共57页
浏览器设计与实现论文.docx_第6页
第6页 / 共57页
浏览器设计与实现论文.docx_第7页
第7页 / 共57页
浏览器设计与实现论文.docx_第8页
第8页 / 共57页
浏览器设计与实现论文.docx_第9页
第9页 / 共57页
浏览器设计与实现论文.docx_第10页
第10页 / 共57页
浏览器设计与实现论文.docx_第11页
第11页 / 共57页
浏览器设计与实现论文.docx_第12页
第12页 / 共57页
浏览器设计与实现论文.docx_第13页
第13页 / 共57页
浏览器设计与实现论文.docx_第14页
第14页 / 共57页
浏览器设计与实现论文.docx_第15页
第15页 / 共57页
浏览器设计与实现论文.docx_第16页
第16页 / 共57页
浏览器设计与实现论文.docx_第17页
第17页 / 共57页
浏览器设计与实现论文.docx_第18页
第18页 / 共57页
浏览器设计与实现论文.docx_第19页
第19页 / 共57页
浏览器设计与实现论文.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

浏览器设计与实现论文.docx

《浏览器设计与实现论文.docx》由会员分享,可在线阅读,更多相关《浏览器设计与实现论文.docx(57页珍藏版)》请在冰点文库上搜索。

浏览器设计与实现论文.docx

浏览器设计与实现论文

摘要

本文主要论述了嵌入式浏览器开发所涉及到的技术,对HTML词法分析、浏览器JavaScript支持、linux和gtk编程等做了详细的分析和介绍,并对Netbit浏览器的开发进行了介绍,分析了主要的模块的功能和组成,并给出了主要算法。

还对典型的嵌入式浏览器进行了分析,包括Gzilla,Mozilla,Thunder和zen,总结了浏览器设计的技术要点和开发策略。

另外,在论文开头,介绍了目前嵌入式浏览器产品的发展现状,嵌入式浏览器的组成和各部份功能说明。

HTML词法分析是着重讨论的技术问题,给出了详尽的数据结构,程序流程。

Netbit浏览器的开发,是本论文的重点,分模块进行了分析,提出了需要改进的地方,并给出了改进措施。

 

关键词:

嵌入式浏览器,HTML词法分析,Javascript,linux,gtk

ABSTRACT

Thispaperisfocusedonthetechnologyofembeddedbrowser.Htmlscanner,JavaScriptsupportforbrowser,linuxandgtkprogrammingaredeeplydiscussed.andintroducethedevelopmentofNetbitbrowser,analysethemainmoduleofNetbit,thealgorithmispresented.

what’smore,othertypicalembeddedbrowsersareanalysed,includeGzilla,Mozilla,Thunderandzen,andsummarizetheimportanttechnologyandthepolicyofbrowserdevelopment

Inaddition,attheheadofthepaper,introducethepresentstatusofembeddedbrowserproduct,thegeneralformofembeddedbrowseranddescriptionofthemainparts.

HTMLscannerisanimportanttechnologicalproblem,thedatastructureandtheflowoftheprogramarepresented.

ThedevelopmentofNetbitBrowserismainlydiscussed,andanalysedbymodule,givetheopiniontoimproveit.

 

KEYWORDS:

embeddedbrowser,HTMLtoken,Javascript,linux,gtk

引言………………………………………………………………5

第一章嵌入式浏览器设计概述…………………………6

1.1目前嵌入式浏览器产品的发展现状………………………6

1.2嵌入式浏览器的组成和各部份功能说明…………………8

1.3开发难度分析………………………………………………9

1.4开发的前期策划……………………………………………10

第二章HTML词法分析器的设计及其应用……………12

2.1BitToken的组成及其功能………………………………12

2.2数据结构……………………………………………………12

2.3算法…………………………………………………………13

2.4词法分析结果示意……………………………………………15

2.5HTML词法分析的应用………………………………………15

第三章浏览器JavaScript支持的实现…………………18

3.1基本的JavaScript开发环境………………………………18

3.2JavaScriptEngine…………………………………………18

3.3JavaScript与浏览器接合…………………………………19

3.4浏览器消息响应……………………………………………21

第四章Linux程序开发技术及GTK图形程序开发……23

4.1Linux下的程序开发环境……………………………………23

4.2GTK图形程序开发……………………………………………29

第五章Netbit浏览器开发与分析………………………31

5.1Netbit浏览器简介…………………………………………31

5.2NetbitBrowser浏览器各部份的功能……………………31

5.3界面模块………………………………………………………32

5.4控制模块………………………………………………………34

5.5词法分析模块…………………………………………………34

5.6使用PIXMAP的画图模块………………………………………35

5.7文本文件的显示模块…………………………………………36

5.8HTML文件的显示模块………………………………………37

5.9Netbit实际应用效果及比较………………………………40

5.10NetbitBrowser的缺点分析及改进办法…………………44

5.11NetbitBrowser未来的展望………………………………48

第六章其它浏览器分析……………………………………50

6.1Dillo(Gzilla)浏览器分析………………………………50

6.2Thunder浏览器分析…………………………………………55

6.3Mozilla浏览器分析…………………………………………56

6.4ZEN浏览器分析………………………………………………57

6.5浏览器分析工作的总结………………………………………58

致谢……………………………………………………………60

参考文献表………………………………………………………61

引言

随着计算机、网络技术的迅猛发展,新型的高科技含量的电子产品层出不穷,遍及家电、生产、军事等各个领域。

嵌入式系统因其体积小,速度快而受到重视。

在掌上电脑、PDA、手机、导航设备、信息家电领域嵌入式系统被广泛采用,这也是近期产品研发的热点。

嵌入式浏览器作为重要的嵌入式系统应用软件,是不可或缺的。

但目前,嵌入式浏览器产品的市场被少数国外大公司垄断,众多的小型嵌入式浏览器也尚处于发展期,而国内的自主技术的嵌入式浏览器更屈指可数,刚刚进入实用阶段。

迫切需要更多的人来关注嵌入式浏览器技术,开发中国自主知识产权的浏览器产品。

本文阐述了嵌入式浏览器开发的关键技术,并详细说明NetbitBrowser的实际开发过程,技术细节。

并以网站的方式公布了其源代码,为国内嵌入式浏览器的发展做了有益的尝试。

第一章嵌入式浏览器设计概述

1.1目前嵌入式浏览器产品的发展现状

1.1.1桌面浏览器简介及其与嵌入式浏览器的区别:

常见的桌面浏览器有微软的InternetExplorer,网景的Netscape,开放源码的Mozilla,以及opera,mosaic,Hotjava,字符模式的lynx等。

其中IE,Opera已有嵌入式版本,以上的大多数浏览器均有跨多平台的版本。

这些桌面型浏览器功能参差不齐,但大多能实现基本的浏览功能。

其中IE与Netscape对HTML页面的显示效果均堪称完美(对于XML,WML等标准的网页浏览,本文不予讨论)。

与完美的浏览效果,功能丰富,支持多种媒体格式和视音频插件等优点形成对立的是,这些浏览器庞大的体积和对机器配置的高要求。

这也是桌面浏览器和嵌入式浏览器最大的区别。

另外,桌面型浏览器通常是基于通用的操作系统,用于桌面电脑如PC机、MAC机等。

而嵌入式浏览器通常基于专用系统。

需要指出的是,我们在网上常看到的一些所谓的优秀浏览器,如Netcaptor,魔装网神,腾讯,飓风,Fantasia,金山WPSoffice的浏览器等等,均为使用IE内核的浏览器,使用了多页面多线程的方式,降低了系统资源的耗费,方便了浏览,但软件本身没有多少技术可言,可以用Delphi,VB等工具轻易开发出来(如果不要求完善的功能,只需简单到拖一个IE控件过去就行了),这也体现了微软的COM+及ActiveX技术的强大。

1.1.2常见嵌入式浏览器

(1)InternetExplorerforWinCE,是IE的WindowsCE版,这也意味着用户为了使用它,必须选用基于WinCE平台的产品,随着微软势力在掌上终端领域的蔓延,WinCE版的IE必将大行其道。

(2)AccessNetfront,Access是日本的浏览器大厂,占据了大部份的日本浏览器市场,其产品广泛应用于手持设备、机顶盒、游戏机等产品。

其新推出的NetfrontLinux版本可以免费下载,网址是:

http:

//www.access.co.jp/product/develop。

经试用,发现Netfront浏览效果非常好,对中文的支持和表格的显示效果,甚至超过Netscape4.6forLinux。

而且支持键盘操作。

可以使用箭头键来选择网址进行跳转。

但显然为了简化设计,Netfront使用了一定的权宜手段。

比如它不支持使用标记来设置字体,也不支持样式表,所有字体的大小是固定的,但一般情况不易发现,不过由于Linux版本不是商业性版本,无法就此推断其他版本的特性。

NetfrontLinux版大小为1.9M,如再加以简化(比如去掉一些图片按钮)可以做的更小。

(3)Gzilla,现名Dillo,是基于Linux,使用GTK作为GUI平台开发的浏览器,其开发目的也包含嵌入式的应用。

是开放源码项目。

我们在设计NetbitBrowser时主要参考了该浏览器的界面设计。

该浏览器的缺点是不支持表格,布局过于简单,不支持中文,浏览效果比较差,优点是网络功能完善,支持cache缓冲,能够支持多种图片格式。

网址是:

(4)Viewml,使用FLTK作为GUI平台开发的浏览器,主要面向嵌入式的应用。

是开放源码项目。

使用C++面向对象的设计。

因为使用FLTK,所以可以在嵌入式的MicroWindow平台运行,该浏览器支持简单的表格,界面还没有做(只有一个主窗口),不支持中文,由于FLTK的BUG比较多,我们在实际编译时经常出错,即使编译通过,也常常是还没运行就coredump了,但曾经由某人编译成功,基本可用,网址是:

(5)ZEN,一个并不知名的嵌入式浏览器,但却十分优秀,开放源码项目,不仅支持表格,支持多种图像格式,而且在设计上很有特色,将涉及到GUI平台的部分独立出来,用户可以指定不同的GUI平台运行,内置了对字符,SVGA和GTK的支持,开发这只需按照相应规范编写该软件的涉及GUI的部份,就可以将其移植到其它GUI平台,而无须对整个软件进行修改。

缺点是网络功能比较弱,不支持多线程,另外其必须等到所有图片下载完毕才开始布局,若某文件传输失败则会导致死锁,需用户中断。

网址是:

http:

//www.nocrew.org/software/zen/。

以上主要介绍了开放源码的嵌入式浏览器,因为其对本项目具有实际的参考价值。

1.1.3嵌入式浏览器的应用领域

嵌入式浏览器主要应用于手持终端和信息家电,例如掌上电脑、3G手机、网络机顶盒、具有网络功能的其它家电,如可上网的电冰箱等,另外,在军事等领域也有一定的应用需求。

1.2嵌入式浏览器的组成和各部份功能说明

下面简介主要的组成部份,其设计原理后面将进行专门论述。

1.2.1词法分析

主要是针对HTML进行词法分析,该词法分析器实际是通用的,还可用于XML、WML的词法分析,只需替换元素名称即可。

HTML词法分析是浏览器设计的基础环节之一,也是整个设计过程中重要的前端工作,其数据结构的拟定与接下来的语法分析和布局算法密切相关,词法分析的效率与准确性、容错性也关系到整个浏览器设计的质量。

1.2.2语法分析

在大型的浏览器中,语法分析通常是独立的模块,但在嵌入式浏览器中,语法分析通常是与布局混合在一起的,即一边进行语法分析,一边布局,不设立相应的数据结构来存储语法分析的结果。

语法分析对布局的算法有直接的指导意义。

1.2.3布局

本文中的布局应理解为界面输出前的预演和处理位置等信息的算法,而不是具体的画图和界面输出。

布局算法的好坏直接关系到界面的输出效果,但布局算法也是要根据GUI所能实现的输出效果来设计的,所以,GUI往往成为系统的瓶颈,如果GUI提供的支持有限,即使有再好的布局算法,也是纸上谈兵,无用武之地。

1.2.4GUI及软件界面

GUI是指图形用户界面,浏览器无疑是一个图形函数库的大需求者,选择好的GUI环境实属不易,为了能够实现专有的功能,浏览器开发者往往还要对基础的GUI库进行包装、改写,甚至写自己的控件。

所有这些,是需要有专业的GUI库开发经验的专职人员来完成。

GUI的功劳第一在于软件的操作界面,如窗口、菜单、工具条、滚动条等。

第二在于主浏览窗体中的图形元素的输出(通常以自画控件的方式)。

前者通常直接使用GUI库中的已有控件,编程难度很小,后者主要利用基本的点线函数,编程难度比较大。

1.2.5JavaScript支持

实际上JavaScript的编译器是开放源码的,而且全世界通用,包括IE、Mozilla、Netscape等浏览器都使用相同的JavaScript的编译器,但为何其对JavaScript的支持不尽相同呢,这是因为JavaScript在浏览器里主要是用于操纵界面元素和与浏览器内部命令进行结合。

这实际上是程序员努力的结果,而不是JavaScript编译器的功劳。

这其中的机制将在后面专门介绍。

1.2.6IO

主要是指通过HTTP协议或文件系统来读取网页内容,网络部份超出了本论文的讨论范围,不予详述,后面将介绍与网络部份的接口。

以上主要按工作的性质进行分类,介绍了浏览器设计的主要几个部份,但与实际开发工作的人员划分不同,实际工作要考虑人员的实际能力和经验,结合要实现的目标,对各部份的投入也有轻重缓急之分,比如,如果没有词法分析的先行实现,语法分析与布局都是纸上谈兵。

GUI平台不确定,布局工作也无法展开。

1.3开发难度分析

我们也可以看到,要设计效果较好的浏览器产品,决不是三五个人、两三条枪就能办到的,参与工作的人员不仅需要有相关经验,还需要有一定的投入,一方面对程序员艰苦的工作给予鼓励,另一方面也可能需要购买一些成熟的开发包,在基础的开发平台、测试平台上也要有一定的投资,总的来说,开发自主技术的浏览器产品是有一定的风险的,这也是国内目前相关产品为数不多的原因。

国外大公司在相关领域的科研与实践已很成熟,在大量投入之后,其产品已为广大用户所接受,国内的企业若从零做起,也很难追赶。

因而买断技术,加以改进也可以成为快速成长的一条道路。

1.4开发的前期策划

以下的工作均是建立在大量的调查基础上的。

是浏览器开发前期准备工作所解决的问题。

1.4.1平台的选取

目前的商业化嵌入式操作系统功能完善,但使用费用高昂,使用Linux内核的嵌入式操作系统不仅功能强大,便于开发移植,而且费用低廉,基于Linux的嵌入式系统已日渐成熟,也有相应的窗口系统可以使用,我们使用PC上的Linux来进行浏览器开发,是再好不过的了,软件从PC移植到嵌入式设备只需重新编译一下就可以了(前提是使用的函数库、开发包同时具有PC和嵌入式的版本)。

1.4.2GUI的选取

GUI的选取是颇费脑筋的问题,一方面要考虑嵌入式系统是否有对应的版本,一方面要考虑该GUI的功能是否足够实用。

目前常见的基于Linux的GUI开发包主要有GTK、FLTK、QT、KDE等,其中FLTK有MicroWindow的版本,是比较好的选择,但使用FLTK开发的软件还比较少,对于初学者进入的难度更大,而且目前BUG较多,而GTK比较成熟,使用GTK的软件比比皆是,资料也很丰富,我们的参考对象Gzilla也使用GTK,也就是说如果使用GTK,将有很好的原型进行参考,这使得GTK对于目前毫无GUI开发经验的浏览器开发组而言,充满了巨大的诱惑。

考虑到GUI是可以成为独立模块的,如浏览器ZEN的设计,我们决定使用GTK,待时机成熟可换用其它平台,也并非难事。

在前期,我们也对FLTK加以了研究,还尝试了以FLTK为基础构建GUI中间层的办法,但由于工作量巨大,初步估算需2万行程序,而不得不暂缓该计划。

建立GUI中间层在理论上是可行的,这样,在必要时可以釜底抽薪,替换掉基础的GUI平台,应用软件完全不需修改,但中间层与基础层的接口要重写,其工作量也很大,未必是核算的买卖。

1.4.3确定要实现的基本功能

鉴于对浏览器开发难度的充分考虑,以及现有人员的水平,拟定实现以下功能,以及需要考虑但暂不予实现的功能。

需要实现的包括:

(1)界面:

包括窗口,菜单,输入框,工具条,滚动条等的支持。

(2)词法分析:

必须实现实用的HTML词法分析,支持HTML4.0全部元素。

(3)实现简单网页的布局:

实现对简单网页的查看。

(4)支持基本IO,支持采用线程的网络传输。

需要考虑的功能:

(1)JavaScript支持

(2)汉字支持

(3)图片格式支持

(4)表单支持

(5)页面元素的消息响应

1.4.4人员分工

由于情况的变动,造成了人员比较紧张,在前期准备工作中,人力充沛,使得收集的资料比较完备,打下了较好的基础。

在后期简化了目标,虽然人员减少,但也能够实现主要的工作。

考虑到网络是比较独立的部份,把它分出去由专人负责。

第二章HTML词法分析器的设计及其应用

HTML词法分析是浏览器设计的基础环节之一,也是整个设计过程中重要的前端工作,其数据结构的拟定与接下来的语法分析和布局算法密切相关,词法分析的效率与准确性、容错性也关系到整个浏览器设计的质量。

下面将介绍一个HTML词法分析器——BitToken的设计思路。

BitToken是NetbitBrowser的HTML词法分析器,使用标准C编程,NetbitBrowser是基于Linux/Gtk的浏览器,开放源码项目,网址是http:

//netbit_。

2.1BitToken的组成及其功能

BitToken作为NetbitBrowser的词法分析部份,负责对接收的HTML代码进行词法分析,主要的目的是提取网页中元素的名称及其属性,并以恰当的形式(即按一定的数据结构)加以保存,也就是完成了将数据流离散化、结构化的过程。

主要由以下几个部分组成:

1、初始化:

完成对数据结构的初始化,主要是分配内存,变量赋初值。

2、主体的数据流分析:

逐字符的进行判断,确定数据的归属类型。

3、元素的分析:

提取元素的名称、属性和值域。

4、释放:

主要是对内存的释放。

2.2数据结构

typedefstructBitTokenContext

{char*strBuffer;//当前正在处理的HTML代码

intbufferLength;

intcurPosition;

char*global_strBuffer;//全局HTML代码

intglobal_bufferLength;

intglobal_curPosition;

BitTokenList*tokenList;//元素节点链表

BitTokenList*tokenList_tail;

BitPTagListpTagList;//元素名称表,指向静态数据

}BitTokenContext,*BitPTokenContext;

BitTokenContext是用于存储当前待分析网页全局属性的数据结构,其中TokenList是核心的元素节点链表。

词法分析的目的就是生成这样一个链表。

下面给出该链表的数据结构,是很简单的双向链表。

typedefstructTokenList

{BitToken*token;//元素节点

structTokenList*priou;

structTokenList*next;

}BitTokenList,*BitPTokenList;

以下是元素节点的数据结构:

typedefstructBitToken

{inttype;//节点类型,如定义的HTML_BODY,HTML_TXT等。

char*pData;//如果是HTML_TXT型元素,则为其内容,否则为空

BOOLend;//是否是结束元素,如

BitTokenAttrList*attrList;//元素属性链表,因为可能有多个属性,所以使用链表存储

BitTokenAttrList*attrList_tail;

}BitToken,*BitPToken;

请注意,以上出现tail标记的指针变量,如BitTokenList*tokenList_tail等,其作用是用于保存链表结尾节点指针,便于在释放内存时,直接找到链尾,提高了算法的效率。

2.3算法

2.3.1基本算法:

首先介绍基本的算法:

(1)从存储网页的字符串中,顺序读入一个字符

(2)如果遇到<,认为遇到TAG(元素),处理该元素,使用函数Token_ConsumTag(),处理完毕后,指针移到该元素尾。

(3)如果遇到回车、空格,则跳过。

(4)如果遇到>,则跳过(不应该出现此情况,为了容错)。

(5)如果非以上情况,则认为遇到文字,处理这段文字,使用函数Token_Consum_PlainText()。

处理完毕,指针指向下一个元素首。

(6)循环以上操作,直到该网页分析完毕。

由此看来,主算法十分简单而清晰,主要是Token_ConsumTag()和Token_Consum_PlainText()这两个函数起关键作用,由于其中涉及到许多细节问题,此处不予详述。

2.3.2算法效率与改进:

采用以上的基本算法,是可用的,但当网页比较大的时候,比如600K,该算法的效率成倍下降,这主要是由于要处理的字符串太大,在内存中完成查找、替换、复制、移动等操作,响应时间明显下降。

对此的改进办法就是分段进行词法分析,不仅极大的提高了效率(在某些情况下约提高30倍),也有利于浏览器整体设计,因为当网页较大时,若等待全部内容传输完毕,再一次性完成词法分析和布局,用户会感到等待时间过长,一般现在成熟的浏览器都采用边传输,边分析,边显示。

分段进行词法分析的算法复杂度明显增加,比如,当每段定为1024字节,在第1024字节处,可能正好将一个完整元素截断,按常规分析方法会造成错误。

解决的办法是,采用回溯,确认要分析的部份至少包含1个完整元素。

具体做法是:

判断1024字节处是否为元素结束字符‘>’,如果不是,则判断前一个字节,直到找到元素结束字符为止,这样可保证至少包含一个元素。

采用分段进行词法分析,实际每次分析的代码会不足1024字节,余下的部份汇入到下一段的分析过程即可,直到所有内容被分析完毕。

2

展开阅读全文
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2