首页>参考读物>计算机科学与技术>软件与程序设计

Perl Web 开发技术
作者 : (美)Chris Radcliff
译者 : 王爱国 周丽萍 等
出版日期 : 2002-02-01
ISBN : 7-111-09779-3
定价 : 35.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 292
开本 : 16开
原书名 : Perl for the Web
原出版社:
属性分类: 店面
包含CD :
绝版 : 已绝版
图书简介

本书重点介绍了用Perl进行Web开发时可能遇到的问题、现在的解决方案和未来的发展趋势。
本书主要内容分为三个部分,第一部分具体讨论了Web开发时可能遇到的、应该注意但却可能被忽视的一些问题,这些问题在用Perl语言或其他语言进行Web开发时普遍存在;第二部分介绍了用Perl开发Web应用程序的优势,并提出了对问题的解决方案,包括基本原理、实现工具和存在的优缺点等,并具体针对Web应用程序的性能问题提出不同的解决方案,这些方案都充分体现了利用Perl的优势;第三部分介绍了面向未来的解决方案,具体介绍了Perl的未来、Web开发的发展趋势和一些示例。
本书编排独特,阅读方便,针对性极强,是一本不可多得的好书。本书是用Perl进行Web程序设计和提高Web应用程序性能的很好的参考资料。对利用其他语言进行Web程序设计和开发的技术和管理人员也有一定的指导作用。

图书前言

设计一个Web应用程序不是进行脑部手术,确实,它没有那么复杂,它的使用与单一用户或企业级应用程序比起来也是轻量级别的。使用Perl编写应用程序使工作更容易。尽管Web应用程序设计很简单,但其中包含的一些基本思想被大多数应用程序设计者完全忽略了。这些思想不是很复杂,本书真正重要的部分可以用一两页总结出来。但这些原则仍被如此多的人如此经常地忽视的主要原因是它们很新,以前还没有把它们写下来。
我应该在此更正,这些原则其实早已有人写出来,只是比较分散。我初次知道其中的一些原则是在阅读文档时偶然发现的。其他的原则是我在让一个不是极度缓慢的Web应用程序工作起来的反复试验中,以及点点滴滴地改善其性能时学到的。这些原则中的一些完全是我独自创造的,我长期以来一直把它们作为工作原则,它们已与本书的其他部分融为一体。
那么,既然基本东西可以用一页纸概括,为什么要用一本书的篇幅呢?一个原因是您不可能只拿起一页的小册子然后用它的原则来开发一个百万美元的Web应用程序。另一个原因是您不可能拿一页的小册子让您的老板相信这就是开发应用程序方式的足够的理由。当讨论的技术是Perl时,这个问题尤其尖锐,因为没有亿万美元的公司作广告宣传它。提出一个Perl解决方案可能是一场艰苦的战斗,因此,拥有基于实践经验的一个相关的、完全的参考是有帮助的。
写作本书的主要原因是一页纸不能详细覆盖所有的重要思想。它可能包括一些基本的思想,但它缺少提出那些思想的重要原因。它不会包括使CGI缓慢的体系结构模型或使基于模板的HTML成为必须的业务处理过程。它不会谈到15件小事加起来使基于Web的数据库访问速度变慢,并且它也不会提及为什么它不总是最有效的原因。最重要的是,它不会用不同的例子来解释它的观点,而任何一个例子都能使思想更进一步被领会。
读者对象
如果您是一个Web站点管理员、一个Web网站项目的带头人、一个CTO、一个数据库管理员或您只是一个寻求更好的方法的Perl黑客,这本书就是您想要的。这本书的读者对象包括要改善其Web应用程序性能的程序员,试图评估Web技术对一个项目可用性的管理者和希望为其Web页面添加程序处理而又不想陷入CGI深潭的HTML设计者。这本书也对那些试图要说服别人采用比他们现有策略更好的人都有用。
我衷心地希望那些已经厌倦的人来阅读本书,有的人可能厌倦了CGI程序的深不可测的性能,另一些人可能厌倦了Cold Fusion、ASP或Java servlets的较差的可伸缩性,还有更多的读者可能厌倦了编写面向对象的mod_perl程序的需要。管理者可能厌烦了程序员的喋喋不休地对性能测试、更好的硬件和更Perl化的要求。
对Perl不熟悉的技术性和非技术性的读者在第1~7章可以发现最有价值的决策见识。我已经尝试把本书的其余部分写得尽可能地清楚,以适合非程序员来理解,并且每章的引言和小结部分应该所有人都能掌握。
阅读本书的先决条件
为了能毫无阻碍地阅读本书,您应该对Perl编程和Web设计有一定的了解。具有用Perl编写CGI应用程序的经验的任何程序员应该具有利用本书原则优势的必须的背景。没有Web经验的Perl程序员可能需要对HTML进行熟悉。没有编程经验的HTML设计者可能在开始处理示例之前对Perl的知识要进行补充。
另外,如果您是PHP和ebXML(在此插入您最喜欢的语言和XML变种)的高手,并且想转到Perl,那么您会发现所有事都相当熟悉。如果您想用Perl和XML做一番工作,您不需要从本质上了解HTML的所有东西,从XML观点来看,示例是很好的选择,并且第三部分“面向未来的解决方案”正是您所需要的。
本书的组织
本书分为三个部分,包括存在的问题、解决方案和未来Web应用程序开发的方向。第一部分“存在的问题”定义了Web应用程序设计时遇到的一些问题,它是为不了解Perl的技术型读者设计的。对程序员,第一部分(包括第1~6章)最好用于确定您所遇到的问题或可能遇到的问题。对决策者,它提供了对Web应用程序设计者从开始配置到多年实现过程中遇到的问题的概览。
第二部分“解决方案”(包括第7~15章),主要为Perl程序员在一个Web应用程序设定中解决问题提供帮助。这些可能是您正在寻找的解决方案:改善性能,创建快速原型,添加更多的模块性,取悦网站设计者和测试网站性能。如果您认为您已经覆盖了所有这些基本情况,阅读第一部分,来重新发现问题。
第三部分“面向未来的解决方案”(包括第16~21章),是您在解决前两部分问题之后的可能情况。XML、SOAP、WAP、WML、DOM、XHTML、UDDI和WSDL都在此出现。群集、反编译和多重记录集合都非常容易让人混淆,所以要仔细研究其原理。

