optimizations.html

来自「BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版」· HTML 代码 · 共 230 行

HTML
230
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD><TITLE>优化</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINKREL="HOME"TITLE="高级Bash脚本编程指南"HREF="index.html"><LINKREL="UP"TITLE="杂项"HREF="miscellany.html"><LINKREL="PREVIOUS"TITLE="将脚本彩色化"HREF="colorizing.html"><LINKREL="NEXT"TITLE="各种小技巧"HREF="assortedtips.html"></HEAD><BODYCLASS="SECT1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">高级Bash脚本编程指南: 一本深入学习shell脚本艺术的书籍</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="colorizing.html"ACCESSKEY="P">前一页</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">33. 杂项</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="assortedtips.html"ACCESSKEY="N">下一页</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="OPTIMIZATIONS">33.6. 优化</A></H1><P>大部分shell脚本在处理不太复杂的问题的时候, 使用的都是小吃店(快速但是并不优雅)的方式. 	  正因为这样, 所以优化脚本的速度并不是一个大问题. 	  考虑一下这种情况, 当脚本正在处理一个重要任务的时候, 	  虽然这个脚本能够处理的很好, 但是它运行的速度实在太慢. 	  在这种情况下, 使用编译语言重写它其实也不是一种很合适的办法. 	  最简单的办法其实就是重写这个脚本执行效率低下的部分. 	  那么, 是否这种办法可以成为处理效率低下的shell脚本的一种原则? 	  </P><P>仔细检查脚本中循环的部分. 因为重复的操作非常耗时. 	  如果有可能的话, 尽量删除掉循环中比较耗时的操作. 	  </P><P>优先使用<AHREF="internal.html#BUILTINREF">内建命令</A>, 		  而不是系统命令. 这是因为内建命令执行得更快, 		  并且在调用时, 一般都不会产生子进程. 	  </P><P>避免使用不必要的命令, 尤其是<AHREF="special-chars.html#PIPEREF">管道</A>中的命令. 	    <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;cat "$file" | grep "$word"  2&nbsp;  3&nbsp;grep "$word" "$file"  4&nbsp;  5&nbsp;#  上面的两行具有相同的效果,   6&nbsp;#+ 但是第二行运行的更快, 因为它不产生子进程. </PRE></FONT></TD></TR></TABLE>	  <AHREF="basic.html#CATREF">cat</A>命令看起来经常在脚本中被滥用. 	  </P><P>使用<AHREF="timedate.html#TIMREF">time</A>和<AHREF="x6756.html#TIMESREF">times</A>工具来了解计算所消耗的时间. 	  可以考虑使用C语言, 甚至是汇编语言来重写时间消耗比较大的代码部分. 	  </P><P>尝试尽量减少文件I/O的操作. 因为Bash在处理文件方面, 		  显得并不是很有效率, 所以可以在脚本中考虑使用更合适的工具, 	   比如<AHREF="awk.html#AWKREF">awk</A>或<AHREF="wrapper.html#PERLREF">Perl</A>. </P><P>使用结构化的思想来编写脚本, 并且按照需求将各个模块组织并紧密结合起来. 	   一些适用于高级语言的优化技术也可以用在脚本上, 	   但是有些技术, 比如, 循环展开优化(loop unrolling), 	   就根本用不上. 关于上面的讨论, 可以根据经验来取舍. </P><P>怎么才能很好的减少脚本的执行时间, 让我们看一个优秀的例子, 	   <AHREF="mathc.html#MONTHLYPMT">例子 12-42</A>. </P></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="colorizing.html"ACCESSKEY="P">前一页</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">首页</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="assortedtips.html"ACCESSKEY="N">下一页</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">将脚本<SPANCLASS="QUOTE">"彩色化"</SPAN></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="miscellany.html"ACCESSKEY="U">上一级</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">各种小技巧</TD></TR></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?