1 减少HTTP请求数量 (Minimize HTTP Requests)
tag:content
80%的用户响应时间被花费在前端,而这其中的绝大多数时间是用于下载页面中的图片、样式表、脚本以及Flash这些组件。减少这些组件的数量就可以减少展示页面所需的请求数,而这是提高网页响应速度的关键。
朴素的页面设计当然是减少组件的一种途径,但有没有能兼顾丰富的页面内容和快速的响应速度的方法呢?下面就是一些不错的技巧,能在提供丰富的页面展现的同时,减少Http请求数量:
合并文件,通过把所有脚本置于一个脚本文件里或者把所有样式表放于一个样式表文件中,从而减少Http请求的数量。当不同页面需要应用不同的脚本或样式时,合并这些文件会是一个很大的挑战,不过在发布网站时进行这种合并,将是提高网站响应速度的重要一步。
CSS Sprites是减少图片请求的首选方案。把所有的背景图片合并到一张图中,使用CSS的background-image 和background-position 属性去控制展现恰当的图片区域。
Image maps把多张图片组合成为一张图片。图片的总大小是不变的,但减少Http请求数会提高页面的响应速度。Image maps只能用于图片在网页中相邻的情况,比如导航条。制定image maps中的图片坐标是个很麻烦的过程,而且容易出错。同时给导航使用image maps也并不易读,所以并不推荐使用。
十一、条件语句
格式:
{if(表达式) {语句1;语句2;...}}
{if(表达式){语句1; 语句2...} else {语句1; 语句2;...}}
{if(表达式1){语句1; 语句2...} else if (表达式2){语句1; 语句2;..} else if (表达式2){语句1; 语句2;..} else if (表达式2){语句1; 语句2;..} ... else{语句1; 语句2... }}
注意:if语句是操作必须用花括号括起来。
十二、循环
1.while循环
{while(表达式) {语句1;语句2;...}}
{do{语句1;语句2;...}while(表达式)}
例:
awk '{i = 1; while(i <= NF) {print NF, $i; i++}}' test_awk.txt
注意:i的起始值应从1开始,因为i=0时,$i = $0代表一整行。
2.for循环
例:
awk '{for(i = 1; i < NF; i++) {print $i}}' test_awk.txt
3.循环控制
continue跳出内循环,break跳出外循环
十三、程序控制语句
1.next语句
next语句从输入文件中取出下一行输入,然后从awk的顶部继续执行。
例:
awk '{if($1 ~ /ABC/){next} else{print}}' test_awk.txt
#abc def hic lmn abc
#123 456 1.23 4.5 321
#You are a good boy
#That's a very lovely dog
八、变量
1.数值变量和字符串变量
数值数字可以是整数、浮点数和科学计数法表示的数(如:.723E-1, 3.4e7),字符串则扩在双引号中。
初始化:只要在awk程序中被提到,变量就开始存在,变量可以是一个字符串或一个数字,也可以即是字符串又是数字。变量被设置后就会变成与等号右边那个表达式相同的类型。未经初始化的变量时0或“”
强制类型转换:如果把一个字符串强制转换成数字,方法为:变量名+0;如果要把一个数字转化为字符串方法为:变量名 ""(变量名后跟一个空格和一个空字符串);
2.用户自定义变量
变量名可以是字母,数字和下划线,但不能以数字开头。不用声明变量类型,awk会自动判断。如果变量为初始化,awk会将字符串初变量始化为空字符串,数值变量初始化0;
3.字段变量
新的字段可以通过赋值来创建,字段变量引用的字段如果没有值责备赋值为空串,字段的值发生变化时,awk会以OFS
的值作为字段分隔符重新计算$0变量的值,字段数目最多限制在100以内。
例:awk '{$5 = $3 * 1000 / 2 ; print}" filename
说明:如果不存在第五个字段($5),awk会创建它并将$3 * 1000 / 2的值赋给它,如果存在第五个字段,awk直接将表达式的值赋给它,替换掉原来的内容。
七、比较表达式
1.关系运算符
|
运算符 |
描述 |
|---|---|
|
赋值运算符 |
|
|
= += -= *= /= %= ^= **= |
赋值语句 |
|
逻辑运算符 |
|
|
|| |
逻辑或 |
|
&& |
逻辑与 |
|
正则运算符 |
|
|
~ ~! |
匹配正则表达式和不匹配正则表达式 |
|
关系运算符 |
|
|
< <= > >= != == |
关系运算符 |
|
算术运算符 |
|
|
+ - |
加,减 |
|
* / & |
乘,除与求余 |
|
+ - ! |
一元加,减和逻辑非 |
|
^ *** |
求幂 |
|
++ -- |
增加或减少,作为前缀或后缀 |
|
其它运算符 |
|
|
$ |
字段引用 |
|
空格 |
字符串连接符 |
|
?: |
C条件表达式 |
|
in |
数组中是否存在某键值 |
五.文件中的awk命令
如果awk命令别写到文件里,就要用-f选项指定awk的文件名。后面再加所要处理的输入文件的文件名。awk从缓冲区读入一条记录,接着测试awk文件中的每一条命令,如后对读入的记录执行命令。处理完一条记录后,awk将其丢弃,接着将下一条记录读入缓冲区,依次处理所有记录。
cat test_awk.txt
abc def hic lmn abc
123 456 1.23 4.5 321
ABC Def hIc lmN ABC
ABC Def cih lmN dsf
You are a good boy
That's a very lovely dog
cat shell.awk
/^ABC/{print "hello world "}
{print $1, $3}
例:
awk -f shell.awk test_awk.txt #abc hic #123 1.23 #hello world #ABC cih #hello world #ABC hIc #You a #That's very
说明:awk将第一条记录读入缓冲区,用shell.awk中的命令去处理,首先检查这条记录是不是以ABC开头,如果不是则继续对该条记录执行第二条命令,即打印第一和第三个字段。如果是以ABC开头的,则打印'hello world'和一个换行,然后再执行第二条命令打印第一和第三个字段。执行完第一条记录后,将其丢弃,然后读入第二条记录,执行上述操作。直到所有记录都处理完毕。