Комментарии 90
Заинтересовало. Нужно будет протестировать.
0
Кинули камень в сторону Yii на графиках :D
+6
Не в коем случае, у систем совершенно разное предназначение. Они вполне могут дополнять друг друга.
0
Судя по скринам — там целая ОС :)
+10
Решил протестировать при помощи ab свою главную страницу, проект на Yii(сейчас его дополнительно долбят порядка 7-8 конкурентных запросов, помимо моего ab). Железка почти как у вас(Intel® Core(TM) i7 CPU 950 @ 3.07GHz).
Правда настроен он по другому (nginx, php-fpm, php-apc,percona5.5). Как то слишком сильно разнятся результаты.
Document Path: /
Document Length: 37527 bytes
Concurrency Level: 10
Time taken for tests: 30.000 seconds
Complete requests: 10368
Failed requests: 0
Write errors: 0
Total transferred: 392999040 bytes
HTML transferred: 389079936 bytes
Requests per second: 345.60 [#/sec] (mean)
Time per request: 28.935 [ms] (mean)
Time per request: 2.894 [ms] (mean, across all concurrent requests)
Transfer rate: 12792.84 [Kbytes/sec] received
Правда настроен он по другому (nginx, php-fpm, php-apc,percona5.5). Как то слишком сильно разнятся результаты.
+4
nginx и php-fpm дадут прирост. Мы тестировали демо пример «Блог», использовали apache 2.2. Чтобы убедиться в порядках необходимо протестировать обе платформы на одном и том же железе и настройках. Обращаю внимание, что запускать систему DVelum нужно с настройками production, подробное описание есть в документации Установка и настройка
+1
Вот в том и дело, что свою систему вы запускаете с настройками production, а с какими настройками запускали остальных конкурентов не указываете. Если не готовы выкладывать код с конфигами в посте, то вам бы стоило убрать раздел «Perfomance», как откровенный маркетинг.
+13
У вас есть возможность самостоятельно в этом убедиться. Код примера «блог» доступен как в нашей системе, так и в yii. Это не маркетинг. Если разобраться в причинах такой разницы, то все встанет на свои места. Мы используем подготовленные пакеты кода, количество инструкций include и require минимально. Кроме этого мы кропотливо исправляли медленные места системы при помощи профилирования. Отдельно можно рассмотреть работу с использованием кэширования в memcached, там также есть чему удивиться. Многие подходы, которые мы использовали можно применить к представленным в тесте фреймворкам, тем самым ускорив их, собственно для чего и предназначена платформа.
0
В таком случае вам определенно стоит выложить использованный код и конфиги для всех обруганных фреймворков, чтобы можно было увидеть как именно вы применяли memcached Yii в частности и в остальных фреймворках в целом, подключали ли yii.php или yiilite.php. Хотелось бы буквально запустить у себя и проверить ваши графики.
+4
Я не думаю что nginx даёт большой прирост, т.к. ab тянет исключительно 1 файл, если бы тянул в перемешку с гифками по полкилобайта, то да, в этих ситуациях апач ведёт себя не очень корректно и то я не думаю что он может забить за 30 секунд 8 гигов памяти.
Я склоняюсь к тому, что на стороне Yii была какая то блокировка(файловая), иначе не возможно объяснить столь низкий результат.
Я склоняюсь к тому, что на стороне Yii была какая то блокировка(файловая), иначе не возможно объяснить столь низкий результат.
+3
Интересует способ тестирования, да и судя по тому что используется memcache для dvelum, то разница очевидна. Никто не мешает его так же применить и в демоблоге. И тогда уже сравнить результаты.
0
Возможно так и было, мы использовали то, что было предложено разработчиками as is, ничего не трогая.
0
При должном конфигурировании и правках в демоблоге, yii может показать примерно такие же результаты:
1) активировать мемкэш в конфиге проекта
2) включить кэширование метаданных бд
3) подключить фильтр кэширования(COutputCache) в базовый контроллер
4) перевести сессии на более быстрое хранилище.
+ у меня локально по осчущениям скорость работы того же демоблога осчутимо быстрее. В чем подвох? Я любитель yii и поэтому думаю что необходим тюнинг демоблога перед тестированием, чтоб проекты проверялись в равных условиях.
1) активировать мемкэш в конфиге проекта
2) включить кэширование метаданных бд
3) подключить фильтр кэширования(COutputCache) в базовый контроллер
4) перевести сессии на более быстрое хранилище.
+ у меня локально по осчущениям скорость работы того же демоблога осчутимо быстрее. В чем подвох? Я любитель yii и поэтому думаю что необходим тюнинг демоблога перед тестированием, чтоб проекты проверялись в равных условиях.
+5
Да, это было бы интересно, я не спец в тюнинге YII. Подвох от части в этом: habrahabr.ru/post/149853/#comment_5071949
0
Насколько пригодна для создания приложений со сложной бизнес-логикой, где особо нет структурированных статических страниц, а есть пара десятков контроллеров (модулей?), которые управляют отчётами и формами напрямую на БД не проецирующимися, но активно с ней взаимодействующими? Вычисляемые поля как в базе на основе формы, так и наоборот, сериализованные массивы объектов и прочие подобные извращения?
0
На основе подобного подхода приходилось выполнять очень сложную систему гос. документооборота, работа над ней как раз и подвела к созданию IDE
-1
А где бизнес-логика хранится? Как реализовали бы задачу типа такой: пользователь заходит в хранилище своих чисел и видит для каждого разложение на простые множители, также может занести множители в форму и их произведение сохранится в базе. То есть в базе хранится произведение, а выводятся и вводятся множители (считаем, что задача разложения решаема за приемлемое время).
0
Для этого как ни кстати подошел Extjs, взявший на себя отрисовку интерфейса, что позволило отвлечься от шаблонов и заняться непосредственно бизнес логикой.
-1
Поставил минус.
Тексты какие-то у вас очень мутные.
Почему вы взяли Yii и Fat Free?
Почему только их?
>DVelum с популярными CMS
Может это станет для вас неожиданностью но Yii это вообще-то не CMS.
выложите архив того что вы тестировалии, тогда можно будет более менее о чем-то говорить.
Тексты какие-то у вас очень мутные.
Почему вы взяли Yii и Fat Free?
Почему только их?
>DVelum с популярными CMS
Может это станет для вас неожиданностью но Yii это вообще-то не CMS.
выложите архив того что вы тестировалии, тогда можно будет более менее о чем-то говорить.
+3
Я когда-то очень активно писал под ExtJS, версии 2 и 3, а 4 реально ниасилил, перешел на Bootstrap, иногда только «дерева» не хватает.
Меня взбесила в ExtJS 4 какая-то идея MVC + MVC, причем второй уровень внутри JS
Может быть как раз таким фреймворком его и удобно использовать, но по моему это все уже слишком сложно
Меня взбесила в ExtJS 4 какая-то идея MVC + MVC, причем второй уровень внутри JS
Может быть как раз таким фреймворком его и удобно использовать, но по моему это все уже слишком сложно
+2
А почему на вашем сайте совсем нет демо ни в каком виде, только картинки? (или я не нашел?)
+2
Давно не писал на php, там реально в стайлгайдах учат делать отступы вот так?
public function upload(array $data, $path)
{
if($data['error'])
return false;
$result = array(
'name'=>'',
'path'=>'',
'size'=>'',
'type'=>''
);
$name = str_replace(' ','_' , $data['name']);
$name = preg_replace("/[^A-Za-z0-9_\-\.]/i",'',$name);
$ext = File::getExt($name);
if(!in_array($ext , $this->_config['extensions'])){
return false;
}
+6
У PHP толком нет «ванильного» стайл-гайда, есть стайл-гайд как писать код на Си самого PHP, но нет как писать код на PHP.
-2
Ну почему же нет?
Есть несколько достаточно распространенных стандартов (как и для С, в общем).
Вот, например:
Есть несколько достаточно распространенных стандартов (как и для С, в общем).
Вот, например:
+1
Zend Framework: framework.zend.com/manual/en/coding-standard.coding-style.html
PEAR: pear.php.net/manual/en/standards.php
(эти — основные)
PEAR: pear.php.net/manual/en/standards.php
(эти — основные)
+3
В том-то и дело, что несколько как и для Си. Нет аналога питоновского PEP 8.
0
Но они «неофициальные». Это стандарты PHP Framework Interop Group.
+1
Для работы из под папки вообще никак не предназначен?
0
Очень впечатляет.
Есть какая-то синхронизация моделей фронта с беком? Т.е. для свойств (полей таблицы БД), связей «один ко многим» и т.п. единое место конфигурирования или отдельно?
Есть какая-то синхронизация моделей фронта с беком? Т.е. для свойств (полей таблицы БД), связей «один ко многим» и т.п. единое место конфигурирования или отдельно?
0
Для меня ExtJS и «производительность» — полярные понятия. Всё, что я видел в жизни, реализованное на ExtJS — безбожно тормозило, любой интерфейс, любая страничка.
> «Задачи, которые решает платформа:
>…
> увеличение производительности разрабатываемых систем.»
По сравнению с чем? Что с чем сравниваем?
Сферический конь в вакууме?
Не поверю, что наличие ExtJS увеличивает производительность по сравнению с plain-PHP кодом, например.
> «Задачи, которые решает платформа:
>…
> увеличение производительности разрабатываемых систем.»
По сравнению с чем? Что с чем сравниваем?
Сферический конь в вакууме?
Не поверю, что наличие ExtJS увеличивает производительность по сравнению с plain-PHP кодом, например.
+1
В ExtJS все масса фич для улучшения производительности. Например, сборка в файл и загрузка только нужных компонентов, фреймворка, а не полная загрузка; AJAX-гриды для представления большого количества данных; ленивый рендиринг вьюшек; etc. Другое дело, что не все ими пользуются.
+2
Целиком и полностью поддерживаю!
ExtJS сам по себе безбожно тормозит. Спору нет: красиво, наглядно, удобно, но очень-очень медленно.
ExtJS сам по себе безбожно тормозит. Спору нет: красиво, наглядно, удобно, но очень-очень медленно.
0
Можно узнать, какие вы видели примеры? Серьезно, очень хотелось бы посмотреть на некоторые рабочие примеры использования ExtJs (мы сами используем). Хочется понять, что для Вас означает «безбожно тормозить».
+1
Не поверю, что наличие ExtJS увеличивает производительность по сравнению с plain-PHP кодом
Ничего, что ExtJS — это клиент-сайд, а PHP — сервер-сайд? Как их можно сравнивать?
Ничего, что ExtJS — это клиент-сайд, а PHP — сервер-сайд? Как их можно сравнивать?
+3
По суммарному времени с момента инициации действия пользователем и до получения им результата.
0
При том же представлении результата и той же реакции на действия пользователя? То есть при том же UI?
0
При том же сценарии использования.
0
Вы о компромиссе между отзывчивостью и красотой/удобством/скоростью разработки? Насколько я понимаю тут никто не запрещает «ручками» реализовывать интерфейсы в стиле HTML 2.0, просто есть инструменты для (полу)автоматической генерации интерфейсов на ExtJS.
0
НЛО прилетело и опубликовало эту надпись здесь
И как там у Magento успехи? Давно не читал их исходники.
0
Подчёркивания в именах свойств — Ваш код застрял в PHP 4.
Из упомянутого выше PSR-1: «This guide intentionally avoids any recommendation regarding the use of $StudlyCaps, $camelCase, or $under_score property names.» Я лично предпочитаю $under_score.
Из упомянутого выше PSR-1: «This guide intentionally avoids any recommendation regarding the use of $StudlyCaps, $camelCase, or $under_score property names.» Я лично предпочитаю $under_score.
-1
Можете показать пример сравнения двух версий «объекта ORM»?
0
Хороший вопрос. На данный момент у нас нет реализованного функционала под это задачу, но в целом она решаема
Функционал сравнения добавим в следующую версию, спасибо за отзыв
/*
* предположим, что сравниваем объект "news" c известным нам id,
* знаем, что последняя версия 10
* Вариант 1 Сравнение объекта и его версии
*/
$vcModel = Model::factory('vc');
$object = new Db_Object('news', $id);
$dataBefore = $vcModel->getData('news', $id , 10);
/*
* Нельзя задавать id напрямую
*/
unset($dataBefore['id']);
$object->setValues($dataBefore);
var_dump($object->getUpdates());
/*
* Вариант 2 Сравнение 2ух версий объекта
*/
$dataBefore = $vcModel->getData('news', $id , 9);
$data = $vcModel->getData('news', $id , 10);
$diff = array();
foreach ($data as $k=>$v){
if(!isset($dataBefore[$k]) || $dataBefore[$k]!==$v)
$diff[] = $k;
}
var_dump($diff);
Функционал сравнения добавим в следующую версию, спасибо за отзыв
0
небольшая ошибочка, предположим что последняя версия 11
0
Про слияние, видимо, даже спрашивать не стоит.
А как вы разрешаете конфликты?
А как вы разрешаете конфликты?
0
Это версионный контроль данных, какие слияния конфликты вы имеете в виду? Смысл в том, что была некая запись пользователь А внес в нее изменения пользователь B посмотрел какие данные изменил пользователь A.
Если вы имеете в виду функционал блокировки одновременных изменений, на данном этапе он не предусмотрен. Кто последний сохранил тот и прав. Добавить функциональность блокировок вполне реально.
Если вы имеете в виду функционал блокировки одновременных изменений, на данном этапе он не предусмотрен. Кто последний сохранил тот и прав. Добавить функциональность блокировок вполне реально.
0
Это версионный контроль данных, какие слияния конфликты вы имеете в виду?
Типичные конфликты класса «пользователи одновременно меняют данные».
Мне просто чем дальше, тем больше кажется, что у вас не «версионный контроль данных», а история изменений. Все-таки, 12-ый год на дворе, VCS уже большие.
+2
Будем исправляться.
-1
Скажите, а что вам мешало взять существующие VCS?
0
Не доводилось иметь дело сторонними VCS на уровне данных MySQL. Приведите пример такой системы php + mysql, которая бы управляла версиями данных MySQL. Думаю, не мне одному будет полезно изучить это направление.
0
Не доводилось иметь дело сторонними VCS на уровне данных MySQL.
Не понимаю, о чем вы.
Любая vcs (в том числе и ваша) управляет неким контентом, чаще всего — выраженным в файлах. Соответственно, ваши «версии данных» — это, на самом деле, тоже некоторый файл (и скорее всего, даже текстовый). Собственно, этот файл и кладется в VCS.
Это весьма типичное решение для управления версиями БД, в частности, по схожей технологии работает Database Project в Visual Studio.
0
Мне кажется мы с вами запутались. Мы говорим о миграции структуры или о версиях данных в БД.
Миграция структуры предусмотрена.
Вы предлагаете сохранять запись из бд в файловую систему?
Миграция структуры предусмотрена.
Вы предлагаете сохранять запись из бд в файловую систему?
+1
Так, стоп. Видимо, это я вас неправильно понял.
У вас что версионируется, данные в продуктиве, или результаты разработки?
У вас что версионируется, данные в продуктиве, или результаты разработки?
0
Вроде про миграцию структуры не упомянуто нигде или я пропустил?
0
Как я понял данная «VCS» реализована не на файлах, а на БД, просто дополняется схема для хранения истории некоторых полей.
Речь не идёт о версионировании схемы, миграциях и т. п., только о данных полей.
Речь не идёт о версионировании схемы, миграциях и т. п., только о данных полей.
0
Есть механизм синхронизации структуры базы данных, который сверяет конфигурацию и реальную структуру БД, способен обновить структуру базы данных, записать лог SQL запросов. Описание структуры хранится в файлах конфигурации, которые в свою очередь в VCS. Как это связано с одновременной записью данных 2 пользователями мне не совсем понятно.
0
Все, я вас неправильно понял. Из текста создается ощущение, что у вас есть свой собственный контроль версий разработки.
+1
Есть проблема контроля версий схемы при разработке приложения с SQL СУБД, а есть проблема контроля версий данных при работе такого приложения. Вы, как я понял, попытались решить обе?
0
Скачал, просмотрел внутри и снаружи. Очень интересная система. Вот только бы по больше видео о том как использовать систему.
0
Мы работаем над этим, недавно выпустили первый скринкаст. Документации будет много, на ее написание и перевод необходимо время. Попутно дорабатываем систему с учетом пожеланий и предложений. Например снизили обилие singletone доставшихся по наследству, продумываем локи на одновременное редактирование записей.
0
>>продумываем локи на одновременное редактирование записей
Кстати, так ли необходимо если использовать транзакции? Ну т.е. если кто-то уже редактирует запись, то вы будете выводить какое-то сообщение, что данные устарели или другой пользователь их редактирует?
Кстати, так ли необходимо если использовать транзакции? Ну т.е. если кто-то уже редактирует запись, то вы будете выводить какое-то сообщение, что данные устарели или другой пользователь их редактирует?
0
Сейчас рассматриваем вариант:
При открытии на редактирование вторым пользователем предупреждать, что запись уже редактируется, возможно некую функцию перехвата лока. Да, при сохранении предупреждать, если запись была изменена кем-то другим, система позволяет определить исходную версию редактируемой записи и были ли изменения другим пользователем.
Остается вопрос на сколько это необходимо конечным пользователям, и не усложнит ли это работу с системой. В комментариях к статье промелькнуло, что нужно, правда в рамках обсуждения другого вопроса.
При открытии на редактирование вторым пользователем предупреждать, что запись уже редактируется, возможно некую функцию перехвата лока. Да, при сохранении предупреждать, если запись была изменена кем-то другим, система позволяет определить исходную версию редактируемой записи и были ли изменения другим пользователем.
Остается вопрос на сколько это необходимо конечным пользователям, и не усложнит ли это работу с системой. В комментариях к статье промелькнуло, что нужно, правда в рамках обсуждения другого вопроса.
0
Выпустили RC1 0.8.6 Первый кандидат на стабильную версию.
0
Выпустили версию 0.8.8
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
DVelum – платформа разработки на PHP + ExtJS4