Пишу чисто свое ИМХО. Тем не менее зная, что здесь есть довольно опытные уже MODX-программисты (именно программисты, а не расставлятели MODX-тегов), предлагаю обсудить «творение» небезызвестного безумкина, тем более что он вот опять похвастался своей неповторимой разработкой, но вот почему-то на диалог не идет никак… В твиттере тоже не отвечает. Думаете просто считаете выше своего достоинства вступать в споры? Нет, ни в коем случае. С теми, кому он может сказать «ты тупой и ничего не понимаешь, иди отсюда» — это он всегда запросто. И со мной он по началу так пытался разговаривать, когда я ему начал говорить, что у него минусов полно в его разработках. Но после пары предметных споров, как вот здесь, к примеру: community.modx-cms.ru/blog/addons/9892.html, он что-то совсем перестал в диалог вступать. Видимо, совсем не любит чувствовать себя не умнее всех.
Так вот, публикую я здесь свой ответ с хабра (ибо в нем сказал примерно все, что хотел (точнее мог написать)), и предлагаю всем, у кого есть мнение, высказаться. Я не призываю поддержать мою точку зрения. Нет. Я готов и противоположную выслушать, вдруг я не прав на счет указанных технологий.
Вы меня спросите почему я так взъелся? Я скажу: он наносит вред сообществу. Вместо того, чтобы направлять молодых учить сам MODX, он их направляет учить свой аналог, который как я и утверждаю, очень далек от совершенства.
Под катом дублирую свой ответ и жду ваших комментариев. Этот, я думаю, все равно не выйдет за свое высказаться.
Мой ответ с хабра.
И вот опять вот эта ахинея… «Мое прелестное дополнение»…
Это не просто твое прелестное дополнение. Это самое великое из того, что ты сделал — самый великий блеф! Тебе по прежнему удается простачков дурачить тем, что ты офигенный компонент написал и много-много его дорабатываешь. И многие верят (не хватает же мозгов проверить). И главное — сколько уже ты на него из СимплДрима денег вытянул? :-) Ведь тебе оплачивается твое рабочее время.
Ну чтож, давай разберем, что это у тебя за чудо такое неведомое разработано.
Итак, по началу это вообще выдавалось как «альтернатива xPDO». Одна из ссылок: it-folio.ru/forum/index.php?topic=663.0
ШТОА?? Была моя реакция. Какое нафиг без xPDO? Лезем в код: github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/pdofetch.class.php#L9
И что там видим?
protected $query;
И там еще не мало xPDO по всему компоненту.
В общем, это никакая не замена xPDO (хорошо хоть давно уже перестал это говорить, понял, что ляпнул не подумавши). Это простой синтаксический сахар, при чем не просто сомнительный, а конкретно ничего под собой не имеющий. Сейчас поясню.
Следите за руками, что нам предлагается: чтобы у вас все быстрее работало, ставьте мою чудо-тулзу, и у вас все будет супер-быстро работать!
Так ли это? Лично меня никак не может убедить в этом тот факт, что вместо того, чтобы просто выполнять $modx->newQuery(), мне надо сделать:
Библиотека подключается через modX::getService() вот так: // Если нам нужны только основные функции $pdo = $modx->getService('pdoTools'); // Если нам нужна работа с БД $pdo = $modx->getService('pdoFetch');
При этом это не 10 строчек. Это 835 строк здесь: github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/pdotools.class.php
и 940 строчек здесь: github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/pdofetch.class.php
Но может оно того стоит? Может там что-то есть то, чего нет в ядре? Ведь вон сколько функций сразу выполняется: github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/pdofetch.class.php#L61
И это при том, что весь класс xPDOQuery в ядре — 885 строчек: github.com/modxcms/revolution/blob/develop/core/xpdo/om/xpdoquery.class.php
Нет, не похоже. Новый запрос создать я и без этого могу. $q = $modx->newQquery($className); Колонки указать извлекаемые? Не вопрос — $q->select(array(
'col1', 'col2', 'col3 as col 4',
));
Таблицу приджоинить? Да хоть $q->leftJoin(), хоть $q->innerJoin(). Как мне будет угодно. Условия добавить??? Так оно всегда там было. $q->where($cond);
К слову, а в pdoTools условия появились совсем недавно: bezumkin.ru/sections/components/1931/
Вася, ну ты уже сразу расскажи, о чем умолчал, чего еще не хватает? Там же много еще минусов есть, а? Может ты все-таки расскажешь, что pdoTools не проверяют права доступов, к примеру?
И вот теперь главное — а нафига все это изучать, когда можно изучать едро? Нафига вот так вот переписывать всю систему?
Я вот знаю. Потому что xPDO имеет фатальный недостаток ( lurkmore.to/%D0%A4%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D0%BA ) — его писал не Вася.
А еще у него 100500 изменений в компонентах, и не забывайте у себя все по гиту сводить…
Ну быть может у него действительно с производительностью все классно, а? Ведь пишет: >> Как вам вывод 2012 страниц сайта за полсекунды?
Ну давай сравним твое творение с вот этим небольшим кодом:
$q = $modx->newQuery('modResource'); $q->select(array( «id», «uri», «pagetitle», «content», )); $q->limit(2012); $s = $q->prepare(); $s->execute(); $i = 1; while($row = $s->fetch(PDO::FETCH_ASSOC)){ $str = "$i"; $str .= "{$row['pagetitle']}"; print $str; $i++; }
Тоже 2012 документов.
0,0165 сек. awesomescreenshot.com/0a01vmb228
При этом 7 мегабайт, а не 18 как у тебя.
А быть может ты скажешь, что я не умею программировать и наговариваю на тебя? Ну как бы готов поспорить…
А вот начальство твое в СимплДрим не умеют программировать, поэтому у тебя и получается им ездить по ушам. Поэтому они тебе и платят по прежнему деньги за твои «чудо разработки» :-)
Но не это плохо. Плохо, что ты начинающих программистов не по тому пути направляешь. Нет, чтобы лучше ядро изучать и их направлять на это, ты им pdoTools свои суешь. В итоге ни ты, ни они самого ядра не знают. Могу легко по каждому твоему дополнению проехаться. А что ты там про контексты в своем гибридаусе нес, так я вообще ржал. Только ты ничего не ответил. А жаль…
А по мне, так у тебя маниакальный синдром. Лечиться тебе надо. Вместо того чтобы смотреть, что другие делают и как делают, ты бы подумал о том, что тебе удалось сделать. А Василий правильно делает, что не вступает с тобой в диалог. Какой смысл в этом разговоре. Ты зациклен на одном.
Кто его меньше знает, он очень даже вступает в диалог :)
А вот сделать мне удалось очень не мало. Поэтому и смотреть могу кто и что делает. А главное — как.
Не могу с тобой не согласиться, костыли — это не есть хорошо. Я полностью поддерживаю тебя в этом вопросе.
Знаком с вашими с Василием баталиями. Если честно, то грустно на все это смотреть: столько времени и энергии тратится…
Мое мнение — фанатов Василия, да и его самого критикой его стратегии не переубедишь. По-моему, гораздо эффективнее здесь будет работать с теми, кто еще не определился. Стоит выдавать больше информации о своих наработках, стремиться к тому, чтобы при поиске описаний новичок чаще попадал на твои статьи. Чужую тему лучше перекрыть количеством и качеством информации по своей теме, чем критикой, хоть и обоснованной.
столько времени и энергии тратится…
Ну а как же? В споре рождается истина © Кто-то.
Мое мнение — фанатов Василия, да и его самого критикой его стратегии не переубедишь.
А я там и не пытался его переубедить, и уж тем более на путь истинный наставить. Я хотел только одного — расставить точки над i, что есть что, и для чего. А дальше пусть каждый для себя сам путь выбирает — хочет, пусть pdoTools юзает. Не хочет — не юзает.
Чужую тему лучше перекрыть количеством и качеством информации по своей теме, чем критикой, хоть и обоснованной.
Этим мы занимаемся, и очень даже успешно. Серьезные результаты в этом направлении будут видны уже к лету.
Ну а как же? В споре рождается истина
С этим не поспоришь, только ИМХО на каком-то этапе именно спор именно между вами начал выглядеть как банальная драка. Именно поэтому некоторые люди не вникают в смысл обсуждений, а увидев, кто к кому обращается, сразу выдают комментарии типа как первый комментарий к этому топику. (не в обиду автору)
Этим мы занимаемся, и очень даже успешно.
Это я вижу, и сам вношу посильную лепту, общаясь с людьми. Это самый эффективный метод, проверено.
Именно поэтому некоторые люди не вникают в смысл обсуждений, а увидев, кто к кому обращается, сразу выдают комментарии типа как первый комментарий к этому топику.
Я в первую очередь — программист. И если я вижу что-то технически неправильное, тем более с вводом других в заблуждение, то я обязательно буду отстаивать истину. А кто и что обо мне будет думать — это уже меня не особо волнует. Главное — что я буду честен перед собой, и совесть моя будет чиста. Это не вопрос пиара. Это вопрос моих принципов.
и сам вношу посильную лепту, общаясь с людьми.
За это всегда спасибо! :)
Так я не понаслышке знаком с твоей стратегией работы с MODX :), грех с людьми хорошим знанием не поделиться.
Конечно, непросто с нуля вникнуть и начать делать сайт на MODXSmarty вместо стандартных тегов MODX, тем более если человек не программист, но зато, когда сделан первый сайт, ни на секунду не жалеешь о потраченном времени.
А я очень рад, что все больше и больше людей берет наши технологии на вооружение :)
Ну даже не знаю, в принципе мне все равно кто там что и как делает. Главное профит. Я пытался воспользоваться твоим способом и соединить Modx и смарти. Потом понял что на самом деле потом придется переписывать запросы. А времени в обрез то. Основная причина в том что странички очень долго грузились. И я нашел pdoTools. Какое оно бы ужасное и отвратительное по твоим словам не было, оно работает. И мне очень помогло. В итоге сейчас аптайм страниц колеблется от 0.03 до 0.5. А я счастлив как паровоз и при этом не пришлось переписывать все сниппеты. И в полне возможно я возьму твой вариант со смарти в будущем. Но пока pdoTools меня полностью устраивает. Я не являюсь ярым поклонником Безумкина, мне по большей части вообще параллельно, что и как у него.
Речь не была о том, что это отвратительное. Речь была о том, что это синтаксический сахар, который никак не может работать быстрее, чем чистый xPDO. Но я согласен, что местами это может сэкономить времени и дать профит по экономии времени и скорости загрузки. При этом я останусь при своем мнении — изучать чистый xPDO профитней (хотя и сложнее). Вот вам задача для примера. Не зная и не понимая xPDO вы вряд ли решите эту задачу с помощью pdoTools. Но, опять таки, это вам выбирать себе инструменты.
pdoTools как я понял больше был сделан для замены устаревших сниппетов. А не для замены xPDO. Или я ошибаюсь?
Он был в первую очередь создан для более скоростных выборок данных из базы данных. Но на первых стадиях подавалось как замена xPDO, что на самом деле совершенно не соответствует действительности и что и вызывало у меня такую негативную реакцию. По факту, во-первых, это не работает без xPDO (может, но потеряет всю гибкость, которую дает xPDO), а во-вторых, требует знания xPDO все-таки, чтобы можно было строить гибкие запросы. Вот вся пагубность, которую я вижу, состоит в том, что здесь идет обучение синтаксису pdoTools, а не самому xPDO. Наши процессоры может и менее удобные местами (хотя на самом деле нет, это уже кому как что подходит), но зато используется чистый xPDO. Когда вы освоите чистый xPDO, вы можете хоть с нашими процессорами работать, хоть без них (с тем же pdoTools или чистым MODX API).
Но на первых стадиях подавалось как замена xPDO, что на самом деле совершенно не соответствует действительности и что и вызывало у меня такую негативную реакцию.
Коль, вот откуда ты это берёшь?
Я пишу о том, что все запросы строятся через него, но выборка работает через PDO и лишние объекты не создаются. Может ты дашь какую-то ссылку, где я заявлял о том, что pdoTools заменяет xPDO?
Ведь я везде подчеркиваю, что он используется для составления запросов, но не используется для выборки.
А кстати Василий, хочу Вам сказать спасибо. Вы большой человек с большой буквы Ч. Не знаю прав ли Николай или нет. Да это для меня по факту и не важно. Ваш pdoTools мне очень помог, я уже начинал приунывать, как наткнулся на сие чудо. Скорость загрузки чертовски уменьшилась. Спасибо Вам огромное за труды и низкий поклон. Для нас недопрограммистов это как дар божий)))
Василий, читай первое же предложение в своей статье:
Давно изместно, что xPDO не нужен для выборки и вывода большого количества данных. Зачем его использовать, создавая кучу объектов, жрать процессор и память, если мы хотим просто выбрать 100 строк из БД и вывести их на экран?
На это же предложение ссылаются и здесь. Там эта мысль развита, пусть не тобой, но с твоей подачи (информационной). И это не единственный источник, на который я натыкался. Все-таки в мою бытность появился твой инструментарий, и изначально была конфронтация на фоне подачи этого компонента именно как замене и спасению, а не синтаксическому сахару.
Всё так? pdoTools действительно выбирает данные через xPDO и выводит их массивами, а не объектами. Отсюда огромный прирост производительности. У меня есть отдельная статья, где это всё подробно расписано и я на неё ссылаюсь.
Ни в этой статье, ни в той я не говорю о замене xPDO чем-нибудь. Я говорю о том, что его можно использовать выборочно и только тогда, когда нужно.
Давай мы всё-таки определимся, где именно я говорил о замене, или ты признаешься, что просто неверно меня понял и сам это придумал.
Редактирования нет, поэтому пишу отдельно исправление первых 2х предложений:
Всё так. pdoTools действительно выбирает данные через PDO и выводит их массивами, а не объектами.
На здоровье!
Василий, еще раз:
Давно изместно, что xPDO не нужен для выборки и вывода большого количества данных. Зачем его использовать, создавая кучу объектов, жрать процессор и память, если мы хотим просто выбрать 100 строк из БД и вывести их на экран?
У тебя изначально посыл на то, что если есть pdoTools, то xPDO не нужен. Но это совершенно не так, так как без xPDO у тебя не работает твой pdoTools.
Всё так. pdoTools действительно выбирает данные через PDO и выводит их массивами, а не объектами.
Василий, вот ты для кого сейчас эту жевачку публикуешь? Для меня или для масс? Мне ты хочешь объяснить что и как где работает? Давай сразу уточним, что xPDO сам выборки из БД тоже не делает, он использует для этого как раз PDO. Посмотри тот же метод xPDO::exec(). Используется $this->pdo.
А теперь посмотри свой же класс pdoFetch. Сколько раз там встречается вызов $this->modx->newQuery()? 4 раза. А что возвращает этот метод? xPDOQuery Object. И там же ты использует конструкции типа $q->fetch() (который чисто xPDO-ошный) и $q->stmt->fetch() (являющийся частью xPDO-объектов).
Я не буду в самые дебри лезть (типа xPDOObject::_loadRows() и т.п.), но я уверен, ты заглядывал туда, и знаешь, как много общего у твоего компонента с оригиналом.
И еще раз резюмирую: твой подход был изначально такой: «xPDO — плохое зло, и вот pdoTools всех нас спасает, всем можно отказываться от ненавистного xPDO, теперь всем есть счастье.» Уточняю: xPDO — это неотъемлемая часть MODX, и говоря, что xPDO зло и вот вам замена, ты говоришь, что MODX без твоего pdoTools отстой и ущербный. Я же говорил и говорю, что ты не прав в этом. xPDO был крут, крут и остался, и его ты в своем компоненте использует. И скорее всего правильней было назвать его xPDOTools, учитывая, насколько он тесно связан именно с xPDO. И никому не говорить, что xPDO плох. А еще у тебя есть параметр checkPermissions, и если он передан, то у тебя будет выполняться проверка на записи. А через что проверка будет идти? Так же через создание объектов. И посмотри сколько у тебя вызовов $this->modx->newObject() в pdotools.class.php.
И напоследок: я опросил несколько человек, не создавалось ли у них ощущения, что pdoTools преподносится именно как замена xPDO. Ответ был «ну да, есть такое дело». Потому перечитай внимательно свой топик и подрихтуй его так, чтобы он не наводил на такие мысли, а не убеждай через два с лишним года, что все не так, как говорилось об этом изначально. У меня достаточно знаний, чтобы здесь уловить технические тонкости.
И еще раз резюмирую: твой подход был изначально такой: «xPDO — плохое зло, и вот pdoTools всех нас спасает, всем можно отказываться от ненавистного xPDO, теперь всем есть счастье.»
Ты это сам выдумал. И теперь пытаешь меня убедить в том, что так считаю.
И напоследок: я опросил несколько человек, не создавалось ли у них ощущения, что pdoTools преподносится именно как замена xPDO. Ответ был «ну да, есть такое дело».
А я спросил другие несколько человек. Они сказали, «ну нет, нет такого дела». Аргументация на грани фантастики.
Я нигде не писал о замене. Я писал о том, что xPDO можно использовать выборочно. И ссылался на эту статью, где написаны разные способы работы, с замерами скорости и ОЗУ. Помоему, там всё понятно написано и без твоих домыслов.
В pdoTools xPDOQuery используется, для построения запроса, а xPDOObject не используется, отсюда большой прирост скорости и экономия памяти.
В общем, или найди где я заявляю о замене xPDO, или говорю, о том что он плохой, или давай ты уже перестанешь мне приписывать этот бред. Идёт?
Я дополнительно искать ничего не буду, ибо мое мнение останется прежним. Но то, что ты говоришь, что это не так и я не прав, для меня этого более чем достаточно. Во всяком случае от тебя теперь есть официальная информация что есть что. Думаю, спор можно считать закрытым.