Mozilla研究—深入理解mozilla所需的背景知识
mozilla是一个以浏览器为中心的软件平台,它在我们平台中占有重要地位。我们用它来实现WEB浏览器、WAP浏览器、邮件系统、电子书和帮助阅读器等应用程序。为此,我最近花了不少时间去阅读mozilla的代码和文档,我将写一系列的BLOG作为笔记,供有需要的朋友参考。本文介绍一下深入理解mozilla所需的背景知识。
Mozilla非常庞大,据说有数百万行的代码。逐行理解所有代码是不可能的(也没有必要),不过要理解它的架构,以便充分利用它的功能是可能的。Mozilla涉及的技术比较多,如果不理解这些技术,阅读它的代码和文档可不是件容易的事。这里列出一些主要的背景知识:
1. C++/JS。mozilla使用的开发语言主要有C++和JS。C++用来开发核心代码,而JS只是用来胶合用户界面(XUL)和核心代码的。C++所占比例非常大,所以不熟悉C++就不可能理解mozilla。C++本身比较复杂,幸好mozilla考虑到可移植性等问题,除了模板外,没有使用如异常和运行时类型识别等高级特性。
2. HTML/XML。HTML浏览器是mozilla的中心项目,自然HTML的浏览和编辑是mozilla的核心之一,了解相关HTML相关知识可以减少理解mozilla的障碍。另外mozilla中大量使用了XML,XML只是语法级的规范(与语义无法),光了解XML还不够,还要了解像XBL、XUL、SVG、XSLT和SMIL等更专用的规范,尤其是XUL和XBL。
3. DOM(Document Object Model)。Mozilla为W3C 定义的DOM(Document Object Model)提供了强大的支持,对HTML文档的操作都是通过DOM接口进行的,所以至少要了解DOM的基本概念。
4. XPCOM(Cross Platform Component Object Model)。微软的COM(Component Object Model)只是针对Windows的,而XPCOM则是跨平台的,除此之外两者也并不完全相同,不过如果熟悉MS COM,再理解XPCOM就容易多了。XPCOM是mozilla的核心架构,它所有的组件都是基于XPCOM的,不理解XPCOM就不可能理解mozilla。我认为《COM本质论》是介绍COM最好的教材,特别是前面几章写非常精辟的,不可不读。
5. 网络协议。Mozilla中所有的项目差不多都与网络有关,里面涉及的协议,除了SSL外,都是应用级的协议,比如HTTP、FTP、SMTP、POP3和IMAP等等。不必清楚这些协议的所有细节,知道其功能和主要内容即可。
6. GUI。跨平台是Mozilla一直努力的目标,而GUI是跨平台的最大障碍之一,mozilla为此下了很大功夫,这部分代码占有相当大的比例。所幸各种GUI都大同小异,如果熟悉一种或多种GUI系统,理解这块不成问题。
7. 编译原理。所有语言的解析都要用到编译原理的知识,mozilla中要解析HTML和所有XML格式的文件,自然离不开编译原理。熟悉编译原理中的词法分析和语法分析,对理解mozilla会有不小的帮助。
http://www.cnblogs.com/qiubole/archive/2007/09/04/881165.html
Mozilla研究—深入理解mozilla所需的背景知识的更多相关文章
- 对html与body的一些研究与理解
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=259 一.写在前面的最 ...
- checkbox复选框的一些深入研究与理解
一.一开始的唠叨最近忙于开发,自淫于项目的一步步完工,心浮躁了.舍近而求远,兵家之大忌.我是不是应该着眼于眼前的东西,好好的静下心来,超过一般人的沉静与沉浸,研究最基本的东西呢?这番思考,让我找到了一 ...
- 【转载】checkbox复选框的一些深入研究与理解
转载来自:原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com] 一.一开始的唠叨最近忙于开发,自淫于项目的一步步完工,心浮躁了.舍近而求远,兵家之大忌. ...
- C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解
from:https://blog.csdn.net/li315171406/article/details/78450534 最近要做一个大数据dataTable循环操作,开始发现 运用foreac ...
- .Net程序猿需掌握的知识
作为一个.Net的技术人员需要掌握的技术,当然,理解这些知识点并不能让你学会.NET开发. 但能够衡量你是否有着走出校门的能力,也算是给自己留一个知识的储备库吧. 共勉! 基础知识: 数据类型 变量 ...
- 运用《深入理解Java虚拟机》书中知识解决实际问题
前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...
- 单片机小白学步系列(二十) IO口原理
IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...
- Paper Reading 1 - Playing Atari with Deep Reinforcement Learning
来源:NIPS 2013 作者:DeepMind 理解基础: 增强学习基本知识 深度学习 特别是卷积神经网络的基本知识 创新点:第一个将深度学习模型与增强学习结合在一起从而成功地直接从高维的输入学习控 ...
- 深入X64架构(翻译)
| 本人只是原创翻译,而且翻译也不一定好,纯当锻炼.内容如果英文好的同学,建议直接去看英文原版,比较爽. NBAOL系列2代产品是 windows平台64位的应用程序,在技术测试过程中,遇到一些cra ...
随机推荐
- C#的类型、变量和值
大学学了C#,工作也是使用C#,虽然在日常的开发中没什么大的问题,但个人觉得在C#的理解还不是很清晰,所以决定花一定的时间来理一理学过的知识,顺便革新下脑袋里的知识,因为坑爹的学校在教.net的时候, ...
- CSS3兼容IE的大杀器
经过长久以来的不懈努力,我终于成功的将selectivizr与PIE这两个解决css3的利器进行了深度的整合,大大降低了使用难度 <!--[if lte IE 9]><script ...
- c语言学习之基础知识点介绍(十一):字符串的介绍、使用
本节主要介绍c语言中的字符串的应用. 一:字符串介绍 因为c语言中没有像Java.C#那样的字符串类型,所以无法直接用字符串.需要借助数组来解决这个问题. /* 定义:把多个字符连在一起就叫字符串.但 ...
- asp:时间的计算
DataTime dt = new DataTime();//dt为时间DataTime对象 dt.ToString();//2005-11-5 13:47:04 dt.AddYears(1).ToS ...
- File的文件提取的小练习
package com.java.Dmeo1.www; import java.io.File;import java.util.LinkedList;import java.util.TreeSet ...
- groovy --不注意的小错误(java.lang.String.positive() is applicable)
sql 语句拼接报错: No signature of method: java.lang.String.positive() is applicable for argument types: () ...
- 切割TOMCAT日志
tomcat的catalina.out日志如果不做操作的话,日志就会日积月累的不断增加.我刚入职的时候发现某台服务器的硬盘报警,排查之后我慌了,一个tomcat的日志居然有100G,这怎么可以,在网上 ...
- 《sed的流艺术之三》-linux命令五分钟系列之二十三
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- ES6笔记-正则表达式和字符串正则方法
RegExp构造函数 在ES5中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = new RegExp( ...
- DIV+CSS 网页布局之:三列布局
1.宽度自适应三列布局 三列布局的原理和两列布局的原理是一样的,只不过多了一列,只需给宽度自适应两列布局中间再加一列,然后重新计算三列的宽度,就实现了宽度自适应的三列布局. 同样的道理,更多列的布局, ...