一直以來寫部落格賺錢是很愜意的一件工作,但是最近就有點讓人火大了,在WordPress的新增或編輯文章的畫面常常沒多久就出現這樣畫面:
「失去連線。 儲存已關閉直到你重新恢復連線。 我們正在備份此文章至你的瀏覽器,以防萬一。」這個訊息只要一出現,我就不能儲存草稿也不能發表,就這樣一直鎖住這些按鈕直到要關機了,都還是如此,本來以為網路慢,但是不論在哪上網都是如此。以為是伺服器的問題,一直幫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’re reconnected.’ ); ?>
<span class=”hide-if-no-sessionstorage”><?php _e( ‘We’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,讚。