Превосходство Joomla API над WordPress

  • 15.01.2016
Превосходство Joomla API над WordPress

Есть мнение, что Joomla, плохо написанная CMS, которая имеет большие проблемы с производительностью. В этом посте будет приведен пример того, почему Joomla сейчас является одной из наиболее качественных CMS.

Этот эксперимент поставил Денис Сметанников - разработчик популярного расширения JBZoo.

Суть эксперимента проста, заставить выполнить одни и те же операции две популярных CMS. И так смотрим картинки битвы Joomla vs WordPress.

Не буду даваться в технические подробности, просто констатирую:

  • Joomla потребовалось в два раза меньше оперативной памяти.
  • Joomla справилась в 4 раза быстрее.

Для тех кого интересуют подробности этого теста могут ознакомится с результатами на Travis CI.

Вадим Куницын
Россия , Калининград , 33 года

Комментарии  

Денис Сметанников
+4 # Денис Сметанников 15.01.2016 16:42
Если вдруг гуру Wordpress решит вставить свои 5 копеек - я буду этому дико рад. Не холивара ради, а просто чтобы узнать тонкости функций wp_* которые я вдруг не правильно использовал в CrossCMS.

Все сделано честно по codex без оверхеда, на протяжении месяца курения мануалов, бестпрактис и самого кода
https://github.com/JBZoo/CrossCMS/tree/master/src/Wordpress

К слову, либа нужна НЕ для сравнения скорости CMS. Это очень тонкая абстрактная прослойка для расширения JBZoo 3.0, который будет работать одновременно на 3х CMS. Пока обкатываем только две. Все эти тесты нужны только для того чтобы быть уверенным что прослойка работает одинакового вне зависимости от платформы и версии PHP.

Если есть вопросы - пишите ;)
Дмитрий
0 # Дмитрий 15.01.2016 18:49
Какая третья CMS?
Денис Сметанников
0 # Денис Сметанников 15.01.2016 18:52
Пока не решил наверняка. Ближе по духу PageKit (т.к по мотивам его кода пишется наш). Но там по факту нет сообщества. Очень жаль. Есть еще вариант с Drupal, но там есть технологические сложности и с другой стороны подобные решения там никому не нужны.
Дмитрий
0 # Дмитрий 15.01.2016 19:00
Можно поинтересоваться "а зачем" третья? С пейджом прибыли особой не будет, как Вы верно заметили - коммьюнити нету (да и самой cms еще нету, беты-альфы всякие). Для более подвинутых CMS решение и правда может выглядеть не совсем ненужным.
/* вариант ответа: "просто потому что могу" тоже катируется :) */
Денис Сметанников
0 # Денис Сметанников 15.01.2016 19:10
Третья не цель. Если появится, то только потому что это легко - написать интсаллер и драйвер. PageKit - скорее только потому что нравится Symfony и то как они все у себя внутри организовали. Если они будут развивать не только код, а комьюнити, то у неё есть будущее. Пока что ничего не понятно...

Наша цель другая - не писать два разных расширения и сделать одно, прогонять тесты для двух разных систем одновременно. Использовать cms как библиотеку. Пока что получается не хуже чем у YOOtheme WK2. Если посмотреть два дистрибутива wk2, то разница лишь в нескольких файлах.
ivanpanfilov
0 # ivanpanfilov 15.01.2016 17:34
сравнение wordpress и joomla имеет мало смысла.
т.к. в joomla до сих пор нет поддержки custom fields из коробки (только не надо мне про стороние костыли говорить).

а тем временем в wordpress выкатили еще и rest api, в том числе и с поддержкой custom fields в rest api
http://v2.wp-api.org/reference/posts/meta.html
Денис Сметанников
+2 # Денис Сметанников 15.01.2016 19:21
В итоге сравнивается не вся CMS а лишь простейшие функции внутри. Вот есть например
Joomla: JFactory::getApplication()->input->get()
Wordpress: $wp_query->get()

Или почтовые функции, где каждая CMS использует в итоге PHPmailer.
Или простая функция обращения в базу, или escape переменных перед запросом sql
Смотрите, код чистый, тут нет оверхеда - https://github.com/JBZoo/CrossCMS/blob/master/src/Wordpress/Database.php

Скорость падает в CMS

Казалось бы, чему тут тормозить, например, при попытке взять переменную из реквеста. а-ннет... В купе разница получается аж в несколько раз. Что больше всего дает вес, не знаю. Мне это не особо интересно.
--------------
Тут разговор не про то расширения, у кого какие кастомные поля, пор такие сложности как рест... А про то почему самые базовые(!) и самые важные функции CMS так сильно отличаются друг от друга по скорости при прочих равных. В 2 раза - это перебор...
Вадим Куницын
+8 # Вадим Куницын 15.01.2016 21:01
Для этого теста нет ни какой разницы, есть там rest или custom fields (к слову по идее в Joomla это гораздо проще делается чем в WP).
Тут говорится о том, что оптимизация кода в WP при прочих равных очень плохая, при том, что API Joomla в разы богаче и функциональней.
ivanpanfilov
0 # ivanpanfilov 20.01.2016 11:45
> к слову по идее в Joomla это гораздо проще делается чем в WP

