php结合具体应用的yaml配置实例如下
Php/Js/Shell/Go jack 2010-3-1 15:02
actInit.yaml
225: { type: 225, total: 60, daylimit: { 2010-1-28: 20, 2010-1-29: 20, 2010-1-30: 20, 2010-2-01: 20 } }
226: { type: 226, total: 60, daylimit: { 2010-1-28: 20, 2010-1-29: 20, 2010-1-30: 20, 2010-2-01: 20 } }
226: { type: 226, total: 60, daylimit: { 2010-1-28: 20, 2010-1-29: 20, 2010-1-30: 20, 2010-2-01: 20 } }
yaml_prase.php
<?php
require_once "spyc.php";
$content = @file_get_contents("./actInit.yaml");
$yaml = Spyc::YAMLLoad($content);
print_r( $yaml );
?>
require_once "spyc.php";
$content = @file_get_contents("./actInit.yaml");
$yaml = Spyc::YAMLLoad($content);
print_r( $yaml );
?>
输出array的结果如下,符合多维数组的输出要求:
Array
(
[225] => Array
(
[type] => 225
[total] => 60
[daylimit] => Array
(
[2010-1-28] => 20
[2010-1-29] => 20
[2010-1-30] => 20
[2010-2-01] => 20
)
)
[226] => Array
(
[type] => 226
[total] => 60
[daylimit] => Array
(
[2010-1-28] => 20
[2010-1-29] => 20
[2010-1-30] => 20
[2010-2-01] => 20
)
)
)
<?php
require_once "spyc.php";
$content = @file_get_contents("./actInit.yaml");
$yaml = Spyc::YAMLLoad($content);
print_r( $yaml );
?>
require_once "spyc.php";
$content = @file_get_contents("./actInit.yaml");
$yaml = Spyc::YAMLLoad($content);
print_r( $yaml );
?>
house:
family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }
Array
(
[house] => Array
(
[family] => Array
(
[name] => Doe
[parents] => Array
(
[0] => John
[1] => Jane
)
[children] => Array
(
[0] => Paul
[1] => Mark
[2] => Simone
)
)
[address] => Array
(
[number] => 34
[street] => Main Street
[city] => Nowheretown
[zipcode] => 12345
)
)
)
family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }
Array
(
[house] => Array
(
[family] => Array
(
[name] => Doe
[parents] => Array
(
[0] => John
[1] => Jane
)
[children] => Array
(
[0] => Paul
[1] => Mark
[2] => Simone
)
)
[address] => Array
(
[number] => 34
[street] => Main Street
[city] => Nowheretown
[zipcode] => 12345
)
)
)
阅读全文
http://blog.sina.com.cn/s/blog_4a654272010007d1.html
阅读全文
阅读全文
PHP chr() 函数的一些在串口编程里面需要的备用
Php/Js/Shell/Go jack 2010-2-28 23:37
来源:
http://www.w3school.com.cn/php/func_string_chr.asp
八进制为什么以0开头,十六进制为什么以0X开头?这个是计算机编程语言里面的约定。大部分计算机高级语言涉及到这里都是遵循一样的标准,以便于区分。
马上上手:
注释:ascii 参数可以是十进制、八进制或十六进制。通过前置 0 来规定八进制,通过前置 0x 来规定十六进制。
<?php
echo chr(52);//十进制没有什么开头
echo chr(052);//八进制以0开头
echo chr(0x52);//十六进制就以0x开头
?>输出:
4
*
R
为此,同样的52输出不同的结果字母,看是简单,还是仍然需要注意一下,偶尔会犯大错的,呵呵!
来源:http://www.39g.com/html/kaifa/262/2009/10/011415616641.htm
阅读全文
阅读全文
<?php
$user = ""; //数据库用户名
$password = "";//数据库密码
$db_name = "i";//数据库名
$link = mysql_connect("localhost:3306",$user,$password);
mysql_select_db("$db_name",$link);
echo "<p>正在清空数据库,请稍等....<br>";
$result=mysql_query("SHOW tables",$link);
while ($currow=mysql_fetch_array($result)) {
mysql_query("drop TABLE IF EXISTS $currow[0]");
echo $currow[0]."<br>";
}
echo "<br>恭喜你清理MYSQL成功<br>";
?>
$user = ""; //数据库用户名
$password = "";//数据库密码
$db_name = "i";//数据库名
$link = mysql_connect("localhost:3306",$user,$password);
mysql_select_db("$db_name",$link);
echo "<p>正在清空数据库,请稍等....<br>";
$result=mysql_query("SHOW tables",$link);
while ($currow=mysql_fetch_array($result)) {
mysql_query("drop TABLE IF EXISTS $currow[0]");
echo $currow[0]."<br>";
}
echo "<br>恭喜你清理MYSQL成功<br>";
?>
阅读全文
本机:windows XP
VM6:CentOS5.5
Step1:本机 ipconfig /all ,获得ip,子网掩码,网关和DNS。
Step2:填入CentOS5.5的network,如下图。

