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

添加代码会减慢页面速度

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

    我的客户订购了另一个脚本,但我不知道如何解决速度减慢的问题?该表大约有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 回复  |  直到 17 年前
        1
  •  1
  •   Hugh Bothwell    17 年前

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

        2
  •  4
  •   Brandon Hansen    17 年前

    我建议做这个检查 之前 您可以将每个地址添加到数据库表中(即每次一次,而不是每次查看数据50000次!

        3
  •  0
  •   Philippe Gerber    17 年前

    我猜 gethostbyaddr() 由于找不到IP地址的主机,因此速度很慢。以下表达式的目的是什么?

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

    假设 $stats['ip'] 127.0.0.1 相应的主机是 localhost 因此,你可以进行比较 127.0.0.1 (IP地址)到 本地主机 (主机名)。

        4
  •  0
  •   Ty W    17 年前

    来自评论 http://php.net/gethostbyaddr :

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

    我想说,在循环中查找这些主机名可能会减慢你的速度。

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

        5
  •  0
  •   Jim Rubenstein    17 年前

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

    此外,大多数ISP使用ip地址块,因此您可以开始构建表,跟踪ISP的ip范围和主机掩码,以减少DNS查找

        6
  •  0
  •   Donnie C    17 年前

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

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

    推荐文章