Mozilla研究—mozilla中的设计亮点

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:Li XianJing <xianjimli at hotmail dot com>

更新时间:2007-3-1

mozilla是一个以浏览器为中心的软件平台,它在我们平台中占有重要地位。我们用它来实现WEB浏览器、WAP浏览器、邮件系统、电子书和帮助阅读器等应用程序。为此,我最近花了不少时间去阅读mozilla的代码和文档,我将写一系列的BLOG作为笔记,供有需要的朋友参考。本文介绍一下mozilla中的设计亮点。

近几年我看了不少大型开源系统,它们每个设计得都很经典,而mozilla无疑是其中的佼佼者之一。好的设计总是遵循一些众所周知的设计准则,套句俗语说,差的设计千差万别,好的设计都差不多。Mozilla也一样,它也无非是遵循了一些好的准则,只是实现手段有些差异罢了。这里简单的说一说,就算是温故知新吧。

1.       针对接口编程。

Mozilla整个设计都是基于组件对象模型(COM)的,而组件对象模型(COM)的主要特点就是针对接口编程。在《设计模式》中,作者把针对接口编程作为设计的首要准则。针对接口编程的主要目的就是信息隐藏,隔离变化,把模块的使用者和实现者之间的耦合减到最小。而且在XPCOM的帮助下,组件可以动态替换或者增加,具有更强的灵活性。

2.       分离界面和实现。

在这一方面,mozilla算是非常前卫了:用标记语言(XML)开发界面,用编程语言来实现(C++)逻辑,而用脚本语言(javascript)把两者胶合起来,这可以说是把三者的长处发挥到了极致。以前我也有过类似的想法,当时刚进入手机行业,我发现各种GUI的不统一,导致手机程序移植非常困难。当时就想,如果应用程序的界面用HTML来写,应用程序的逻辑用C/C++写,界面在浏览器中运行,而应用程序的逻辑作为WEB服务器运行。再扩展一下HTTP协议,支持异步事件,完全可以实现传统的应用程序。后来发现mozilla早就实现了类似的东东,让我大跌眼镜。

另外mozilla也大量应用了观察者模式,这对分离界面和实现很有帮助。比如,网络操作通常都要花很长时间,在此期间要报告操作的当前状态。通过观察者模式,可以在长时间操作中更新状态,而又避免了操作与用户界面的耦合。

3.       可移植性。

Mozilla是一个跨平台的软件,它的基本运行平台有linux、windows和mac,实际上它还可以运行在其它unix平台上,所以可移植性是mozilla是主要目标之一。如果开发过跨平台软件,你就会知道开发可移植性软件是多么困难,特别是大型GUI应用程序。Mozilla在可移植性上可谓费尽苦心:

l         实现了一套跨平台的组件对象模型(XPCOM),这使得mozilla可以利用组件对象模型(COM)的好处,而又不限于windows平台。

l         实现了一套可移植运行库,对各种操作系统的接口作了抽象,隔离上层模块对操作系统的依赖。

l         实现了自己国际化机制,包括编码转换、编码检测和字符串翻译等等。

l         对GUI作了抽象,实现了widget和gfx两个库,前者负责窗口/控件的处理,后者负责图形/图像的绘制。可以用不同的GUI作为实现后端。

4.       可扩展性。

对于浏览器来说,可扩展性也是非常重要的。由于它涉及的东西太多,专业的功能应该由专业的厂商去做,而不是全部由浏览器来实现。比如像flash播放、视频播放和pdf阅读等等都应该从浏览器中分离出来。Mozilla提供了两种扩展机制,一种称为plugin,另外一种称为extension。这可能有点让人混淆,我是这样理解的:

l         plugin用来增强现有功能,比如wml browser plugin可以把wml转换成html,而media player plugin可以播放音/视频文件。所有的plugin都要实现指定的接口。

l         extension用来扩展新功能,这些功能可能与浏览器有关,也可能无关,像help extension就是用来实现帮助功能的。Extension不必实现特定的接口。

5.       稳定性(内存问题检测)。

用C/C++开发的应用程序,最大的毛病就是容易出现内存泄露和越界,即使有多年开发经验的老手也可能在此栽了跟头。有人说,有很多工具可以帮助检测内存问题啊。没错,但有两种情况可能让这些工具失效,一是GUI系统,它们通常使用了共享内存,大多数工具对此都无能为力。不信的话,你可以用valgrind检查一下GTK应用程序试试。二是自己管理了内存,大型系统中,为了高效的利用内存,往往实现了自己的内存管理器,工具对此一无所知,自然帮不上忙。