#IP要是整冲突了,我把你手剁了!!!
Step3:执行下面的命令
echo -e "nameserver 首选DNS\nnameserver 备用DNS" >> /etc/resolv.conf
如,
echo -e "nameserver *.*.*.*\nnameserver *.*.*.*" >> /etc/resolv.conf
Step4:ping baidu.com看是否能通讯
如果能,说明设置正确;如果不能,说明echo那条命令输入错误,比如 -e和后面的双引号之间要有一个空格。
如果命令输入错了,就执行下面的命令,覆盖一下,
echo -e "nameserver 202.106.0.20\nnameserver 203.196.0.6" > /etc/resolv.conf
现在只是临时能上网~~虚拟机重启后便不能了,还需要更改一个文件~
Step5:
ls /etc/sysconfig/network*
vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加,如下内容(三行),
IPADDR=*.*.*.*
NETMASK=*.*.*.*
GATEWAY=*.*.*.*
#数字自己填,你不会真的给我写上星星吧,当心你的手指头 _ _!
Step6:重启虚拟机,可以上网了!
VM6:CentOS5.5
Step1:本机 ipconfig /all ,获得ip,子网掩码,网关和DNS。
Step2:填入CentOS5.5的network,如下图。
#IP要是整冲突了,我把你手剁了!!!
Step3:执行下面的命令
echo -e "nameserver 首选DNS\nnameserver 备用DNS" >> /etc/resolv.conf
如,
echo -e "nameserver *.*.*.*\nnameserver *.*.*.*" >> /etc/resolv.conf
Step4:ping baidu.com看是否能通讯
如果能,说明设置正确;如果不能,说明echo那条命令输入错误,比如 -e和后面的双引号之间要有一个空格。
如果命令输入错了,就执行下面的命令,覆盖一下,
echo -e "nameserver 202.106.0.20\nnameserver 203.196.0.6" > /etc/resolv.conf
现在只是临时能上网~~虚拟机重启后便不能了,还需要更改一个文件~
Step5:
ls /etc/sysconfig/network*
vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加,如下内容(三行),
IPADDR=*.*.*.*
NETMASK=*.*.*.*
GATEWAY=*.*.*.*
#数字自己填,你不会真的给我写上星星吧,当心你的手指头 _ _!
Step6:重启虚拟机,可以上网了!
成功的人生,首先要找到做人做事的起点,我们可以把这个起点称之为“1”。这个“1”,包括经济意义上的“1”和社会意义上的“1”。经济意义上的“1”,就是俗称的“第一桶金”,是干干净净、结结实实的本钱。社会意义上的“1”,就是做人的本份、做人的良知和常识。经济意义上的“1”好找,找到以后还可以添上若干个“0”,积累巨大的财富。但是社会意义上的“1”很难守住,一旦守不住,就会丢掉本份,迷失本性,忘了自己是谁,忘了自己从哪里来,这就危险了。人是会随着财富的增长、身份的变化有所改变的,但有些常理、本份的东西永远不应改变。
阅读全文
阅读全文
众所周知,IT应用即是企业业务核心。如今,有90%的关键性业务处理是通过IT系统来完成的。在整体业务的背后,如果没有IT应用程序来驱动每个业务的进行,那你根本就不可能进行创建、下订单,送货,雇佣雇员或进行记账的任何一个行为了。因此,我们可以很清楚地看到IT应用和质量、性能对于业务交易是至关重要的。
阅读全文
阅读全文
我想显示1到5的所有数字,以下代码可以
shell中循环取出文件中每一行赋予一变量的问题,試試:
阅读全文
#!/bin/sh
for i in 1 2 3 4 5
do
echo $i
done
那么我想显示1到100的数字呢。用for 循环该怎么写?for i in 1 2 3 4 5
do
echo $i
done
#!/bin/sh
for i in `seq 1 100`
do
echo $i
done
for i in `seq 1 100`
do
echo $i
done
shell中循环取出文件中每一行赋予一变量的问题,試試:
cat a.txt | while read aa
do echo $aa
done
do echo $aa
done
阅读全文
http://www.eb163.com/club/thread-1708-1-1.html
1.PID是一种闭环控制系统,根据控制量的实际值与设定的偏差来计算下一步的控制量;P使输入与输出成一种比例关系,I则
是对控制过程偏差的积分,使系统朝偏差减小的方向行进,最终达到消灭静差的目的,D则是用在有滞后和较大惯性的系统控
制中,而温度控制就是这样的,微分项可以“预测”误差变化的趋势,所以减小超调、消除震荡就靠它了。
2.算法选用位置式,数据类型用unsigned int
很多资料上都推荐增量式,但这样一来必须选用float;用unsigned int的话,如果温差的差变化不大,大多数情况积分
项会被省咯,用定点数,则就得用double。
而位置式则无此问题,个人理解,增量式积分在最终输出项了,即先乘积分系数,后积分,位置式则相反,所以选用位
置式用定点数损失不大。
51单片机不适合用float、double;资源消耗太大了。
3.要想使波动范围小,那么数据输入精度非常重要
如果输入的温度值精度为1度,想达到 -1度的控制精度,是不可能的,最少也得0.1度左右,有些资料推荐在计算前给温
度值*10,输出时再/10,这样做基本没什么作用,仅仅是方便了计算;基于温差变化而计算,若迟迟得不到温差变化,又怎
么能计算呢。
4.温度控制的范围也很重要
也就是在用unsigned int、用定点数时,若控制的温度范围很大时,计算时会产生溢出,若选好范围即可解决,如控制
的范围为0-300度,其实根据位置式公式计算,温差在40度左右系统才会减小输出功率,那么我们在温差在40度之内后才开始
用PID控制,之前全功率加热,这样减小了数据量,也减轻了无效的计算,当然不能忘了温差为负数时,也要限制温差计算范
围,范围之外的关闭输出。
5.参数的整定很累人
一定要按先比例后积分,再微分,同时要作好记录、分析,不要想着为节省三个系数都先给个经验值,再同时调,结果
很可能欲速则不达,本人已经有过教训了;最后当你对系统的加热过程越了解,也就越接近完成了。
PID的改良算法有很多,必要时要采用。
晓奇大侠是这方面的高手,他有一篇文章关于PID对我帮助很大,非常感谢他的帮助,我这里说的那里基本都说过。呵呵。
欢迎大家批评指正,我对PID也是只知皮毛,了解也很肤浅。
是对控制过程偏差的积分,使系统朝偏差减小的方向行进,最终达到消灭静差的目的,D则是用在有滞后和较大惯性的系统控
制中,而温度控制就是这样的,微分项可以“预测”误差变化的趋势,所以减小超调、消除震荡就靠它了。
2.算法选用位置式,数据类型用unsigned int
很多资料上都推荐增量式,但这样一来必须选用float;用unsigned int的话,如果温差的差变化不大,大多数情况积分
项会被省咯,用定点数,则就得用double。
而位置式则无此问题,个人理解,增量式积分在最终输出项了,即先乘积分系数,后积分,位置式则相反,所以选用位
置式用定点数损失不大。
51单片机不适合用float、double;资源消耗太大了。
3.要想使波动范围小,那么数据输入精度非常重要
如果输入的温度值精度为1度,想达到 -1度的控制精度,是不可能的,最少也得0.1度左右,有些资料推荐在计算前给温
度值*10,输出时再/10,这样做基本没什么作用,仅仅是方便了计算;基于温差变化而计算,若迟迟得不到温差变化,又怎
么能计算呢。
4.温度控制的范围也很重要
也就是在用unsigned int、用定点数时,若控制的温度范围很大时,计算时会产生溢出,若选好范围即可解决,如控制
的范围为0-300度,其实根据位置式公式计算,温差在40度左右系统才会减小输出功率,那么我们在温差在40度之内后才开始
用PID控制,之前全功率加热,这样减小了数据量,也减轻了无效的计算,当然不能忘了温差为负数时,也要限制温差计算范
围,范围之外的关闭输出。
5.参数的整定很累人
一定要按先比例后积分,再微分,同时要作好记录、分析,不要想着为节省三个系数都先给个经验值,再同时调,结果
很可能欲速则不达,本人已经有过教训了;最后当你对系统的加热过程越了解,也就越接近完成了。
PID的改良算法有很多,必要时要采用。
晓奇大侠是这方面的高手,他有一篇文章关于PID对我帮助很大,非常感谢他的帮助,我这里说的那里基本都说过。呵呵。
欢迎大家批评指正,我对PID也是只知皮毛,了解也很肤浅。
零、linux使用grep删除空行:
一、Vscode和Sublime的 正则一样的,选中.*那个正则标识,然后输入:
^[ \t]*\n #表示以空格或者\t制表符0次或者多次后并且还是以\n换行符结尾的这些内容给找出来
^[ \t]*\n
^\s*\n #输入时注意框里可能$前面有一个空格,导致无法匹配到空行。此问题经实践多次发现。
^\s*$\n
Macbook上Vscode采用option+command+F,打开查找。
VS Code插件介绍(七)懒人插件-Hungry Delete & hungry-backspace,注意只是批量删除不要的空行:
Hungry Delete ,作者jasonlhy 目前下载量1000都不到。
Hungry-backspace,作者eklemen,目前下载量只有一点点。
这两个插件功能一样,绑定按键都有冲突,需要的同学,只要选其一安装就行了。
安装:
请搜索Hungray Delete或者hungry-backspace
配置:
两个插件都不需要配置
使用:
使用上两个略有区别。 除了直接按backspace按键自动清理空白区域之外,Hungry Delete多了一个Ctrl+backspace(Win/Linnux),Alt+Backspace(Mac)的功能。具体使用,大家可以自己玩下。
二、[实践OK]vim刪除空白行,刪除沒有內容的空行,刪除包含有空格組成的空行。
vim中:
:g/^[ \t]*\n/d
和:
:%s/^[ \t]*\n//g
的区别是?
答:
这两个 Vim 命令都涉及到删除空白行的操作,但使用了不同的命令和方法:
1. `:g/^[ \t]*\n/d`
这个命令使用了全局(`g`)命令,对于匹配正则表达式 `^[ \t]*\n` 的每一行执行删除操作(`d`)。正则表达式的含义是以零个或多个空格或制表符(`[ \t]*`)开头,后面跟一个换行符(`\n`)。因此,这个命令会删除所有空白行。
2. `:%s/^[ \t]*\n//g`
这个命令使用了替换(`%s`)命令,对于匹配正则表达式 `^[ \t]*\n` 的部分执行替换操作。替换为空字符串,表示将匹配的内容删除。正则表达式的含义与上面一样,匹配以零个或多个空格或制表符开头,后面跟一个换行符的内容。`%` 符号表示对整个文档执行替换操作,而 `g` 标志表示全局替换,会替换所有匹配。
总结区别:
- `:g/^[ \t]*\n/d` 使用了全局删除命令,逐行删除所有空白行。
- `:%s/^[ \t]*\n//g` 使用了全局替换命令,将匹配的内容替换为空字符串,实际上也是逐行删除所有空白行。
两者的效果是一样的,不同之处在于使用了不同的命令(删除 vs. 替换)。
刪除沒有內容的空行
g/^$/d
刪除包含有空格組成的空行
g/^\s*$/d
除以空格或tab開頭到結尾的空行
g/^[ |\t]*$/d
使用 global 命令删除空白行
Vim命令行模式下的 global 命令会在指定的范围内,标记所有匹配 pattern 的文本行,并对匹配的行上逐行执行 Ex 命令。
匹配空白行的正则表达式可以用 ^\s*$ 表示 ( ^ 表示行首, $ 表示行尾, \s 表示任何空白字符,包括空格、制表符、换页符等, * 表示匹配零次或多次)。
因此,使用 global 命令删除Vim打开文件中所有空白行的命令为 :g/^\s*$/d
三、删除file文件里所有#开头的行和空行并输出处理后的文本内容:
sed 删除空行:
sed '/^$/d' file.txt
abcdef adfd dfdf fdfd ab abc qqq
abcdef adfd dfdf fdfd ab abc qqq
abcdef adfd dfdf fdfd ab abc qqq
遇到一个比较大的文本文件需要去除空行,首先想到的自然是正则表达式。偷懒去网上找了几个删除空行的正则表达式,填到EditPlus里居然都不能用...而且大多数的正则表达式都用到了"\r",也就是回车符,关于"\n"和"\r"的区别我以后再写,今天只是为了记录一个正则表达式。
网上找的不行那就自己编吧,试验了几次最后写出一个能用的:
^[ \t]*\n
解释一下:
1、^表示一行的开头。空行嘛,肯定在一行的开头就是空的...
2、[ \t],"\t"前面还有一个空格。[]表示范围中的字符,里面写入空格和制表符(tab),因为空行可能是由空格和制表符构成。
3、*表示0次或任意次。也就是说这个空行可以没有空格或制表符,也可以有任意个前面[]里的字符。
4、\n就是换行符了。
这样在EditPlus里选择替换,然后勾选正则表达式,输入正则表达式,全部替换即可。不过EditPlus有个小bug,有时候不能一次替换完全,要多按几次"全部替换"才行...
最终写成:
^[ \t\n]*\n
好像这样就能一次全部删除了
方法二:
去掉所有的空行
搜索内容:\n\n
替换内容:\n
Ps:
<font size=2 >dfdfd</font>
可以通过正则表达式:
<font [^>]*>
匹配出来<font size=2 > ,Etc...
一、Vscode和Sublime的 正则一样的,选中.*那个正则标识,然后输入:
^[ \t]*\n #表示以空格或者\t制表符0次或者多次后并且还是以\n换行符结尾的这些内容给找出来
^[ \t]*\n
^\s*\n #输入时注意框里可能$前面有一个空格,导致无法匹配到空行。此问题经实践多次发现。
^\s*$\n
Macbook上Vscode采用option+command+F,打开查找。
VS Code插件介绍(七)懒人插件-Hungry Delete & hungry-backspace,注意只是批量删除不要的空行:
Hungry Delete ,作者jasonlhy 目前下载量1000都不到。
Hungry-backspace,作者eklemen,目前下载量只有一点点。
这两个插件功能一样,绑定按键都有冲突,需要的同学,只要选其一安装就行了。
安装:
请搜索Hungray Delete或者hungry-backspace
配置:
两个插件都不需要配置
使用:
使用上两个略有区别。 除了直接按backspace按键自动清理空白区域之外,Hungry Delete多了一个Ctrl+backspace(Win/Linnux),Alt+Backspace(Mac)的功能。具体使用,大家可以自己玩下。
二、[实践OK]vim刪除空白行,刪除沒有內容的空行,刪除包含有空格組成的空行。
vim中:
:g/^[ \t]*\n/d
和:
:%s/^[ \t]*\n//g
的区别是?
答:
这两个 Vim 命令都涉及到删除空白行的操作,但使用了不同的命令和方法:
1. `:g/^[ \t]*\n/d`
这个命令使用了全局(`g`)命令,对于匹配正则表达式 `^[ \t]*\n` 的每一行执行删除操作(`d`)。正则表达式的含义是以零个或多个空格或制表符(`[ \t]*`)开头,后面跟一个换行符(`\n`)。因此,这个命令会删除所有空白行。
2. `:%s/^[ \t]*\n//g`
这个命令使用了替换(`%s`)命令,对于匹配正则表达式 `^[ \t]*\n` 的部分执行替换操作。替换为空字符串,表示将匹配的内容删除。正则表达式的含义与上面一样,匹配以零个或多个空格或制表符开头,后面跟一个换行符的内容。`%` 符号表示对整个文档执行替换操作,而 `g` 标志表示全局替换,会替换所有匹配。
总结区别:
- `:g/^[ \t]*\n/d` 使用了全局删除命令,逐行删除所有空白行。
- `:%s/^[ \t]*\n//g` 使用了全局替换命令,将匹配的内容替换为空字符串,实际上也是逐行删除所有空白行。
两者的效果是一样的,不同之处在于使用了不同的命令(删除 vs. 替换)。
刪除沒有內容的空行
g/^$/d
刪除包含有空格組成的空行
g/^\s*$/d
除以空格或tab開頭到結尾的空行
g/^[ |\t]*$/d
使用 global 命令删除空白行
Vim命令行模式下的 global 命令会在指定的范围内,标记所有匹配 pattern 的文本行,并对匹配的行上逐行执行 Ex 命令。
匹配空白行的正则表达式可以用 ^\s*$ 表示 ( ^ 表示行首, $ 表示行尾, \s 表示任何空白字符,包括空格、制表符、换页符等, * 表示匹配零次或多次)。
因此,使用 global 命令删除Vim打开文件中所有空白行的命令为 :g/^\s*$/d
三、删除file文件里所有#开头的行和空行并输出处理后的文本内容:
sed 删除空行:
sed '/^$/d' file.txt
abcdef adfd dfdf fdfd ab abc qqq
abcdef adfd dfdf fdfd ab abc qqq
abcdef adfd dfdf fdfd ab abc qqq
遇到一个比较大的文本文件需要去除空行,首先想到的自然是正则表达式。偷懒去网上找了几个删除空行的正则表达式,填到EditPlus里居然都不能用...而且大多数的正则表达式都用到了"\r",也就是回车符,关于"\n"和"\r"的区别我以后再写,今天只是为了记录一个正则表达式。
网上找的不行那就自己编吧,试验了几次最后写出一个能用的:
^[ \t]*\n
解释一下:
1、^表示一行的开头。空行嘛,肯定在一行的开头就是空的...
2、[ \t],"\t"前面还有一个空格。[]表示范围中的字符,里面写入空格和制表符(tab),因为空行可能是由空格和制表符构成。
3、*表示0次或任意次。也就是说这个空行可以没有空格或制表符,也可以有任意个前面[]里的字符。
4、\n就是换行符了。
这样在EditPlus里选择替换,然后勾选正则表达式,输入正则表达式,全部替换即可。不过EditPlus有个小bug,有时候不能一次替换完全,要多按几次"全部替换"才行...
最终写成:
^[ \t\n]*\n
好像这样就能一次全部删除了
方法二:
去掉所有的空行
搜索内容:\n\n
替换内容:\n
Ps:
<font size=2 >dfdfd</font>
可以通过正则表达式:
<font [^>]*>
匹配出来<font size=2 > ,Etc...
通过jQuery发送ajax请求,无论是get方式还是post方式,当前后两次请求的参数完全一样时,浏览器就有可能调用缓存里的数据,最直接的结果就是造成有些操作没有生效的假象。这种情况,我们应该通过下面这个技巧来避免浏览器调用缓存里的内容。
先整理下思路,浏览器之所以调用缓存里的内容,最主要的一点是判定现在要访问的内容和之前的是一样的,那我们解决这个问题的方法就明确了,怎么让前后两次的内容不一样。这里介绍的技巧是为查询请求增加一个随机的参数。
对于get请求:
url = "someurl.php?id=123";url += "&anticache=" + Math.floor(Math.random()*1000)$.get(url);
对于post请求:
parms = { id : "123", anticache : Math.floor(Math.random()*1000)}$.post("someurl.php", parms);
小结
编写脚本的过程中,发现应该为大多数请求添加随机参数,这样可以保证获取数据的实时性和准确性。
法二,加入参数:
jQuery的ajax使用很方面,我常用的有$.ajax,$.get,$.post,但可惜自己一直没有注意到$.get回来的内容会自动缓存,所以在这里记录下:
$.ajax不缓存版:
$.ajax({
type:"GET",
url:'test.html',
cache:false,
dataType:"html",
success:function(msg){
alert(msg);
}
});
由于$.get,$.post,比较简单.这里就不写了.有需要查看手册
當我們設定cache=false時,jQuery在我們每次發出Request時,會補上一個參數"_",而其內容是每次皆不同的亂數,這是Javascript端很常見的迴避Cache技巧
先整理下思路,浏览器之所以调用缓存里的内容,最主要的一点是判定现在要访问的内容和之前的是一样的,那我们解决这个问题的方法就明确了,怎么让前后两次的内容不一样。这里介绍的技巧是为查询请求增加一个随机的参数。
对于get请求:
url = "someurl.php?id=123";url += "&anticache=" + Math.floor(Math.random()*1000)$.get(url);
对于post请求:
parms = { id : "123", anticache : Math.floor(Math.random()*1000)}$.post("someurl.php", parms);
小结
编写脚本的过程中,发现应该为大多数请求添加随机参数,这样可以保证获取数据的实时性和准确性。
法二,加入参数:
jQuery的ajax使用很方面,我常用的有$.ajax,$.get,$.post,但可惜自己一直没有注意到$.get回来的内容会自动缓存,所以在这里记录下:
$.ajax不缓存版:
$.ajax({
type:"GET",
url:'test.html',
cache:false,
dataType:"html",
success:function(msg){
alert(msg);
}
});
由于$.get,$.post,比较简单.这里就不写了.有需要查看手册
當我們設定cache=false時,jQuery在我們每次發出Request時,會補上一個參數"_",而其內容是每次皆不同的亂數,這是Javascript端很常見的迴避Cache技巧
我是回忆未来[向东],我对回忆未来[张宴]的关于nginx那文章有点不同的看法,哈哈,不知道他要是看到这个说法,他会不会。。。,反正都是熟人,咱就写两行了,呵呵:
文章来源:http://blog.s135.com/nginx_php_v5/
我个人回忆未来[向东]认为(认为:当然包含了很主观的看法哈)Nginx性能大概是Apache的1.5倍左右(这个1.5是咋估计出来的呢?我是拍脑袋的咯,哈哈),所谓十倍,我估计(又接着主观了:()是回忆未来[张宴]是把并发数而不是负载能力做为了衡量性能的标准,这里值得探讨,同时注意:单纯并发数如果全是不活动的死连接没有什么意义的. epoll et模式实现简单的http server,每秒能处理11000个请求/s左右,apche如果参数充分优化,也可以达到8000请求/s左右,这个不能算作是nginx的功劳,而是Linux 的内核以及Unix的kqueque的内核的功劳,当然,以我为主,为我所用,无所谓了,瞎侃两句,呵呵.
文章来源:http://blog.s135.com/nginx_php_v5/
我个人回忆未来[向东]认为(认为:当然包含了很主观的看法哈)Nginx性能大概是Apache的1.5倍左右(这个1.5是咋估计出来的呢?我是拍脑袋的咯,哈哈),所谓十倍,我估计(又接着主观了:()是回忆未来[张宴]是把并发数而不是负载能力做为了衡量性能的标准,这里值得探讨,同时注意:单纯并发数如果全是不活动的死连接没有什么意义的. epoll et模式实现简单的http server,每秒能处理11000个请求/s左右,apche如果参数充分优化,也可以达到8000请求/s左右,这个不能算作是nginx的功劳,而是Linux 的内核以及Unix的kqueque的内核的功劳,当然,以我为主,为我所用,无所谓了,瞎侃两句,呵呵.




