WordPress的失去连线快杀了我

[adsense][/adsense]

一直以来写部落格赚钱是很切意的一件工作,但是最近就有点让人火大了,在WordPress的新增或编辑文章的画面常常没多久就出现这样画面:

2014-03-04_154431

“失去连线。 储存已关闭直到你重新恢复连线。 我们正在备份此文章至你的浏览器,以防万一。”这个讯息只要一出现,我就不能储存草稿也不能发表,就这样一直锁住这些按钮直到要关机了,都还是如此,本来以为网路慢,但是不论在哪上网都是如此。以为是伺服器的问题,一直帮Apach、MySQL做最佳化,也没有。我开始怀疑是WordPress的问题,因为在更新到3.6版以前,不曾有过这样的问题,华文的使用者好像没这个问题,所以我反查这个中文资讯,查到是edit-form-advanced.php里有这样的讯息:

<div id=”lost-connection-notice” class=”error hidden”>
<p><span class=”spinner”></span> <?php _e( ‘<strong>Connection lost.</strong> Saving has been disabled until you&#8217;re reconnected.’ ); ?>
<span class=”hide-if-no-sessionstorage”><?php _e( ‘We&#8217;re backing up this post in your browser, just in case.’ ); ?></span>
</p>
</div>

从这里的英文讯息,就会查到确实有人跟我一样的问题,但是很多人都说是伺服器的问题,不是WordPress的问题。

ㄚ琪继续以lost-connection-notice为关键字搜寻,查到autosave.js里有这一段程式码:

// When connection is lost, keep user from submitting changes.
	$(document).on('heartbeat-connection-lost.autosave', function( e, error ) {
		if ( 'timeout' === error ) {
			var notice = $('#lost-connection-notice');
			if ( ! wp.autosave.local.hasStorage ) {
				notice.find('.hide-if-no-sessionstorage').hide();
			}
			notice.show();
			autosave_disable_buttons();
		}
	}).on('heartbeat-connection-restored.autosave', function() {
		$('#lost-connection-notice').hide();
		autosave_enable_buttons();
	});

我把这一行autosave_disable_buttons();给注解掉,还是没用。

我就改查heartbeat-connection-lost这个东西,才发现WorPress真的在3.6版以后增加了heartbeat这个API,Orz…

本来想停掉heartbeat这个API的,但是怎么试也没用,有时连快速编辑也会一并停掉,这我可不想停。

继续努力找到“It’s not WordPress’ Heartbeat and cron killing your server.”,啥米?不是WordPress的错,难道是伺服器的错?终于作者建议了调整Apache设定可以解决这个问题:

  • 把Timeout值调到10
  • 改变MPM-prefork的设定:
    • StartServers 5
    • MinSpareServers 5
    • MaxSpareServers 10
    • MaxClients 200
    • MaxRequestsPerChild 10000

也提到了WP Super Cache的使用很赞,不过我把它干掉了,因为我不满意。

重新启动Apache,杰克好多了,不要锁住文章很久,看来这样的设定很搭WordPress的 Heartbeat,赞。