使用index.php整页慢

时间:2014-07-17 12:11:52

标签: php html mysql sql performance

我创建了一个网站,我希望将所有网页合并到index.php文件中的一个页面中。因此,我使用if($_GET['page'])分隔了页面,index.php文件包含15000行代码,大小约为800 kB。以下是我的简短index.php文件。

的index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>

<?php
   if(!$_GET['page']||$_GET['page']=="home"){
?>
<!--Inside this may have over 2000 lines of code, And include HTML or PHP code-->
<?
   }
?>

<?php
   if($_GET['page']=="blog"){
?>
<!--Inside this may have over 2000 lines of code, And include HTML or PHP code-->
<?
   }
?>

<?php
   if($_GET['page']=="discover"){
?>
<!--Inside this may have over 2000 lines of code, and include HTML or PHP code-->
<?
   }
?>

<?php
   if($_GET['page']=="user"){
?>
<!--Inside this may have over 2000 lines of code, and include HTML or PHP code-->
<?
   }
?>

<?php
   if($_GET['page']=="messages"){
?>
<!--Inside this may have over 2000 lines of code, and include HTML or PHP code-->
<?
   }
?>

<?php
   if($_GET['page']=="help"){
?>
<!--Inside this may have over 2000 lines of code, and include HTML or PHP code-->
<?
   }
?>

</body>
</html>

正如我所说,我认为这根本不是一个好主意。当我需要很长时间从服务器到客户端浏览器的响应时,我的问题就出现了。有时需要花费5-15 seconds(这有时会发生,或者有时会发生30%),但通常只需使用10-100 ms来回复。而且我不知道这个问题的原因。可能因为index.php太大了?但为什么JavaScript库超过8000 linesCSS有3000行不是问题。如果我改为这将与我以前的不同?如果您有经验,请向我建议更好的方式。谢谢。

<?php

$safeRoot = 'include/';

include 'header.php';

switch($_GET['page']){
case 'home':
include $safeRoot.'home.php';
break;
case 'blog':
include $safeRoot.'blog.php';
break;
case 'discover':
include $safeRoot.'discover.php';
break;
case 'user':
include $safeRoot.'user.php';
break;
case 'messages':
include $safeRoot.'messages.php';
break;
case 'help':
include $safeRoot.'help.php';
break;
default:
include $safeRoot.'home.php';
}

include 'footer.php';
?>

2 个答案:

答案 0 :(得分:1)

即使代码是15k行也不会花费5-15秒(许多项目中确实存在),可能会有一些循环可能导致问题或处理不当请发错并检查错误。

调试代码并尝试查找代码的哪一部分花费更多时间,注意使代码变慢的输入并检查要执行的代码部分然后您可以轻松找出真正的问题。

注意: 使用if(isset($_GET['value'])){代替if($_GET['value']){ 因为如果$_GET['value']值为0则不起作用,如果在打开错误时未设置$ _GET [&#39;值&#39;],则会返回错误。

答案 1 :(得分:0)

我认为800kb的文件不会导致5-15秒的执行时间。

我宁愿认为您发出的命令之一太慢了。

要找出哪一个,你应该在脚本中弄乱执行时间。

把它放在开头:

$time_start = microtime(true);

这是你脚本中不同的混乱点:

echo (microtime(true) - $time_start);