转了一圈又回来了,看到你已经书写了 c 程序。其实不用编成php扩展也是一样用的。只需约定好与php交换数据方式就可以了回到正题。在本地缓存远程资源,永远都是必须的,除非你需要极高的实时性两个用户同时查询不同的网站,不会因为代码排队执行需要执行时间而产生延迟 就程序而言,他们是并发的,互不干扰的。 等待产生于:web服务器的并发数、网络系统的并发数、对方的响应能力由浏览器选项卡发出的请求是同一个用户,不属于讨论的范围。测试时请注意,测试时的每个浏览器都必须是从操作系统直接打开的,要与已打开的浏览器没有任何联系。
$fn = date('YmdHi'). .'txt';//取得当前时间,注意没有秒,表示只缓存一分钟
if(! file_exists($fn)) { //缓存文件不存在
//这里是你抓取数据的代码
//假定抓取到的数据保存在变量 $var 中
file_put_contents($fn, '<?php $var = ' . var_export($var) .';'); //保存抓取到的数据
}
include "$fn"; //取得缓存的数据
做个查询数据库内有的直接读取缓存文件 没有的再去抓 当你的库足够大的时候就不再需要每次都去抓了,这个时候要判断缓存文件是否过期即可
我想会不会是session文件锁的缘故?后面的请求是在等待文件锁释放。况且机器配置再差也不至于如此吧?
就程序而言,他们是并发的,互不干扰的。
等待产生于:web服务器的并发数、网络系统的并发数、对方的响应能力由浏览器选项卡发出的请求是同一个用户,不属于讨论的范围。测试时请注意,测试时的每个浏览器都必须是从操作系统直接打开的,要与已打开的浏览器没有任何联系。
响应ajax请求的php程序不能使用文件型的 session,否则会因临时文件锁定而造成排队其他影响响应速度的因素都差不多
你用浏览器访问某些网站不是也能看到明显的延时,有的甚至要刷新几次才能看的到吗?
这个是怎么回事?什么是文件型的session?
每当 session_start(); 时,该文件就被加锁了,直到显式的关闭 session 或程序结束才释放
期间来自 ajax 的请求因为携带了相同的 SessionID,于是就在 session_start(); 处产生等待将 session 存储在数据库里时,就没有这个问题,但须自行书写 session 回调函数,处理的速度也是要慢些的