Mozilla研究—mozilla中的设计亮点
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中的设计亮点相关推荐
- Mozilla 正在火狐中集成谷歌翻译;内存产能增长减缓,基本告别降价
(点击上方蓝字,快速关注我们) 转自:IThome.开源中国.solidot.cnBeta.腾讯科技等 0.翻译功能不好用,Mozilla 正在 Firefox 中集成谷歌翻译 你是否知道 Firef ...
- 计算机网页设计布局与排版研究,论计算机网页设计的布局与排版
王禹智 摘 要:网页设计是一种直观的视觉语言,需要对其进行布局与排版.虽然网页设计与平而设计之间存在一定的区别,但是其两者依然存在一定的相似之处,网页设计应该充分借鉴利用平而设计的原则与方法.网页设计 ...
- 神经网络中,设计loss function有哪些技巧?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 神经网络中,设计loss function有哪 ...
- figma设计_一种在Figma中跟踪设计迭代的简单方法
figma设计 As designers, telling a good story is always part of the job. A great story engages the clie ...
- figma设计_如何在Figma中构建设计入门套件(第1部分)
figma设计 Figma教程 (Figma Tutorial) Do you like staring at a blank canvas every time you start a new pr ...
- 纯干货 | UI界面中按钮设计可临摹编辑素材!
按钮是UI界面中最常见的交互元素之一,所以,如果要创建一个稳固的互动且积极有效的用户体验,需要设计好按钮元素.今天我们将搜集整理一些网页app上常见的按钮类型,了解这些不同的按钮设计方法. Viro媒 ...
- 中职计算机基础课教学策略研究,计算机-研究教学方法中职学校计算机基础课程教学策略的论文开题报告-优度********网...
试议数字化数字化多媒体语言实验利用改进的和声搜索算法求解Van 试谈串口Delphi串口通信程序设计美国高校HRD专业设置分析及对我国简论动态网页动态网页技术:ASP.试议浅谈网站SQL注入攻击防护论 ...
- 企业vi标志设计中文字设计的方法
企业vi标志设计中文字设计的方法 编辑:AGO(安可)品牌顾问 在整个企业vi标志设计中,企业标志中文字的设计是最重要的,对于企业在推广和传播中起到很大的作用,所以企业vi设计中文字的设计是一个非常值 ...
- 【无标题】研究过程中的一些经验感悟
基础研究过程中的一些经验感悟-- 关于"金字塔结构逻辑运用二值脉冲对简单图形处理"相关知识和方法的介绍 首先作者写这篇介绍还是感觉底气有点不足,毕竟知识储备有限.但是对于作者自己的 ...
最新文章
- HMAC(2)哈希运算消息认证码HMAC
- xhost display 详解
- ITK:使用地标将图像注册到另一个图像
- How is XSRF token retrieved from backend
- iOS设备控制打印机输出文本
- 长挺丑,Go 最新的泛型类型约束语法介绍
- linux 使用 /proc 文件系统
- ubuntu中查找文件后高亮_vim查找替换及取消高亮
- linux mysql安装及密码相关问题(2)和navicat整合连接
- VB用记录集填充表格函数
- xcode6 怎样下载ios7模拟器
- 直播源码网站,自定制配置页面布局和写法
- linux脚本入门,Linux Shell脚本教程(一):Shell入门
- springboot 配置programe arguments 不生效
- 拼多多软件测试开发,拼多多事件对我们业务测试的启发
- mbp touchbar设置_Macbook Pro 上 有什么好的 Touchbar 使用技巧?
- 卷积在深度学习中的作用
- tf.control_dependencies与tf.identity组合详解
- 免费的股票成交额查询接口要到哪里找?
- LDO参数解读、特性、参考设计