我有一个php页面,它根据用户输入和数据库进行计算以生成报告。 此报告的加载时间因我无法识别的原因而有很大差异。我将加载页面,需要25到30秒。几分钟后,我将加载相同的报告(使用相同的输入),页面加载时间将超过60秒,导致超时。
我查看了http://speedtest.comcast.net/和http://www.host-tracker.com/来检查我的本地互联网速度和网站托管服务商。
我在网页正常加载和超时时检查了两个网站。结果总是可比的。我希望看到我的终点或网站上的速度减慢,但是这不会发生。
还有什么可能导致我遇到的这种大幅减速?我已经花时间优化了PHP代码,虽然现在加载速度更快,但它仍然超时。
一旦网站开始超时,此行为似乎会持续10到60分钟。之后,即使没有任何代码或数据被更改,它也会再次快速加载。
我正在使用访问数据库文件来存储和检索信息。以下是使用方法的示例。
//Get Country Data
$Countryconn = new COM("ADODB.Connection");
$Countryconn->open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=".$CurrentDirectory."\MQesDatabase.mdb");
$CountryData = $Countryconn->execute("SELECT Account4Rate, Base_Productivity_Factor, Account0Rate, Account1Rate, Account2Rate, Account8Rate FROM Country WHERE ID=$CountryIDValue");
//Get Crew Rates
$CivilRate=$CountryData->Fields(2);
$CivilRateValue=$CivilRate->value;
$CivilRateValue= $CivilRateValue*$MarkupFactor;
然后存储信息
$CurrentAreaTotals = $conn->execute("SELECT DManHours, SManHours, Labor, Subcontract, LMaterial, OMaterial, LProcurement, OProcurement, CEquipment, Total FROM Areas WHERE ID=$SelectedArea");
..
$CumAreaLMaterial = $CurrentAreaTotals->Fields(4); $CumAreaLMaterialValue = $CumAreaLMaterial->value;
$CumAreaLMaterialValue = $CumAreaLMaterialValue+($MaterialCostValue/$CurrentRRateValue)*$CQuantityValue;
if ($CivilSubContractDataValue == 0){ $rs = $conn->execute("UPDATE Areas SET LMaterial = $CumAreaLMaterialValue WHERE ID=$AreaCodeValue");}
答案 0 :(得分:0)
可能是数据库响应问题。如果数据库存储在具有最大资源的计算机上,则可能需要很长时间才能响应请求。
编辑:
要测试数据库响应时间,您可以使用此功能并获得一个想法:
<?php
function logToFile($filename, $msg)
{
// open file
$fd = fopen($filename, "a");
// append date/time to message
$str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $msg;
// write string
fwrite($fd, $str . "\n");
// close file
fclose($fd);
}
?>
然后在$conn->execute()
语句之前调用该函数,然后再调用该函数。例如:
logToFile("testlog.txt", "Beginning")
$CountryData = $Countryconn->execute("SELECT Account4Rate, Base_Productivity_Factor, Account0Rate, Account1Rate, Account2Rate, Account8Rate FROM Country WHERE ID=$CountryIDValue");
logToFile("testlog.txt", "Finished")
写入文件会增加您的总体时间,但它会让您了解查询运行的时间。
答案 1 :(得分:0)
我的第一个猜测是Sam说的数据库响应问题。对于某些常规日志记录来说,这听起来像是一个很好的用例,跟踪数据库查询和整个页面加载的时间长度是将其缩小到特定代码段或数据库查询的良好开端。
如果您对更详细的建议感兴趣,我想知道您使用的是哪种数据库,以及您是否正在使用PHP代码框架。