关于配置文件,在 PHP 的 Zend Framework 中我做过一些简单的关于性能的测试:http://www.mikespook.com/index.php/archives/36。将 ninnypro 的配置文件从 ini 修改为 xml ,并且声称能提高传说中的性能。
最近被调到另外一个在用 python 的组帮忙,阅读了他们的实现服务器端的 python 代码之,配置文件近二十余个,全是 xml 文件。为了使用着些配置文件,从 XMLFile 继承,实现了二十余个 Config 类。
这看起来似乎没什么问题。
是的,一点问题也没有。
- XML是高度结构化的描述方式。
- XML有大量丰富的包、库支持。
- XML的跨语言能力也是相当优异。你可以轻松的用市面上常见的所有语言轻松的掌控 XML。
这些都决定了 XML 作为配置文件,肯定是比 ini 或者自定义结构的配置文件更加优异的结构。同时,大量的实践也证明 XML 的优异性。例如 j2ee 的实践、SOA的实现、Jabber 的应用都说明 XML: is the lord of the configuration。
但是真得一点问题都没有么?
首先,来看一下 Zend Framework 的 Zend_Config。由于 PHP 自身的数据结构特点,Zend_Config_Xml 和 Zend_Config_Ini 两个类都会加载相应的配置文件,解析后作为数组传递到 Zend_Config 类中。也就是说,最终殊途同归,所有的配置都变成了 PHP 的数组。
然后,再来看一下那个项目中的配置文件。结构化的 XML 被 XMLFile 读取,然后转化为 XMLFile 对象。再统一放入 ConfigManagement 中,经过转换,将部分结构转为 dict 使用。
使用配置文件的原因,我猜测是因为以前,编译语言开发的程序经过编译后,不具有动态改变参数的能力。虽然可以从命令行通过传参来在每次运行时修改配置,但是无论是谁需要通过命令行传递成百上千的参数,都会疯掉。而且,命令行传参,不具有结构化的特征。在一些场景下,需要快速修改部分配置,就变得极为困难。
于是聪明的程序员发明了对人友好的、结构化的配置文件,通过读取配置文件来改变程序内部参数的使用。
这一习惯一直沿用至今。伴随 XML 的问世,配置文件的地位再次上升。更有甚者,在开发中不做编码,只写配置。
看出问题了么?
如果还是没有想法的话,那就再来看看脚本语言:
- 脚本语言具有动态性。
- 脚本语言自身就是结构化的。
- 脚本语言可以增强编译语言的动态能力。
在各个脚本语言应用 XML 作为配置文件的实践中,不论是 PHP 的 array,还是 Python 的 dict,无一例外的将配置文件转换为了脚本语言内部的一种数据结构。在多数情况下,这也是 XML 作为脚本语言配置文件唯一的解决方案。
再来看一个问题:在项目中使用 XML 作为配置文件的时候,是否有使用 DTD 作为 XML 的效验工具?
如果答案是否定的,那么 XML作为脚本语言就没有任何优势。没有应用 DTD 的 XML 就如同 PHP 的 array,Python 的 dict 一样。
那又何必要苦苦的追随 XML,不用脚本语言的数据结构来直接编写配置文件呢?
本来,早就像对这个话题写点什么。星期六(2009-09-19)的时候参加了广州技术沙龙,听了朱童鞋的 nginx 代码剖析后,突然有所顿悟:
成功在于细节,性能在于细节。
相关推荐
在IT行业中,脚本语言是自动化任务和管理系统配置的关键工具之一。`ksh`(Korn Shell)是一种广泛使用的Unix/Linux shell,它扩展了Bash shell的功能,特别适合编写复杂和交互式的脚本。本话题将围绕如何使用ksh编写...
各类交换机配置文件批量备份脚本,在脚本同目录下建立switch.txt交换机资料,并修改相关参数,即可在SecureCRT中运行脚本
本项目是一款基于Delphi语言开发,融合Lua语言特性的CryScript脚本语言设计源码,包含28个文件,包括13个Pas源文件、3个配置文件、2个数据对象文件、2个程序文件、2个Lua脚本文件、2个Cry脚本文件、1个Git忽略文件、...
在这个主题中,我们将深入探讨"Emacs配置文件和脚本",以及与之相关的Gccsense工具。 首先,我们来看`.emacs`文件,这是Emacs的主配置文件,位于用户的家目录下。这个文件包含了Emacs启动时执行的Lisp代码,用于...
在名为"ScriptEditor"的压缩包文件中,可能包含了实现这样一个脚本编辑环境的源代码、库文件、配置文件以及可能的文档资源。这些文件可能涵盖了编辑器界面的设计、脚本解释器的实现、与IDispatch交互的代码以及测试...
TCL(Tool Command Language,工具命令语言)是一种强大的解释型脚本语言,广泛应用于系统管理、设备控制、软件开发和测试等领域。以下是对TCL脚本语言编程和TCL语言教程的一些关键知识点的详细说明: 1. **基本...
1. TCL语言:TCL(Tool Command Language)是一种脚本语言,广泛应用于自动化测试、网络管理和系统管理等领域。TCL语言具有灵活、可扩展、易于学习等特点,适合用于各种自动化任务。 2. TCL脚本实例:检查IP的脚本...
这个压缩包包含的资源是关于如何使用Plymouth脚本语言来定制自己的启动和关机主题的教程。 首先,我们要了解Plymouth的基本工作原理。Plymouth在系统启动时接管了屏幕输出,提供了一个空白的画布,然后在此基础上...
Tcl(Tool Command Language)是一种脚本语言,广泛应用于自动化测试、配置和设计环境。以下是 Tcl 脚本语言文档 ug984 的知识点总结: 一、TclScripting in Vivado * Tcl 是一种脚本语言,用于自动化设计流程 * ...
使用脚本实现cisco路由器配置文件自动备份,很不错的脚本,使用Linux Perl语言写的。
这个"Emacs配置文件"就是对Emacs进行个性化调整的脚本,通常以`.emacs`或`init.el`为名。 配置文件的主要作用: 1. **快捷键定制**:Emacs提供了丰富的快捷键,用户可以通过配置文件自定义这些快捷键,使其更符合...
"基于Lua脚本语言的嵌入式UART通信的实现" 本文提出了一种基于Lua脚本语言的解决方案,旨在提高IED装置对各种类型串口数据报文帧格式的适应性。该方案将具体串口报文规约的组建和解析交给Lua脚本进行处理,使设计者...
在IT行业中,配置文件和脚本是软件或系统运行中不可或缺的部分。它们分别扮演着不同的角色,但共同确保了程序的正确运行和个性化定制。在这个特定的场景中,标题和描述提示我们,这个压缩包包含的是一些配置文件和...
这个脚本可能适用于系统管理或者自动化部署场景,允许用户通过简单运行一次脚本,而无需手动修改多个配置文件。"支持迭代"意味着脚本可以处理多个文件或目录,遍历其中的所有配置文件,进行批量更新。 描述中提到的...
1. **配置文件错误**:可能是在IIS的配置文件(如applicationHost.config或web.config)中,对默认脚本语言的设置不正确或缺失。这可能涉及到默认语言的注册或者ISAPI筛选器的配置。 2. **组件未安装或损坏**:ASP...
基于XML脚本配置文件的自动化测试控制软件是这种趋势下的产物,它利用XML的结构化特性来管理和执行测试脚本。本文将深入探讨这一主题,介绍相关知识点,并详细阐述其原理和应用。 XML(eXtensible Markup Language...
该项目是一款集成Shell、Python和Go语言编写的脚本诊断工具设计源码,总共有44个文件,其中包括23个Shell脚本文件、7个Python脚本文件、2个Markdown文件、1个许可证文件、1个awk脚本文件、1个toprc配置文件、1个Vim...
这个压缩包可能包含了脚本文件、示例Excel配置文件以及可能的使用说明。深入研究这些文件,你可以更全面地了解如何定制和使用这个工具。 总的来说,交换机路由器批量脚本生成工具是一个强大的自动化解决方案,可以...
InnoSetup是一款强大的安装制作工具,它使用脚本语言来编写安装程序,具有灵活的定制性和易用性。本文将详细解析"innosetup脚本范例"中的知识点,帮助你理解如何利用InnoSetup创建自定义安装包。 1. **InnoSetup...