0

您如何诊断最初加载缓慢的网站?也就是说,它最多 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

4 回答 4

2

尝试禁用 Rok 模块和插件。检查这是否改变了任何东西。如果您使用的是 memcached 缓存,请尝试禁用它或最终更改为 Files。即使您的磁盘速度较慢,文件缓存也可以改善站点。Memcached 有时会给出与预期相反的结果。

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

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

如果您正在使用 CGI 运行 php,那么您可以尝试跟踪php 进程并找出它是否会暂停某些东西,例如。可能正在等待连接到数据库?另一种方法是使用xdebug php 模块并进行功能跟踪。您可以使用 xdebug 将 php 作为 CGI 或服务器模块运行。

于 2013-01-31T07:54:55.747 回答
0

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

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

最好使用非实时副本,这样您就可以在不中断当前站点的情况下使用它。

  1. 将站点置于调试模式(来自全局配置)并重新加载主页。您应该会在页面下方看到一个包含加载时间的表格。拯救他们。
  2. 分配另一个模板,创建正确的模块位置,以便它加载与您当前家相同的内容。节省加载时间
  3. 验证您的缓存插件是否已启用,并且您的缓存已在配置中以适当的时间启用*。清除缓存,然后进行定时页面加载(保存时间),然后立即重新加载页面。通过比较这两次,我们有望了解哪个是有问题的扩展或问题。

这只是一些基本的诊断,一旦你发回我们可以走得更远。

  • 适当的缓存时间:如果您每小时获得 2 次点击,并且您的缓存设置为默认的 15 分钟,那么您根本没有使用缓存!!!如果您每小时获得 400 次点击,那么只有 4 次将用于生成缓存,即 1% 的请求会更慢。您的命中率越低,缓存时间就应该越长以使其有效。
于 2013-01-29T08:15:50.283 回答
0

我会将其归结为主机和/或您正在运行的繁重模板 + 附加扩展。由于 JavaScript 和 CSS 文件的数量和大小,我一直发现 Rockettheme 模板及其框架非常繁重。

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

如果您看到该站点运行得更快,您可能需要考虑使用不同的主机。如果没有太大区别,那么我认为可能需要不同的模板。

希望这可以帮助

于 2013-01-28T16:40:34.140 回答
-1

您的问题听起来像是 TTFB(第一个字节的时间)问题,并且可能与繁重的数据库查询、缓慢的主机性能、繁重的页面呈现直接相关,这些都会导致服务器的响应时间过长。

我同意上面的评论,首先在本地安装的服务器上检查性能(我在这里使用 WAMP 服务器)。您还可以对 joomla 框架进行一些修改,并通过添加来自组件和插件渲染的附加信息来增强调试功能。

对于调试组件,您需要编辑文件libraries/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.')');
}

对于插件编辑 library/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');
}

现在您可以检查插件、模块的加载顺序以及每次加载需要多长时间。

于 2014-10-16T08:06:50.963 回答