Спиране ‘версии на публикацията’ в WordPress

19.11.2009 от Васил Тошков
Категории: Блогове, Програмиране 

Трудно ми беше да измисля заглавие на тази публикация. Сигурно сте забелязали, че от версия 2.6 WordPress пази по няколко версии на всяка публикация, като броят им зависи от това колко време сме я писали и колко пъти сме я променяли. Лично за мен това е напълно излишна опция, която прави базата данни в пъти по-голяма и цялата система в пъти по-бавна.

Отдавна се каня да намеря решение на този проблем, трябваше да ми остане малко свободно време и днес това се случи. Стимулът беше, че от Гугъл официално признаха, че скоростта на сайт ще е от значение за позиционирането му. Спирането на тази опция, наречена „revisions“, ускорява значително скоростта на WordPress.

В момента пиша този пост много по-лесно от преди, защото той много по-бързо се запазва автоматично. Спирането на тази ненужна и бавеща екстра се състои от три етапа. Първо задаваме директива на WordPress, да спре да пази нови версии на публикациите. След това изчистваме базата данни от всички непубликувани версии и накрая оптимизираме таблиците.

1. Спиране запазването на нови версии

За целта трябва да се добави следната директива към системата:

define('WP_POST_REVISIONS', false);

По принцип би-трябвало да става с добавяне на това във функциите на темата или направо във файла wp-config.php, но при мен така не стана. Затова го направих като разширение, което може да си изтеглите от тук и да инсталирате ръчно, чрез качване от компютър. Ако всичко е наред, ще спрете да виждате версиите на публикациите.

2. Изчистване на базата данни

За целта изпълнете следната заявка в базата данни на блога:

DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';

Излишно е да казвам преди да пуснете това да си направите архив на базата данни! Заявката е бавна, в един от блоговете ми три към 23 секунди и отнесе няколко десетки хиляди излишни записа. Всичко зависи от големината на блога, важното е да имате търпение и да не прекъсвате заявката.

Редакция: Заявката има един мааалък страничен ефект – някои връзки от blogroll спират да се показват. За целта е необходимо да се редактират и save-нат наново. Не поемам никаква отговорност, ако заявката вреди и на нещо друго.

3. Оптимизиране на таблиците

Тук е лесно, просто изпълнете и тази заявка в базата данни:

OPTIMIZE TABLE wp_posts, wp_term_relationships, wp_postmeta;

Всичко това го направих на всичките си блогове, отне ми доста време, но смятам, че си заслужава. Все-още вървят – шегувам се :) Ако не ви се рискува, то изпълнете само точка едно. Ако сте се захванали с точка две, то точка три е безобидна и може само да ви е от полза. Приятно триене за един по-бърз WordPress :)

П.С.: Поиграх си да направя удобни бутони за споделяне в популярните социални мрежи в края на всяка публикация. Надявам се, че ще са полезни.

бутон за споделяне в социални мрежи

Коментари

