代码之家  ›  专栏  ›  技术社区  ›  Norbert Pushparaj Yuvaraj

代码添加正在减慢页面速度

  •  0
  • Norbert Pushparaj Yuvaraj  · 技术社区  · 15 年前

    我的客户订购了另外一个脚本,但是我不知道如何解决这个问题。这张桌子大约有50000行。

     while($stats = mysql_fetch_array($get_stats)) {
      if ($stats['ip'] == gethostbyaddr($stats['ip'])) { // new code
       $is_undef = "Yes";            // causing problems
      } else { $is_undef = "No"; }      // end new code
    
     echo "<tr><td>" . date("d M Y g:i a ", strtotime($stats['date'])) . "</td><td>" .
           $stats['ip'] . "</td><td>" .
              parse_url_domain($stats['ref_url']) . "</td><td>" .
                 $is_undef . "</td></tr>";
     }
    

    这是一个查询:

     $get_stats = mysql_query("SELECT * FROM visitors WHERE site='$_GET[site]' AND date >= '$start_date' AND date <= '$end_date' ");
    
    6 回复  |  直到 15 年前
        1
  •  1
  •   Hugh Bothwell    15 年前

    我建议你检查一下 之前 将每个地址添加到数据库表中(即每次查看数据一次,而不是每次50000次!)

        2
  •  4
  •   Brandon Hansen    15 年前

    我想你可能对“gethostbyaddr”有意见。循环超过5万次将会非常缓慢。

    另外,这与问题无关,但您可能需要考虑一下sql注入。我希望这不是您运行的实际查询。如果是这样,有人可以简单地放下你的桌子。

        3
  •  0
  •   Philippe Gerber    15 年前

    我猜 gethostbyaddr() 很慢,因为找不到IP地址的主机。下面这个表达式的目的是什么?

    $stats['ip'] == gethostbyaddr($stats['ip'])
    

    假定 $stats['ip'] 127.0.0.1 相应的主机是 localhost . 所以你会比较 127.0.0.1 (IP地址)到 本地服务器 (主机名)。

        4
  •  0
  •   Ty W    15 年前

    从上的评论中 http://php.net/gethostbyaddr :

    “只是想让大家知道,如果DNS中没有列出IP地址,gethostbyaddr()需要20秒以上才能响应。”

    我得说,在一个循环中查找这些主机名可能会减慢您的速度。

    此外,您发送到该查询的变量需要正确转义,否则您真的是自找麻烦。

        5
  •  0
  •   Jim Rubenstein    15 年前

    DNS请求可能需要相当长的时间,特别是跨越50K的记录。如果客户端要求记录的主机名而不是IP地址,则可能需要运行某种后台进程来缓存主机名,而不是在每次加载页面时都查找它们。

    而且,大多数ISP使用IP地址块,因此可以开始构建跟踪IP范围和主机掩码的表,以便ISP停止DNS查找

        6
  •  0
  •   Donnie C    15 年前

    我认为gethostbyaddr()调用会减慢速度。

    http://us3.php.net/manual/en/function.gethostbyaddr.php#88920