так суть в том что в WP это не делается, а используется из коробки
ivanpanfilov
-12 # ivanpanfilov 15.01.2016 17:40
> К слову, либа нужна НЕ для сравнения скорости CMS. Это очень тонкая абстрактная прослойка для расширения JBZoo 3.0
а ну этим все сказано - какие то непонятные прослойки, всегда будут ограничивать производительность и нарушать философию конкретной CMS.
Денис Сметанников
+6 # Денис Сметанников 15.01.2016 18:43
Т.е если любую функцию обернуть в пустую функцию для переименования - то это беспощадно тормозит систему? Не знал :)
ivanpanfilov
-1 # ivanpanfilov 20.01.2016 11:50
у данных CMS совершенно разные подходы. делая прослойки в виде универсальных api - вы вносите оверхед и ломаете кодконфенш принятый в конкретной CMS. но я так понял что у вас решения какието на продажу. может и сойдет. не специалисту конечно без разницы. я такое направление сам копал но отбросил как неперспективное. лучше заиметь несколько спецов в разных CMS чтоб делали решения под каждое по нормальному. это как в android/ios можно на универсальном фреймворке тяп-ляп состряпать а можно по человечески со стайлгайдами под кажду. платформу
Денис Сметанников
+1 # Денис Сметанников 20.01.2016 12:29
Спасибо. Дабы не быть голословным, покажите где именно у меня оверхед по производительности и как сильно он влияет на скорость. А если получится, то в каких-нибудь числах или примерах. Буду очень рад посмотреть и обсудить что-то конкретное. Думаю вам это не сложно, раз вы так легко делаете такие выводы.
Иначе это разговор не о чем, и нет никакого смысла его продолжать...

Не правильно сравнивать этот подход с android/ios, т.к. в последнем разное абсолютно все, начиная от языка, всех вендоров, всего софта, библиотек, OS и заканчивая железом. Только цель одна - юзеры и их сервисы. А тут только CMS, которая по сути нужна нам чтобы получился наш HTML обрамленный шаблоном. Из системы нам нужны только простые вещи, типа роутинга, управления главным шаблонов (title, например), подключение в базу.

Весь "Best parctice" WP крутится на огромной куче хуков, глобальных переменных, фильтрах, функциях без функционального подхода... и попытках поддерживать работу плагинов, которые были написаны лет так 10 назад (с код-стайлом того времени). И это по вашему "прекрасно"? :) Или расскажите мне прелести "кодфешена" WP ?

Смотрю WooCommerce, и что же вижу... они используют свою прослойку в виде массы классов, абстракций. Намного приятнее читать код. А "подход WP" у них помечен как местами как "deprecated". Даже файлы есть такие. О, боги! Неужели они отклонились от стандартов WP чтобы сделать одно из самых популярных расширений? Хм...

Пример шикарного кода WP - https://github.com/WordPress/WordPress/blob/master/wp-includes/functions.php
Просто шмат из ~300 функций сразу на все случаи жизни, добрая доля которых использует смесь HTML+PHP и даже JS. И среди этого стоит искать что-то вроде status_header/nocache_hea ders чтобы просто сделать 404-ю вместо того чтобы кинуть исключение с нужным кодом как в любых других фреймворках.
smart
+5 # smart 18.01.2016 11:11
Интересная тема. Я вот когда разрабатывал плагин Proofreader для WP пытался решить простейшую задачу, которую в Joomla можно было легко реализовать с 2005 года, а в Mambo CMS с 2003. Задача простая — получить код сформированной страницы перед отдачей его в браузер. В Joomla это можно сделать на событии onAfterRender, в Mambo CMS был _mos_buffer, в котором было содержимое всей страницы.