Mozilla实现了自己的内存管理器,同时还实现多种内存问题检查机制,比如用boehm垃圾回收机制来检查内存泄露问题。当然,对于C/C++这个毛病,也是迫不得已,大家都在重复实现这些东西,却没有好的重用办法,这不怪mozilla。

~~end~~

Mozilla研究—mozilla中的设计亮点相关推荐

  1. Mozilla 正在火狐中集成谷歌翻译;内存产能增长减缓,基本告别降价

    (点击上方蓝字,快速关注我们) 转自:IThome.开源中国.solidot.cnBeta.腾讯科技等 0.翻译功能不好用,Mozilla 正在 Firefox 中集成谷歌翻译 你是否知道 Firef ...

  2. 计算机网页设计布局与排版研究,论计算机网页设计的布局与排版

    王禹智 摘 要:网页设计是一种直观的视觉语言,需要对其进行布局与排版.虽然网页设计与平而设计之间存在一定的区别,但是其两者依然存在一定的相似之处,网页设计应该充分借鉴利用平而设计的原则与方法.网页设计 ...

  3. 神经网络中,设计loss function有哪些技巧?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 神经网络中,设计loss function有哪 ...

  4. figma设计_一种在Figma中跟踪设计迭代的简单方法

    figma设计 As designers, telling a good story is always part of the job. A great story engages the clie ...

  5. figma设计_如何在Figma中构建设计入门套件(第1部分)

    figma设计 Figma教程 (Figma Tutorial) Do you like staring at a blank canvas every time you start a new pr ...

  6. 纯干货 | UI界面中按钮设计可临摹编辑素材!

    按钮是UI界面中最常见的交互元素之一,所以,如果要创建一个稳固的互动且积极有效的用户体验,需要设计好按钮元素.今天我们将搜集整理一些网页app上常见的按钮类型,了解这些不同的按钮设计方法. Viro媒 ...

  7. 中职计算机基础课教学策略研究,计算机-研究教学方法中职学校计算机基础课程教学策略的论文开题报告-优度********网...

    试议数字化数字化多媒体语言实验利用改进的和声搜索算法求解Van 试谈串口Delphi串口通信程序设计美国高校HRD专业设置分析及对我国简论动态网页动态网页技术:ASP.试议浅谈网站SQL注入攻击防护论 ...

  8. 企业vi标志设计中文字设计的方法

    企业vi标志设计中文字设计的方法 编辑:AGO(安可)品牌顾问 在整个企业vi标志设计中,企业标志中文字的设计是最重要的,对于企业在推广和传播中起到很大的作用,所以企业vi设计中文字的设计是一个非常值 ...

  9. 【无标题】研究过程中的一些经验感悟

    基础研究过程中的一些经验感悟-- 关于"金字塔结构逻辑运用二值脉冲对简单图形处理"相关知识和方法的介绍 首先作者写这篇介绍还是感觉底气有点不足,毕竟知识储备有限.但是对于作者自己的 ...

最新文章

  1. HMAC(2)哈希运算消息认证码HMAC
  2. xhost display 详解
  3. ITK:使用地标将图像注册到另一个图像
  4. How is XSRF token retrieved from backend
  5. iOS设备控制打印机输出文本
  6. 长挺丑,Go 最新的泛型类型约束语法介绍
  7. linux 使用 /proc 文件系统
  8. ubuntu中查找文件后高亮_vim查找替换及取消高亮
  9. linux mysql安装及密码相关问题(2)和navicat整合连接
  10. VB用记录集填充表格函数
  11. xcode6 怎样下载ios7模拟器
  12. 直播源码网站,自定制配置页面布局和写法
  13. linux脚本入门,Linux Shell脚本教程(一):Shell入门
  14. springboot 配置programe arguments 不生效
  15. 拼多多软件测试开发,拼多多事件对我们业务测试的启发
  16. mbp touchbar设置_Macbook Pro 上 有什么好的 Touchbar 使用技巧?
  17. 卷积在深度学习中的作用
  18. tf.control_dependencies与tf.identity组合详解
  19. 免费的股票成交额查询接口要到哪里找?
  20. LDO参数解读、特性、参考设计

热门文章

  1. 显示硬件发展与视频开发系列(3)----3D时代
  2. JAVA 以逗号隔开的字符串怎么分割出来?
  3. 去重用逗号隔开的字符串
  4. mysql 如何获取当前时间 前、后一小时的时间?
  5. web页面如何进行电话拨打
  6. 第十二届noc网络机器人赛项成绩_第十二届NOC活动全国决赛圆满落下帷幕
  7. linux文件体系结构和虚拟文件系统
  8. PMO对项目需求调研的要求(含业务蓝图)
  9. centos7系统nginx优化
  10. 李彦宏提案的思路:基于实践、崇尚技术、关注民生