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所需的背景知识的更多相关文章

  1. 对html与body的一些研究与理解

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=259 一.写在前面的最 ...

  2. checkbox复选框的一些深入研究与理解

    一.一开始的唠叨最近忙于开发,自淫于项目的一步步完工,心浮躁了.舍近而求远,兵家之大忌.我是不是应该着眼于眼前的东西,好好的静下心来,超过一般人的沉静与沉浸,研究最基本的东西呢?这番思考,让我找到了一 ...

  3. 【转载】checkbox复选框的一些深入研究与理解

    转载来自:原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com] 一.一开始的唠叨最近忙于开发,自淫于项目的一步步完工,心浮躁了.舍近而求远,兵家之大忌. ...

  4. C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解

    from:https://blog.csdn.net/li315171406/article/details/78450534 最近要做一个大数据dataTable循环操作,开始发现 运用foreac ...

  5. .Net程序猿需掌握的知识

    作为一个.Net的技术人员需要掌握的技术,当然,理解这些知识点并不能让你学会.NET开发. 但能够衡量你是否有着走出校门的能力,也算是给自己留一个知识的储备库吧. 共勉! 基础知识: 数据类型 变量 ...

  6. 运用《深入理解Java虚拟机》书中知识解决实际问题

    前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...

  7. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...

  8. Paper Reading 1 - Playing Atari with Deep Reinforcement Learning

    来源:NIPS 2013 作者:DeepMind 理解基础: 增强学习基本知识 深度学习 特别是卷积神经网络的基本知识 创新点:第一个将深度学习模型与增强学习结合在一起从而成功地直接从高维的输入学习控 ...

  9. 深入X64架构(翻译)

    | 本人只是原创翻译,而且翻译也不一定好,纯当锻炼.内容如果英文好的同学,建议直接去看英文原版,比较爽. NBAOL系列2代产品是 windows平台64位的应用程序,在技术测试过程中,遇到一些cra ...

随机推荐

  1. bgycoding

    //add by zzw@曾志伟 2015-12-9 [碧桂园项目] begin if(condition.indexOf("glbdef8 = 'Y'")>0){ Stri ...

  2. 注册dll

    unit Unit1; interface uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  3. 关于使用用友华表Cell控件按需打印行的方法

    分享下只需一个cll文件按需打印行的觉得最好的方式:1.cell文件要打印行的地方最好不要全删了,留一行,设置好单元格样式(字体.对齐方式.折行自适应等),后面会省一些代码: 2.使用CopyRang ...

  4. [python]pep8编码规范

    一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车.3 类 ...

  5. pop动画大全 只能时代程序员更应该关心效果而不是冷冰冰的代码

    下载地址 https://pan.baidu.com/s/1o8pQWau

  6. iOS开发——音频篇——音效的播放

    一.简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中的“背景音乐”,一般播放时间较 ...

  7. swift-03-数据类型转换

    //  main.swift //  05-数据类型的转换 // //  Created by wanghy on 15/8/9. //  Copyright (c) 2015年 wanghy. Al ...

  8. 14_输出映射2_resultMap

    [resultMap] 如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间做一个映射列表. 1.定义resultMap,(在UserMapper.xm ...

  9. redis php 实例

    redis php 实例一 redis的操作很多的,以前看到一个比较全的博客,但是现在找不到了.查个东西搜半天,下面整理一下php处理redis的例子,个人觉得常用一些例子.下面的例子都是基于php- ...

  10. 常用的工具GCC GDB Make Makefile

    系统调用系统调用是操作系统提供给外部应用程序的一组特殊的接口.应用程序通过这组特殊“接口”来获得操作系统内核提供的服务.在 C 语言中,操作系统的系统调用通常通过函数调用的形式完成, 这是因为这些函数 ...