2014-03-28 38 views
2

我试图在我的网站上下载加载时间。它加载非常缓慢,并尝试了几个解决方案。加载时间与admin-ajax.php相关的问题(使用PINGDOM结果链接)

  1. 使用gmetrix解决问题,如优化图像。
  2. 使用pingdom来查看问题是什么。

正如下面的链接中列出的pingdom统计。 http://tools.pingdom.com/fpt/#!/cKIvOz/http://healthyeatingandliving.ca/

我不知道admin-ajax.php是什么以及为什么负载如此之高。另外如果有人知道文件/路径列中的第一行是什么。

如果还有什么我可以做的,因为现在它是一个尝试编辑内容的痛苦。 谢谢大家看看这个。

+0

更新:我按照Robert的建议完成了这项工作,woocommerce只在需要的页面上加载脚本。 – user2189801

+0

更新2:对Webpagetest.org进行了测试,结果表明pie.htc请求存在一些问题。任何人有任何线索? [链接](http://www.webpagetest.org/result/140328_9K_PS8/1/details/) – user2189801

回答

1

ajax加载时间的问题在于woocommerce脚本即使在某些页面上没有您的商店所需的任何功能时也会运行。我会考虑个人做了什么,并将脚本从常规页面中删除(对不起,网站有点旧,所以你可能需要仔细检查和更新排队脚本变量)。但要获得它的要点,你基本上会去掉那些不需要woocommerce功能的页面所不需要的插件。

http://wordimpress.com/how-to-load-woocommerce-scripts-and-styles-only-in-shop/

http://gregrickaby.com/remove-woocommerce-styles-and-scripts/

你也可以添加一些有条件的标签,使其明确不会在某些页面加载。

https://codex.wordpress.org/Conditional_Tags

+0

感谢罗伯特的回复。所以基本上我假设Woocommerce是一个罪魁祸首吗?我一直在做一些研究,人们说它可能是wordpress中的Heartbeat API。我将停用woocommerce并查看它是否有所作为。我认为这应该解决一些问题。 – user2189801

+0

主要问题在于,woocommerce会加载脚本,无论您使用的是哪个页面,因为大多数为woocommerce设计的网站都使用所有页面上的功能(您的站点没有)。如果您指定了它加载的位置,那么您仍然可以使用woocommerce,并且只有指定的路径才会加载必要的信息。 –

+0

对Webpagetest.org进行了测试,结果表明pie.htc请求存在一些问题。任何线索为什么这会发生,你认为我可以通过将文件放在上述位置来解决它? http://www.webpagetest.org/result/140328_9K_PS8/1/details/ – user2189801

1

另一个插件或主题使用的东西就像当你添加到购物车等是刷新一个车小工具,这个使用管理的Ajax,然后问题消失将加载在每一页上,如果停用WooCommerce但这个问题依赖于WooCommerce。

3

您应该将此代码添加到主题中的functions.php中。

add_action('init', 'my_deregister_heartbeat', 1); 
function my_deregister_heartbeat() { 
    global $pagenow; 

    if ('post.php' != $pagenow && 'post-new.php' != $pagenow) 
     wp_deregister_script('heartbeat'); 
} 

此代码将禁用admin-ajax.php功能并将CPU减少75%。

+0

我有类似的问题,并试图通过将代码添加到主题文件的functions.php,但在tools.pingdom.com上运行测试它仍然显示由admin-ajax.php引起的延迟。任何建议可能是错误的? – user2002522

+0

您是如何计算出它将CPU负载减少75%的? – jeteon

1

我已经花了很多时间试着将这个问题排除在外,我甚至使用了deregister_heartbeat代码 - 没有任何效果。我想分享一个解决方案,以便在您尝试了解发生了什么时防止Apache/MySQL死亡。

到底不同的服务器上创建一个网站的测试副本交换到一个默认的主题,我能够制定出一个子主题的一个推广引擎,让AJAX调用,以某种方式获得过去后注销心跳 - 我们现在已经放弃了引擎,并可能从头开始编写儿童主题。

为了给我一些时间,同时跟踪有问题的东西,我需要一种方式从网络服务器删除线程,然后它们占用所有可用空间 - 并且我们有一个大型网络服务器 - 它只会导致网站崩溃自Apache重新启动以来的小时。你当然可以在Debian机器上使用硬重启Apache(apachectl restart服务apache重启) - 但是这会导致所有连接中断 - 并且在多主机环境中它会把某人搞砸。如果你是一个* NIX系统上,你可以做到以下几点,它需要w3m的(或者可以从像elinks,猞猁或链接的CLI运行转储相当于braile模式浏览器)

#!/bin/bash 
kill `w3m -dump http://<server address>/server-status | grep "admin-ajax.php"|awk '{print $2}'` 

确保在杀死之后并在脚本结尾处获取反引号。我们基本上使用w3m来打开服务器状态页面(您需要在Apache配置中启用该功能 - 只能从本地IP地址使用该功能),我们通过grep管理结果与管理-ajax.php处理流程 - 然后我们养活这些行到AWK基本上返回相关PID号到列表杀命令。

其结果是,在Apache的进程线程会死 - 但会出现短暂而在任何服务器状态列表作为开口槽,无当前进程 - 在随后访问您的网站将占据一个这些线程正常时尚

我们把整个东西放到cron任务每5分钟左右运行一次 - 效果是我们得到的线程出现,但他们从来没有呆足够长的时间来引起问题。

2

Screenshot of Network-tab in inspector 使用心跳控制插件并将其禁用。此外,在gtmetrix中,点击瀑布图,然后点击图片中指示的帖子,找出错误。

这是从一个名为wptouch的wp插件调用ajax特性。