诊断缓慢的初始负载

时间:2013-01-28 15:40:34

标签: joomla web performance-testing pagespeed rackspace

如何诊断最初加载缓慢的网站?也就是说,它在10秒内没有响应,然后在此之后快速加载。

您可以在此处查看加载图表:http://www.webpagetest.org/result/130128_XV_GVN/3/details/

我知道“某些东西”正在减缓它,但我不知道是什么。有没有办法知道造成延误的原因是什么?

编辑:以下是Joomla调试模式的值:

Application 0.013 seconds (+0.013); 1.33 MB (+1.327) - afterLoad
Application 0.783 seconds (+0.770); 9.53 MB (+8.199) - afterInitialise
Application 0.952 seconds (+0.169); 11.00 MB (+1.473) - afterRoute
Application 1.164 seconds (+0.212); 12.76 MB (+1.758) - afterDispatch
Application 2.453 seconds (+1.289); 19.04 MB (+6.287) - beforeRenderModule mod_roknavmenu ()
Application 2.858 seconds (+0.405); 20.91 MB (+1.865) - afterRenderModule mod_roknavmenu ()
Application 2.977 seconds (+0.119); 20.98 MB (+0.075) - beforeRenderModule mod_login (Member Access)
Application 3.012 seconds (+0.035); 21.09 MB (+0.102) - afterRenderModule mod_login (Member Access)
Application 3.019 seconds (+0.008); 21.09 MB (-0.000) - beforeRenderModule mod_hot_joomla_carousel (Front Page Carousel)
Application 3.033 seconds (+0.014); 21.13 MB (+0.040) - afterRenderModule mod_hot_joomla_carousel (Front Page Carousel)
Application 3.057 seconds (+0.024); 21.12 MB (-0.010) - beforeRenderModule mod_rokgallery (FP RokGallery)
Application 3.793 seconds (+0.736); 29.68 MB (+8.570) - afterRenderModule mod_rokgallery (FP RokGallery)
Application 3.847 seconds (+0.053); 29.64 MB (-0.048) - afterRender

4 个答案:

答案 0 :(得分:2)

尝试禁用Rok模块和插件。检查是否有任何改变。如果您正在使用memcached缓存尝试禁用它或最终更改为文件。即使你有慢磁盘文件缓存也可以改善网站。 Memcached有时会给出与预期相反的结果。

还要尝试查看您的问题是否与您正在使用的CloudFlare服务相关。只需创建一个子域直接进入后端托管,看看响应时间是否不同。

如果没有任何帮助,并且您没有在Joomla调试输出中看到问题,那么是时候进行服务器端调试了。我假设你正在使用linux托管。了解dns解析是否适用于您的服务器。只需使用ping,dig或host来查询任何域名的IP地址。如果您看到暂停名称解析,请先修复解析器。

如果您使用CGI运行php,那么您可以尝试使用stracing php进程并查看它是否会暂停某些内容,例如。等待连接到db可能吗? 其他方法是使用xdebug php模块并进行函数跟踪。你可以使用xdebug运行php作为CGI或服务器模块。

答案 1 :(得分:0)

我会把它归结为主机和/或繁重的模板+正在运行的其他扩展程序。由于JavaScript和CSS文件的数量和大小,我总是发现Rockettheme模板及其框架非常繁重。

您可以做的是,备份网站并在WampServer等本地主机上运行,​​以查看加载速度是否有任何差异。

如果您看到网站运行速度更快,您可能需要考虑使用其他主机。如果没有太大差异,那么我认为可能需要一个不同的模板。

希望这有帮助

答案 2 :(得分:0)

我同意上述评论基于框架的任何模板通常都很慢,看看这是否是问题,只需将beez菜单分配给主页,看看它有多大差异。

通常时间如此之高意味着您的缓存未正确配置,和/或主页上未优化的许多模块和/或大量文章。所有这些都有解决方案,但请做一些测试,以便我们确定主要问题。

最好是使用非实时副本,以便在不中断当前网站的情况下使用它。

  1. 将网站置于调试模式(来自全局配置)和 重新加载主页。您应该在页面下方看到一个表格 加载时间。保存他们。
  2. 指定另一个模板,创建正确的模块位置,以便加载与当前主页相同的内容。节省加载时间
  3. 验证您的缓存插件是否已启用,并且您的缓存已在配置中启用了适当的时间*。清除缓存然后执行定时页面加载(保存时间),然后立即重新加载页面。通过比较这两次,我们希望了解哪个是违规的延期或问题。
  4. 这只是一些基本的诊断,一旦发回,我们可以更进一步。

    • 适当的缓存时间:如果你获得2次点击/小时,并且你的缓存被设置为默认的15分钟,你根本就没有使用缓存!如果你获得400次点击/小时,则只有4次将用于生成缓存,即1%的请求将更慢。命中越低,缓存时间越长,使其生效。

答案 3 :(得分:-1)

您的问题听起来像是一个TTFB(第一个字节的时间)问题,可能与繁重的数据库查询,主机性能下降,页面渲染速度过大直接相关,这些都会导致服务器的响应时间过长。

我同意上述评论,首先检查本地安装的服务器上的性能(我在这里使用WAMP服务器)。您还可以通过添加组件和插件呈现中的其他信息来深入了解joomla框架并增强调试功能。

对于调试组件,您需要编辑文件库/ joomla / application / component / helper.php并替换

$contents = self::executeComponent($path);

if (constant('JDEBUG')) {
JProfiler::getInstance('Application')->mark('beforeExecuteComponent ' . $option.' ('.$task.')');
}
$contents = self::executeComponent($path);
if (constant('JDEBUG')) {
JProfiler::getInstance('Application')->mark('afterExecuteComponent ' . $option.' ('.$task.')');
}

对于插件编辑库/ joomla / event / dispacher.php并替换

if (is_object($this->_observers[$key]))
{
$args['event'] = $event;
$value = $this->_observers[$key]->update($args);
}
// Fire the event for a function based observer.
elseif (is_array($this->_observers[$key]))
{
$value = call_user_func_array($this->_observers[$key]['handler'], $args);
}

用这个:

if (constant('JDEBUG'))
{
$pluginName = '';
if (is_object($this->_observers[$key])) {
$pluginName = get_class($this->_observers[$key]);
}
JProfiler::getInstance('Application')->mark('Execute Plugin ' . $pluginName.'::'.$event.' - START');
}
// Fire the event for an object based observer.
if (is_object($this->_observers[$key]))
{
$args['event'] = $event;
$value = $this->_observers[$key]->update($args);
}
// Fire the event for a function based observer.
elseif (is_array($this->_observers[$key]))
{
$value = call_user_func_array($this->_observers[$key]['handler'], $args);
}
if (constant('JDEBUG'))
{
JProfiler::getInstance('Application')->mark('Execute Plugin ' . $pluginName.'::'.$event.' - END');
}

现在,您可以检查插件,模块的加载顺序以及每次加载所需的时间。