我现在做一个程序,需要用php抓取网页的title,这个过程需要一定的时间,ajax问询php程序,然后再网页中展现。现在遇到一个问题:开启一个页面的时候,程序能执行成功,可开启两个或多个页面的时候,后查询的那个网页就会出现卡死或者延迟执行的情况,这个问题应该怎么解决呢?类似多进程执行?

解决方案 »

  1.   

    这是采集吗?php抓取网页的title,title应该不是经常会变动吧?这样的话按照老徐的说法缓存第一次抓取的结果,以后的ajax查询直接读取缓存就可以了.
      

  2.   

    比如用文件缓存
    $fn = date('YmdHi'). .'txt';//取得当前时间,注意没有秒,表示只缓存一分钟
    if(! file_exists($fn)) { //缓存文件不存在
      //这里是你抓取数据的代码
      //假定抓取到的数据保存在变量 $var 中
      file_put_contents($fn, '<?php $var = ' . var_export($var) .';'); //保存抓取到的数据
    }
    include "$fn"; //取得缓存的数据
      

  3.   

    抓取缓存只是在前面有相同的结果以后才能执行吧,如果两个用户同时查询不同的网站的时候该怎么办呢?那个时候也得调用php程序啊。
      

  4.   

    我猜你是想做个类似代理抓信息的功能吧可以做个缓存对应表 例如 www.sina.com sina.txt
    做个查询数据库内有的直接读取缓存文件 没有的再去抓 当你的库足够大的时候就不再需要每次都去抓了,这个时候要判断缓存文件是否过期即可
      

  5.   

    开启一个页面的时候,程序能执行成功,可开启两个或多个页面的时候,后查询的那个网页就会出现卡死或者延迟执行的情况
    我想会不会是session文件锁的缘故?后面的请求是在等待文件锁释放。况且机器配置再差也不至于如此吧?
      

  6.   

    假如排除你说的这两种可能造成卡死的原因,那么php有没有一种办法能解决这种等待延迟的功能呢?
      

  7.   

    我记得以前看过别人写的 “多线程”php  不过没仔细的拜读,你可以搜索看看
      

  8.   

    续顶吧,还是没有解决!我百度了一下,多数的是用pcntl_fork()做,可浏览器提示要在cli模式下,这是什么东西?
      

  9.   

    转了一圈又回来了,看到你已经书写了 c 程序。其实不用编成php扩展也是一样用的。只需约定好与php交换数据方式就可以了回到正题。在本地缓存远程资源,永远都是必须的,除非你需要极高的实时性两个用户同时查询不同的网站,不会因为代码排队执行需要执行时间而产生延迟
    就程序而言,他们是并发的,互不干扰的。
    等待产生于:web服务器的并发数、网络系统的并发数、对方的响应能力由浏览器选项卡发出的请求是同一个用户,不属于讨论的范围。测试时请注意,测试时的每个浏览器都必须是从操作系统直接打开的,要与已打开的浏览器没有任何联系。
      

  10.   

    对于ajax发过来的请求也是一样的吗?我总是感觉服务器端的php程序接收ajax发过来的请求,是要排队执行的
      

  11.   

    是的对于ajax发过来的请求也是一样的
    响应ajax请求的php程序不能使用文件型的 session,否则会因临时文件锁定而造成排队其他影响响应速度的因素都差不多
    你用浏览器访问某些网站不是也能看到明显的延时,有的甚至要刷新几次才能看的到吗?
      

  12.   

    “响应ajax请求的php程序不能使用文件型的 session,否则会因临时文件锁定而造成排队”
    这个是怎么回事?什么是文件型的session?
      

  13.   

    php 的 session 默认是用文件存放序列化后的 $_SESSION 数组
    每当 session_start(); 时,该文件就被加锁了,直到显式的关闭 session 或程序结束才释放
    期间来自 ajax 的请求因为携带了相同的 SessionID,于是就在 session_start(); 处产生等待将 session 存储在数据库里时,就没有这个问题,但须自行书写 session 回调函数,处理的速度也是要慢些的
      

  14.   

    没有携带session,像你说的,测试的时候为区别开,我开启了不同的浏览器,结果是没有延迟,很完美。当我用chrom浏览器同时开启两个页面的时候就会出现延迟的状况,要不是浏览器等待状态,再就是跳到另外一个网页后要等到前一个页面的title抓取到以后这个页面的title才显示。
      

  15.   

    去看看 jquery ajax的async参数
      

  16.   

    我也遇到 楼主的问题 有木有大牛 知道  我QQ371189605 没有携带session,像你说的,测试的时候为区别开,我开启了不同的浏览器,结果是没有延迟,很完美。当我用chrom浏览器同时开启两个页面的时候就会出现延迟的状况,要不是浏览器等待状态,再就是跳到另外一个网页后要等到前一个页面的title抓取到以后这个页面的title才显示。