20 коментара за Спиране ‘версии на публикацията’ в WordPress

  1. Stu на 19.11.2009 12:57

    Има ли останал някой който не ползва WordPress?
    Ако говорим за скорост – това е един от най-бавните и ресурсоемки уеб софтуери.

  2. Васил Тошков на 19.11.2009 13:25

    @Stu – съгласен съм напълно с теб, но е добър за SEO. А за някои маниаци като мен, SEO е всичко, така че няма начин. Постоянно търся начини да го подобрявам и оптимизирам този WordPress. А разработчиците вместо да го направят по-лек, го трупат с все-повече глупости.

    Като си представя и, че някои правят малки фирмени сайтове от по 5-10 страници на него…

  3. Христо на 19.11.2009 14:24

    хм, интересен начин за оптимизация. Аз честно казано не бих го направил толкова заради loadtime-а, колкото да мога да публикувам по-бързо статии. В момента по-големите ми блогове имат проблем със скоростта и ще гледам да изпробвам поне точка 1.
    мерси!

  4. Едуард Димитров на 19.11.2009 14:32

    @Stu, има, има.
    @Тошков, Това е доста полезна информация за мен, тъй като скоро ще започваме разработката и на wordpress добавки. Спестяваш ми няколко часа ровене.
    Мерси.

  5. Калин на 19.11.2009 16:41

    И аз съм спрял ревизиите отдавна, но не посмях да бърникам в базата и да трия старите, нека си седят :) Ако товари много си включвам кеширане…

  6. Атанас Янев на 19.11.2009 19:15
  7. Свилен Попов на 19.11.2009 21:13

    За изтриването на ревизийте от блога може да се използва плъгина Revision Delete. Аз лично него използвам :-)

  8. Антон Радев на 19.11.2009 22:18

    Аз ли съм най-калпав или редовно пазенето на ревизиите ми е спасявало важни материали :)
    Василе, мога ли да изтрия само досегашните ревизии? Без да ги изключвам съвсем. И може ли така да си ги трия през известно време?

    DELETE a,b,c
    FROM wp_posts a

    Тази заявка буквална ли е? Какви са тези а,б, и ц :) в постовете ?

  9. Васил Тошков на 19.11.2009 23:42

    @Радев – можеш да си ги триеш периодично без да ги спираш. Просто периодично си изпълняваш заявката :) Тези букви (a,b,c) са помощни имена, с които кръщаваме таблиците от „изгледа“ след сливането.

  10. Марти на 20.11.2009 14:57

    Не съм експерт по wordpress нито по бази данни, но… какво те кара да мислиш, че непубликувани версии на дадена публикация, забавят изпълнението на заявката за зареждане към вече публикувана такава.

    Освен метрики „на око“ имаш ли данни в… милисекунди за оптимизацията, която се постига :)

  11. Васил Тошков на 20.11.2009 16:16

    Логично е като правиш заявка от голяма база данни, да става по-бавно, отколкото от по-малка база данни. А при WordPress за генерирането на всяка страница се използват доста заявки :)

    Трябва да минат поне 48 часа, за да мога да кажа поне в процентно отношение колко е оптимизацията. В панела при писане на нова публикация се усеща веднага. Данни в милисекунди не могат да се дадат, защото зависи от големината на базата данни.

  12. Марти на 20.11.2009 16:19

    Изхождайки от факта, че никой не пише повече от една/две стойностни статии на ден в блога си и съществува бутон preview, честно не виждам къде е болката в това като натиснеш „публикувай“ нещото да се случи след 1 секунда :)

    А иначе от другата страна на барикадата са различните плъгини за кеширане и сервиране на хтмл наместо пхп и подобните им, което също спестява ресурси и зарежда много бързо.

  13. Едуард Димитров на 20.11.2009 16:35

    Марти, не ти се струва нужно защото не си виждал как се държи уърдпресс с 5-6000 поста вътре. Да не говорим че има и с повече.

  14. Марти на 20.11.2009 16:37

    Така е, аз съм още под 100. Като кача карма ще му мисля :)

  15. Илиева на 20.11.2009 21:49

    Бих искала само да кажа благодаря на Васил Тошков за статията и на Атанас Янев за плъгина. Тъй като нямам представа какво означава да „изпълниш заявка в базата данни на блога“, комбинацията от съветите на двамата беше перфектна :)

  16. Анастас Мавродиев на 21.11.2009 16:42

    Здравей. Тъй като съм начинаещ реших да пробвам само със стъпка 1. Качих приложението ти на сървъра си ( като отделен файл). Но в контролния панел все още ми се появява директорията Post revisions.

  17. Васил Тошков на 21.11.2009 18:19

    Използвай вградения инсталатор на разширения от ZIP файлове. За целта отиваш в Разширения -> Добавяне на още -> качване (бутона отгоре).

  18. ioio на 03.12.2009 09:04

    Полезна тема благодаря за което , но и аз като Мартин се питам за блог с колко поста най-малко си заслужава да се занимава човек с това?Примерно за блог със около 200 поста ще даде ли някакъв ефект?

  19. Васил Тошков на 03.12.2009 11:16

    Най-добре още при първоначалната инсталация да изпълниш точка 1 и базата ти данни да остане непокътната и чиста от различни „версии на публикацията“. При мен дава ефект, дори на блогове с под 200 поста.

  20. Мариана Евлогиева на 24.01.2010 04:27

    А може ли само да спра версиите отсега нататък, без да трия досегашните? Че като се знам каква съм „чистница“, ще взема без да искам да си затрия целия блог… Иначе за новите си блогове ще пробвам да изпълнявам 1 още при създаването, но личният ми блог има около 200 публикации и ми се ще да не стават по-малко. ;-)