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

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

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

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

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

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

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

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

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

Комментарии  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

У меня на днях такой вопрос будет стоять особенно остро и скорее всего все упрется в фильтры и хуки. Пока надеюсь, что подобные решения вроде Hookr помогут мне. Недавний пост на CMScafe как нельзя кстати, пролил луч надежды - cmscafe.ru/.../...

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

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

Добавить комментарий

Обновить
Защитный код

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

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

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

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

Расширения Joomla

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

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

Видео