作者简介

(美)Chris Radcliff:暂无简介

译者简介

王爱国 周丽萍 等:暂无简介

译者序

Perl是Practical Extraction and Reporting Language的缩写。SUN微系统公司(http://soldc. sun.com)曾面向广大开发人员进行过一个在线调查“您使用什么语言来开发基于Web的客户端应用程序?”,结果显示:Perl(62.1%)、JSP(12.5%)、PHP(8.7%)、C/C++(7.1%)、ASP(5.7%)、其他(3.7%)。不管这个结果是否准确,它确实说明了Perl语言在Web开发上的流行性。
Perl 编程语言的设计者 Larry Wall把Perl称为后现代语言,它的目的不是要推出一种新的风潮,而是集各种语言的优势,解决实际问题。Perl强大的功能、简洁的语法,使它受到了广大程序员的特别喜爱,从而成为一种非常流行的工具。使用Perl开发出的应用程序数以万计,公共代码的Perl库函数覆盖了计算机的各个领域,成为其他语言所无法比拟的一个资源,这些库函数都可以在www.cpan.org找到。
从语言功能与性能来看,Perl与任何一种现代语言相比都毫不逊色,这主要表现在:快速的开发过程、极强的可移植性、极丰富的语言功能和文本处理能力、高超的性能、对OOP的强大支持、与C/C++的接口和非常方便、极为丰富的函数库等等。
Perl很优秀、实用,并且已经被广泛应用在各个方面,特别是在互联网上。上述SUN微系统公司的调查就很好地证明了这一点。
本书是关于提高Web应用程序性能的很好的参考资料。我们在拿到这本书之后,就被书中的内容吸引住了。我们原来在Web性能改善方面比较模糊的地方,在本书中都找到了答案。我们对这本书总的感觉就是实用、易读。
本书独特的安排形式—从基本到高级,从现在到未来,从总体上挖掘性能问题的根源,并有针对性地提出各种解决方案。本书将复杂的主题分解为容易处理的各个小节,这种组织形式有助于读者快速找到自己所需要的部分。
我们相信,本书不仅对Perl面向Web应用的入门者有帮助,对于那些熟悉Perl和Web编程的人们,当他们遇到困难时,翻阅本书,一定会体会到“山重水尽疑无路,柳暗花明又一村”的感觉。
全书由王爱国、周丽萍、李为、王大用、张非非、陈立文、从亚丽、崔玉宝、张中、何镜、高松、叶小松、李林、张巧丽、蒋华、施平安、张勇、鲁金贵等进行翻译,前导工作室全体工作人员共同完成了本书的翻译,录排,校对等工作。本书最后由王爱国、周丽萍统稿。由于时间仓促,且译者的水平有限,在翻译过程中难免会出现一些错误,请读者批评指正。
如果您在阅读中碰到了什么问题,请同前导工作室联系:reader_service@263.net。我们会尽力解决您的问题。

2001年10月

图书目录

第一部分  存在的问题
第1章  不可预期的网络流量问题 1
1.1  过时的网站 1
1.1.1  macadamia的故事 1
1.1.2  评估宕机的费用 4
1.1.3  提前准备的费用 4
1.2  突然的流量增加 4
1.2.1  名声和Slashdot效应 5
1.2.2  其他名声 5
1.3  累积增加 6
1.3.1  网络效应 6
1.3.2  网络日志指示器 6
1.3.3  估计满载的时间 7
1.4  Web扩展和新设备 8
1.4.1  Web规模每8个月翻一番 8
1.4.2  WML和慢速连接 8
1.4.3  XML和自动化请求 9
1.5  小结 10
第2章  不理想的预算和计划 11
2.1  决策慢而需求急 11
2.1.1  前进的重要性 12
2.1.2  评估新技术 12
2.1.3  处理不可预期的决定 13
2.2  预算少而目标大 14
2.2.1  为核心目标让出空间 14
2.2.2  确定预期目标 15
2.2.3  直到演示 15
2.3  无用的帮助 16
2.3.1  处理遗留系统 16
2.3.2  委托Web开发 16
2.3.3  让观众参与 17
2.4  小结 17
第3章  网站设计和应用程序设计 18
3.1  图像设计者的需求 18
3.1.1  一致的视觉和感觉 19
3.1.2  循环HTML设计 19
3.2  程序员的需求 20
3.2.1  干净的代码 21
3.2.2  模块化 22
3.2.3  未来的阻力 23
3.3  所有人的需求 23
3.3.1  短开发周期 24
3.3.2  清晰的劳动分工 24
3.3.3  其他因素 25
3.4  小结 25
第4章  原型和实际网站 26
4.1  Perl快速原型设计 26
4.1.1  Perl的公共任务模块 27
4.1.2  大量可用的Perl CGI 28
4.1.3  其他实现方法 28
4.2  Perl CGI的性能 29
4.2.1  一次性任务 29
4.2.2  Perl进程的内存痕迹 30
4.2.3  编译的费用 30
4.3  小结 31
第5章  基于体系结构的性能损失 32
5.1  CGI的本性 32
5.1.1  每个请求一个进程 33
5.1.2  与GIMP或Word比较 34
5.2  数据库的本性 34
5.2.1  太多的用户 35
5.2.2  CGI与数据库连接的理论限制 35
5.3  性能测试的性质 36
5.3.1  手工测试 36
5.3.2  内建性能工具 37
5.4  小结 37
第6章  经常忽视的问题 38
6.1  遗留应用程序 38
6.1.1  基于终端的主机应用程序 38
6.1.2  自定义的应用程序 39
6.2  数据库连接和许可证 39
6.2.1  微软的Web观点 40
6.2.2  MySQL的 Web观点 41
6.3  B2B的自动化 42
6.3.1  在线集成 42
6.3.2  纵向集成 43
6.4  小结 43
第二部分 解 决 方 案
第7章  Perl语言的Web开发 45
7.1  任何程序员都可以是Perl程序员 46
7.1.1  具有C背景的程序员 46
7.1.2  具有PHP背景的程序员 47
7.1.3  非程序员 49
7.2  Perl程序员之外的其他人员 50
7.2.1  系统管理员 50
7.2.2  分析员 51
7.2.3  数据库管理员 52
7.3  现有的大量Web代码 52
7.3.1  CGI资源索引 53
7.3.2  PerlMonks 53
7.3.3  SlashCode 53
7.4  标准CGI的例子 54
7.4.1  通用SQL查询处理器 54
7.4.2  用CGI.pm对表单访问 54
7.4.3  用正则表达式检查变量 57
7.4.4  用DBI.pm访问数据库 58
7.4.5  错误处理 58
7.5  系统管理的例子 59
7.5.1  宕机记录和通知 59
7.5.2  用LWP访问URL 62
7.5.3  用正则表达式查找字符串 62
7.5.4  通过Email或即时消息通知 63
7.5.5  日志结果 64
7.6  文本处理的例子 64
7.6.1  宕机记录分析 65
7.6.2  逐行语法分析 67
7.6.3  建立一个结果散列表 67
7.6.4  结果写为HTML 68
7.6.5  记录结果总结 68
7.7  小结 69
第8章  性能之谜 70
8.1  程序运行时 71
8.1.1  编译时间更长 71
8.1.2  磁盘输入/输出太慢 72
8.1.3  数据结构初始化占用时间 72
8.2  一般优化的效果 73
8.2.1  优化会增加开发时间 73
8.2.2  一个例外:XS优化模块 74
8.3  Perl和C的区别 74
8.3.1  C CGI还是慢 75
8.3.2  C程序优化不是自动的 75
8.3.3  C程序仍与数据库连接 76
8.4  令人迷惑的基准程序 77
8.4.1  基准测试程序只检测运行态 77
8.4.2  没有编译时的内在基准测试程序 79
8.4.3  连接时间的后果 80
8.4.4  数据库基准测试程序需要不同的环境 80
8.5  小结 82
第9章  持续性的力量 83
9.1  不要退出 83
9.1.1  再看GIMP和Word 84
9.1.2  事件循环 85
9.2  Web应用程序作为单独插件 85
9.2.1  Web服务器API 86
9.2.2  Apache API、NSAPI和ISAPI 86
9.2.3  线程化和Perl 5.6 87
9.3  Web应用程序在模块化程序中 88
9.3.1  基于子程序的执行过程 88
9.3.2  集成电路式程序的缺陷 89
9.4  Web应用程序作为持续性分割程序 89
9.4.1  再谈子程序 91
9.4.2  CGI的兼容性 91
9.4.3  变量、对象和内存问题 91
9.5  更有力的工具—群集、预缓存和平衡 92
9.5.1  群集应用程序引擎 93
9.5.2  预缓存模块 93
9.5.3  预缓存数据结构 94
9.5.4  跨引擎的负载平衡 94
9.6  小结 95
第10章  Perl持续性工具 97
10.1  mod_perl 97
10.1.1  mod_perl的体系结构 98
10.1.2  开放的源代码 98
10.1.3  与Apache紧密结合 99
10.1.4  广大用户群 99
10.1.5  面向对象编程 99
10.2  FastCGI 100
10.2.1  FastCGI的体系结构 100
10.2.2  熟悉的CGI方式的代码 101
10.3  VelociGen 101
10.3.1  VelociGen的体系结构 102
10.3.2  缓存和群集 102
10.3.3  完全CGI兼容 103
10.4  PerlEx 103
10.4.1  PerlEx的体系结构 104
10.4.2  ASP风格的编程 104
10.5  小结 104
第11章  持续性产生的问题 106
11.1  嵌套的子程序和变量范围 106
11.1.1  my关键词 106
11.1.2  变量错误 110
11.1.3  再看子程序和欺骗 113
11.1.4  使用警告捕捉异常行为 116
11.2  分叉、外部程序和速度杀手 116
11.2.1  外部程序和分叉进程 116
11.2.2  非有意分叉的进程 118
11.2.3  发现速度杀手 121
11.3  缓存 121
11.3.1  循环引用 121
11.3.2  示例: XML::DOM对象 122
11.4  小结 123
第12章  减少开发时间的环境 125
12.1  嵌入Perl 到HTML或 XML中 125
12.1.1  Hello World 125
12.1.2  采用Web方式 126
12.1.3  模板和代码分离 127
12.2  与CGI.pm方式比较 127
12.2.1  再看SQL查询处理器 127
12.2.2  处理表单变量 131
12.2.3  查询数据库 131
12.2.4  在HTML中格式化数据 132
12.3  HTML::Mason 133
12.3.1  改变查询处理器程序 133
12.3.2  划分Perl程序 136
12.3.3  使用外部程序组件 137
12.3.4  显示内联变量 138
12.3.5  优点和缺点 139
12.4  EmbPerl 139
12.4.1  改变查询处理器程序 139
12.4.2  划分Perl程序 142
12.4.3  表单变量 142
12.4.4  优点和缺点 143
12.5  Apache::ASP 143
12.5.1  改变查询处理器程序 143
12.5.2  划分Perl程序 146
12.5.3  表单变量 147
12.5.4  优点和缺点 147
12.6  Perl Server Page 148
12.6.1  改变查询处理器程序 148
12.6.2  划分Perl程序 151
12.6.3  显示内联变量 151
12.6.4  使用标准PSP标记 151
12.6.5  声明新的PSP标记 152
12.6.6  使用外部组件 153
12.6.7  优点和缺点 153
12.7  嵌入的性能问题 153
12.7.1  开销增加 154
12.7.2  没嵌入的情况 154
12.8  小结 155
第13章  在Perl应用程序中使用模板 156
13.1  模板HTML和图形编辑器 156
13.1.1  与HTML无关 157
13.1.2  图形编辑器对模板的效果 158
13.1.3  最好的防御:社会工程 159
13.2  在网站上应用模板 160
13.2.1  单一模板的情况 160
13.2.2  多模板 161
13.2.3  动态模板 162
13.3  使用PSP的简单模板 162
13.3.1  使用 <template>标记 163
13.3.2  <tag>标记和page.psp 模板 165
13.3.3  增强模板 167
13.4  自动化模板更新 167
13.4.1  一个上载应用程序的模板 168
13.4.2  接受文件上载 169
13.4.3  检查新模板 171
13.4.4  新模板通知 172
13.5  CPAN上的模板模块 174
13.5.1  HTML::Template 175
13.5.2  Text::Template 175
13.5.3  其他模板模块 176
13.6  使用模板的性能问题 176
13.7  小结 178
第14章  数据库支持的Web站点 179
14.1  为Web加速DBI 179
14.1.1  使用Apache::DBI 179
14.1.2  准备带占位符的语句 181
14.1.3  准备缓存声明 183
14.1.4  检索数据集 184
14.1.5  绑定结果列 184
14.2  Web模型化的SQL语句 185
14.2.1  内联和外联 186
14.2.2  其他昂贵的查询 187
14.2.3  文本搜索 188
14.3  为提高Web性能管理数据库 189
14.3.1  非规范化数据表 189
14.3.2  检索连接的域 191
14.3.3  创建快照 192
14.3.4  视图和快照 192
14.4  MySQL示例 193
14.4.1  数据库支持的Web论坛 194
14.4.2  用占位符缓存显示查询 194
14.4.3  全文搜索 197
14.5  不需数据库的情况 202
14.5.1  用户参数选择 202
14.5.2  基于文档的数据 203
14.5.3  用户状态管理 203
14.5.4  Apache::Session 204
14.6  小结 205
第15章  测试站点性能 206
15.1  创建一个有用的测试 206
15.1.1  发现使用模式 206
15.1.2  使用代理数据 207
15.1.3  估计站点流量 208
15.2  对 ApacheBench的基本负载模拟 208
15.2.1  配置ApacheBench 209
15.2.2  模拟一个简单路径 210
15.2.3  比较多个简单路径 211
15.2.4  比较多个复杂路径 214
15.3  用VeloMeter进行图形比较 216
15.3.1  配置代理程序 216
15.3.2  日志文件配置 217
15.3.3  比较设置 218
15.4  模拟站点超载 219
15.4.1  测试基线性能 219
15.4.2  查处故障点 220
15.4.3  修复后再测试 220
15.4.4  测试实际站点 220
15.5  小结 221
第三部分 面向未来的解决方案
第16章  XML和内容管理 223
16.1  XML::Simple模块 223
16.1.1  简单XML语法分析 224
16.1.2  不用了解XML细节 225
16.1.3  XML::Simple的缺陷 227
16.2  生成XML接口的工具 229
16.2.1  XML::Parser和 Expat 229
16.2.2  XML::DOM 229
16.2.3  其他XML工具 230
16.3  一个基于XML的发布系统的例子 230
16.3.1  简单图书格式 230
16.3.2  XML::Simple模板 232
16.3.3  发布成HTML 233
16.3.4  转换模板 234
16.3.5  全文搜索 237
16.4  小结 241
第17章  面向无线设备发布XML 242
17.1  面向无线Web的无线标识语言WML 242
17.1.1  WML和未来的标准 242
17.1.2  有关面向无线设备的内容 244
17.1.3  给WML加模板 245
17.2  多主页文档 246
17.2.1  用PATH_INFO解耦文档名称 247
17.2.2  利用PATH_INFO的发布程序 247
17.2.3  添加目录处理器 249
17.2.4  再谈WML 249
17.3  小结 250
第18章  XML作为B2B的接口 251
18.1  B2B的例子 251
18.1.1  交易厅 251
18.1.2  Web站点内容镜像 252
18.1.3  内容整合 252
18.2  XML-RPC的实现 253
18.2.1  远程过程调用 253
18.2.2  XML-RPC接口 254
18.3  用SOAP实现 254
18.3.1  SOAP::Lite 255
18.3.2  SOAP::Lite 服务器 255
18.3.3  SOAP::Lite客户端 256
18.4  小结 258
第19章  Web服务 259
19.1  一个旅行者的故事 259
19.2  圣杯:自动化 260
19.2.1  HTML的问题 261
19.2.2  屏幕橡皮擦 261
19.2.3  除了屏幕橡皮擦之外 262
19.3  SOAP和Web服务 262
19.3.1  现有的Web服务 262
19.3.2  开放系统为Web服务 263
19.3.3  把方法群集为有用的形式 263
19.4  WSDL和UDDI 264
19.4.1  WSDL标准 264
19.4.2  UDDI目录 264
19.5  小结 265
第20章  定制Perl方案 266
20.1  负载平衡和群集 266
20.1.1  外部负载平衡 266
20.1.2  基于Perl的负载平衡 267
20.1.3  基于Perl的群集 268
20.1.4  基于Perl的同步 268
20.2  DBI和高级数据集 269
20.2.1  DBIx::Recordset 269
20.2.2  DBD::Multiplex 270
20.3  小结 270
第21章  Perl 6及其未来 272
21.1  从Perl 5到Perl 6的迁移 272
21.1.1  Perl编译器 272
21.1.2  Perl 6反编译器 273
21.2  语言无关的Perl 273
21.2.1  从Java到Perl 274
21.2.2  内联模块 274
21.3  Perl 6性能改善 274
21.3.1  编译独立的程序 275
21.3.2  Perl到C编译 275
21.4  小结 276
术语表 277

教学资源推荐
作者: [美] 罗伯特·W. 塞巴斯塔(Robert W. Sebesta) 著
作者: 苏俊
作者: 郭文夷 等编著
作者: [美]布兰德利·N. 米勒(Bradley N. Miller) 大卫·L. 拉农(David L. Ranum) 朱莉·安德森(Julie Anderson) 著
参考读物推荐
作者: Dharma Shukla;Bob Schmidt
作者: [日]牧野 浩二(Koji Makino),[日]西崎 博光(Hiromitsu Nishizaki) 著
作者: 王希海 望岳 吴海亮 等著