向不同用户呈现页面的不同版本

时间:2012-09-27 12:56:28

标签: php optimization

我正在创建一个网站,其中不同的帐户类型将显示每个页面的不同版本。我有它的工作,但我的问题是速度/“最佳实践”。以下哪一项(或完全不同的东西)是最好的方法?

选项1.将每个帐户类型分成文件的各个部分:

if($accountType == "type1"){
  //All lines of code for the account type1 page
}
elseif($accountType == "type2"){
  //All lines of code for the account type2 page
}
elseif($accountType == "type3"){
  //All lines of code for the account type3 page
}

选项2.使用包含文件将每个帐户类型分解为文件的各个部分:

if($accountType == "type1"){
  //this file has all of the code for account type1 page
  require('includes/accounts/type1/file.php');
}
elseif($accountType == "type2"){
  //this file has all of the code for account type1 page
  require('includes/accounts/type2/file.php');
}
elseif($accountType == "type3"){
  //this file has all of the code for account type1 page
  require('includes/accounts/type3/file.php');
}

选项3.在整个文件中使用大量条件语句为每种帐户类型生成页面:

if($accountType == "type1"){
  $result = mysql_query("//sql statement for account type1");
}
elseif($accountType == "type2"){
  $reslut = mysql_query("//sql statement for account type2");
}
elseif($accountType == "type3"){
  $result = mysql_query("//sql statement for account type3");
}
while ($row = mysql_fetch_array($result)) {
  $variable1 = $row['variable1'];
  if($accountType == "type1"){
    $variable2 = $row['type1Variable2'];
    $variable3 = $row['type1Variable3'];
  }
  elseif($accountType == "type2"){
    $variable2 = $row['type2Variable2'];
  }
  elseif($accountType == "type3"){
    $variable2 = $row['type3Variable2'];
  }
  $variable4 = $row['Variable4'];
}
echo "The variables echoed out are $variable1, $variable2";
if($accountType == "type1"){
  echo ", $variable3";
}
echo "and $variable4";
//the rest of the file to follow in the same way

基本上归结为:

选项1:文件是1000行代码 选项2:文件是30行代码,每个包含文件在250-350行代码之间。 选项3:文件是650行代码。它之所以少,是因为某些代码可以在所有三种帐户类型之间“共享”。

哪种选择是最快的/“最佳做法”?我倾向于选项3,因为整体文件大小会更小,但是有更多条件语句使用此选项(选项1和2只有三个条件语句,而选项3例如40)。有这么多条件语句会使文件进程变慢吗?选项1和选项2之间是否存在任何差异(将代码块分成包含文件是否意味着每个帐户类型只会加载一个包含文件?或者php加载所有三个文件并选择正确的文件?)?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

就效率而言,选项3将是最慢的,因为它会有比其他任何条件检查更多的条件检查 - 但是,速度将非常(非常)可忽略不计。

定义"最佳实践"这是不可能的 - 它真的归结为" 与谁合作最简单的维护"。如果在未来的道路上,您必须对代码进行大量更改,但仅针对$accountType == "type2",您是否想要通过大量的spagetti代码(选项3),或者更多分离成块(选项1),或只打开该类型的特定文件(选项2)?

在我个人看来,即使不使用OOP / MVC框架实践,我也会推荐选项2.如果您需要更新任何内容,将每个单独的类型拆分成他们自己的独立文件将会为您节省很多麻烦。您甚至可以合并某些部分 - 例如,如果所有三种类型都有一个"块"具有所有相同的外观和感觉,您可以在其自己的包含中定义并将其包含在所有三种类型的文件中。

答案 1 :(得分:0)

拜托,抛出版本1窗外,好吗?它对错误非常敏感,而大型文件也不是很方便。

我自己,我使用选项2,但我不确定它是否与较小的代码部分有关。我发现为每个术语创建单独的文件更容易,因此数据不会混淆。接下来,它更容易修改。如果你不注意,版本3是敏感的数据,我试图避免这种情况。所以我个人会选择并仍然选择我的工作版本2.

答案 2 :(得分:0)

就性能而言,我不会发现任何选项之间存在很大差异。

关于最佳做法,我建议您选择2,这是我认为最易维护的选项,因为您可以将每种类型的用户分开并保持在自己的范围内。< / p>

如果要在页面之间重用代码,您仍然可以为可以封装的共享代码创建控件。

选项1听起来像是一个巨大的文件,当你想要修改它时很难找到东西,你必须担心不修改其他帐户类型的东西。

选项3是恕我直言最糟糕的,因为你得到了糟糕的意大利面条代码,并且为了找出每种帐户类型的显示意味着必须通过所有代码。