А в WP я не смог найти никакого аналога. Есть всякие хуки, которые позволяют перехватить фрагменты страницы, например заголовок статьи, ее тело, меню и т.д., но найти способ получить код всей сформированной страницы средствами API я не смог. Буду благодарен, если кто-то подскажет решение ;)
Денис Сметанников
0 # Денис Сметанников 18.01.2016 11:33
Да простят меня адепты WP, но это не API - Это просто набор функций в нескольких файлах овер 5000 строк в каждом. Фееричный мрак длиною в 10+ лет самой CMS... :(

У меня на днях такой вопрос будет стоять особенно остро и скорее всего все упрется в фильтры и хуки. Пока надеюсь, что подобные решения вроде Hookr помогут мне. Недавний пост на CMScafe как нельзя кстати, пролил луч надежды - https://cmscafe.ru/razrabotka/747-hookr-besplatnyj-plagin-otobrazhayushchij-khuki-v-wordpress

Или я рано радуюсь?)
ivanpanfilov
-3 # ivanpanfilov 20.01.2016 11:53
ob_start как это не банально (которая функция PHP) - сущесвовали еще когда Joomla не было
Денис Сметанников
0 # Денис Сметанников 20.01.2016 12:41
Скажите пожалуйста, как с помощью ob_* функций получить полную страницу из WP ? Похоже вы знаете ответ. Или вы предлагаете обрамить весь код в корневом index.php? Извините, не понимаю.
smart
0 # smart 22.01.2016 23:49
Цитирую ivanpanfilov:
ob_start как это не банально (которая функция PHP) - существовали еще когда Joomla не было
конечно существовали, кто ж спорит, но вопрос в том, как используя стандартные средства WP, без костылей в шаблонах или модификации CMS, из плагина получить доступ к сформированной страницы до того, как та будет отдана сервером.
Аркадий Седельников
+2 # Аркадий Седельников 23.01.2016 09:19
Как это не банально, даже получив по ob_start все нужное мы никак не сможем это применить. События в Joomla позволяют изменять получаемые объекты, а не только читать. Для этого в WP должны быть специальные хуки, а их нет.
Денис Сметанников
+1 # Денис Сметанников 18.01.2016 11:41
Кстати, тут в комментариях у Артема я приводил другой пример сравнения WP и J!, проверял только одну функцию из каждой CMS - https://www.facebook.com/artemlebsak/posts/10208279357284789
Результаты - http://llfl.ru/eeu9jr Все код есть на гитхабе.

Опять же, если я сравниваю как-то не так, сделал не правильную инициализацию WP, то кто-нибудь, дайте мне знать :)
Мне это сейчас очень интересно.
Вадим Куницын
0 # Вадим Куницын 18.01.2016 13:27
Во вот:-) сколько оказывается не равнодушных сразу.
Иван
0 # Иван 27.01.2016 16:29
Не могу судить о качестве кода, но по юзабилити Joomla проигрывает очень сильно WP.
Дмитрий
+4 # Дмитрий 27.01.2016 17:14
И тут Вы такой сразу нам аргументы в поддержку своих слов пишите... И мы,кивая, соглашаемся
Вадим Куницын
0 # Вадим Куницын 27.01.2016 17:58
В чем то да проигрывает... Но в чем то и выигрывает.
Допустим как вы выведите виджет WP в какой то определенной категории?? Ответ будет, а ни как будет скорей всего писать код :-) Ну может быть используете какой то плагин, если найдете конечно.
И таких примеров, когда вроде бы простая задача в WP это целое дело. А вот посты писать, в WP да удобно.
spycon
0 # spycon 23.02.2016 11:50
Всегда был за джумлу, и прочитав коментарии, понял, что не ошибся. ;-)
Георгий
0 # Георгий 29.02.2016 16:30
Joomla в первую очередь сложна для начинающих, сделать небольшой сайтик на несколько страниц и с меню гораздо проще на wordpress.
Вадим Куницын
0 # Вадим Куницын 29.02.2016 17:21
Согласен меню, редактор и роутер это проблемы Joomla. Если редактор это как-то можно решить, то проблемы с рутером решат только в Joomla 3.6. Кстати возможно там же решат и проблему с меню. http://joomlaportal.ru/blogs/joomla/2609-joomla-3-6
Александр Духновский
+1 # Александр Духновский 28.03.2016 09:33
WP обладает просто чудовищными внутренностями. Но по юзабилити, как уже было сказано выше, он обходит J на сто шагов. Доказательства? Да треть интернета на WP. Люди выбирают его как раз за понятность, а Joomla нужно по видеоурокам изучать. Это объективная оценка, Joomla популярна в основном в бедных странах СНГ и немного во всем остальном мире. WP популярен исключительно везде, но на западе больше, чем в СНГ и прочих бедных странах. И разработчики плюются от трэшового кода WP, тем не менее делают и делают под него расширения - это до одурения выгодно.
marzocchi
0 # marzocchi 28.03.2016 13:03
Да, несмотря на кажущуюся сложность joomla , она достаточно шустро работает и есть встроенный кеш. А wordpress грузит сервера по полной. Админка joomla весьма сложная и есть куча пунктов, которые только один раз понадобятся. Вот если бы был режим wordpress mode в joomla - чтобы ничего лишнего, то цены бы не было.
Максим Вольский
+2 # Максим Вольский 11.03.2018 15:36
у меня ступор от wordpress, не понимаю этой простоты. :o
Для того, чтоб оставить комментарий, авторизуйтесь через социальные сети.

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Скачать Joomla! 3.9.3 Документация Joomla! CMS Свернуть

Расширения Joomla

Новости портала

Новое в блогах