Задать вопрос
  • Есть разница: передам я в метод класса большой массив или предварительно сделаю из него выборку и передам только его небольшой фрагмент?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Массивы в РНР передаются методом copy-on-write.
    Это означает, что потребление памяти вырастет только в том случае, если массив внутри функции будет изменён.
    Соответственно, если переданный массив будет изменяться, то лучше вырезать.
    Если будет только читаться, то проще передать целиком.
    Ответ написан
    2 комментария
  • Почему суммируются строки, а не числа?

    werty1001
    @werty1001
    undefined
    Это особенности JS, у вас две строки и происходит конкатенация, вот так уже будет сложение.

    function summa(number1, number2) {
            var total = +number1 + +number2;
            return total;
    }
    Ответ написан
    Комментировать
  • Как лучше хранить данные при пошаговой регистрации?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Всем привет. Хочу сделать пошаговую регистрацию на сайте. Как бы это сделать правильнее?
    Нет рецепта для общего случая. Всегда есть нюансы, если вы делаете что-то чуть в сторону от классики.

    1. После каждого шага сохранять в БД? Много запросов бессмысленных
    Ого, много это сколько? И почему бессмысленных? Вы же осмысленные данные туда пишете?

    У кого, какое мнение? Где какие подводные камни/нюансы?
    Мнение: С таким описанием нихрена не посоветуешь. По конкретным шагам можно что-то обсуждать.
    В целом же: Если первый шаг позволяет ввести все данные необходимые для входа в аккаунт, то писать надо в бд, ну и соответственно выслать письмо с подтверждением. В бд можно писать так же стадию прохождения. Если остальные пункты не являются критическими для функционала, можно предлагать при следующем логине дозаполнить данные, основываясь на записанном номере стадии. Ну или просот сразу перекидывать на нужную фазу, если она является необходимой.
    Ответ написан
    Комментировать
  • Как лучше хранить данные при пошаговой регистрации?

    @aleksejjjjj
    Поддержу Ипатьев. Вы хотите избавиться от 3-х запросов, чтобы что? У вас реально база рухнет от 3 запроса × на 10 регистраций в день?

    Можно конечно и на клиенте хранить, но смысл? Как минимум нужно валидировать каждый шаг. Вот прошёл юзер 10 шагов, отправил данные, а у вас fatal error на беке, такой email уже есть в базе. Усложняем логику в 10 раз, отправляем клиента на шаг #22, где он мыло вводил?

    В общем это не оптимизация, это выстрел себе в ногу на ровном месте. Ещё и юзера бесить будете
    Ответ написан
    Комментировать
  • Как лучше хранить данные при пошаговой регистрации?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    при сохранении в БД главная проблема не "бессмысленные запросы" (это какая-о дурацкая фобия, взять самый редко используемый функционал, и трястись над каждым запросом) а что потом делать с незавершенными регистрациями.
    Хранить на клиенте - это гонять уже введенные данные туда-сюда.
    Сессия для этого и придумана, чтобы хранить данные сеанса.
    Но в целом способ зависит от конкретных обстоятельств, например банки всегда сохраняют только в базу, чтобы потом дожать клиента, который оставил контакт на первом шаге.
    Ответ написан
    Комментировать
  • Как реализовываются микросервисные проекты?

    vabka
    @vabka Куратор тега Веб-разработка
    Под микросервисами обычно понимают N раздельных процессов, которые могут запускаться на разных компьютерах. Далее они уже коммуницируют через какой-то транспорт, если это вообще нужно.

    Это, например, два абсолютно разных проекта которые соединяются связью ? или это один проект, условный контейнер, и в нем создаются множество модулей ? что из этого реально является микросервисом и используется в реальности ?

    Как конкретно ведётся разработка - это уже на откуп команде. Подход легко может различаться исходя из языка/платформы.
    Ответ написан
    Комментировать
  • Как внедрять vue в проект на Yii2?

    copist
    @copist
    Empower people to give
    Ты сборку на базе webpack используешь?

    В Yii2 надо будет сделать два layout: один для обычных страниц (view/layouts/main.php), второй для страниц с Vue (view/layouts/vue.php)

    Для режима dev в файле view/layouts/vue.php нужно подключать JS скрипты, которые генерит npm start. Для этого открой исходный код страницы, которую раздаёт webpack и скопируй оттуда все подключенные <script>. Либо вручную, либо парсер напиши. Вроде бы у этих скриптов статичные имена, поэтому тут проще. Можно один раз скопировать и забыть.

    Для режима prod нужно в лэйауте view/layouts/vue.php подключать финальные сжатые JS скрипты, которые генерит npm run build - тут сложность в том, что эти скрипты с уникальными именами всегда.

    Попробую сделать пример на github
    Ответ написан
    5 комментариев
  • Yii2 Queue как остановить выполнение текущей задачи?

    REZ1DENT3
    @REZ1DENT3
    web-developer
    Если задача уже в работе, то её не остановить стандартными средствами Yii.

    Вы удалили задачу из очереди, но она уже в работе. Пока задача не выполнится, консьюмер будет работать.
    В случае с while (true) echo $i++; задача никогда не выполнится.
    Ответ написан
    2 комментария
  • Как правильно сравнить даты?

    @AnneSmith
    самая ленивая
    всегда все даты сравнивайте в timestamp и будет вам счастье
    Ответ написан
    Комментировать
  • Как создать очередь и запустить воркер динамически в yii2-queue?

    @sehav
    Мое решение:
    Отнаследовался от redisCommand
    use yii\queue\redis\Command;
    
    class RedisCommand extends Command
    {
        public function actionRun($channel = null)
        {
            if ($channel !== null) {
                $this->queue->channel = $channel;
            }
    
            return $this->queue->run(false);
        }
    }

    Подключил его в консольном конфиге
    'queue' => [
                'class' => \yii\queue\redis\Queue::class,
                'commandClass' => \app\commands\RedisCommand::class,
                'redis' => 'redis',
                'channel' => 'default', // Queue channel key
                'as log' => \yii\queue\LogBehavior::class,
            ]

    В консоли одноразово
    yii queue/run channel_group_1

    Для listen аналогично переопределите метод actionListen, только канал вторым параметром
    Команда будет выглядеть
    yii queue/run 3 channel_group_1
    Ответ написан
    Комментировать
  • Как правильно хранить контент поста?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Хранить html код в столбце поста кажется нецелесообразным по ряду причин:
    Угу, ага...

    Лишняя трата памяти на хранение html тегов
    Ого, а лишние это сколько? Экономия на байтах чаще всего приводит к тратам на вычислительные мощности. Некоторые расчеты чуть ниже.
    Уменьшение производительности (?)
    Производительности чего?

    Стили/компоненты могут изменяться, а код останется прежним
    Стили как раз и нужны для того, чтобы легко конфигурировать визуал, не привязываясь к коду. Код может быть каким угодно, но стилизация через теги пока что лучший вариант, который придумали разработчики.

    Использовать собственные минифицированные теги, благодаря которым определенный парсер будет воссоздавать нужные блоки с помощью компонентов (возможно динамичесих)
    Ага, переизобретаем BBCode, найс... Для понимания проблемы - такие коды придуманы для форумов, с целью ограничить использование хтмл в пользовательском вводе. При этом подходе он худо-бедно оправдан, хотя и требует постобработки при каждом выводе, а это использование регулярок, что как бы совсем не бесплатно. В вашем же случае, источник текста более-менее доверенный, и ограничение в тегах больше мешает чем помогает.
    Что касается экономии на "минифицированных" тегах, ну допустим сэкономите вы 100 байт на тегах, то есть на 1000 постов экономия будет.... ТА-ДАААМ! 0,1 мегабайта! А если экономия 1000 байт на пост, то целый МЕГАБАЙТ можно сэкономить! Похвальная рачительность.

    Хранить каждый элемент поста отдельно в бд со следующим содержанием (element_name, position, content, post_id), используя отношения к родительскому посту, соответственно сохранится структура и рендериться пост будет через соответствующие компоненты в нужном порядке (однако как будет именно рендериться в шаблоне поста пока неизвестно)
    Базовые элементы и так должны храниться отдельно, другой вопрос почему они у вас рендерятся в одном порядке, а в другом месте в другом порядке? Заголовок, короткое описание, текст, главное изображение - отдельные поля, оглавление по сути часть текста, зачем его выносить отдельно - загадка, это же такой же текст, котрый автор волен располагать . Вариант с внешней таблицей по сути приводит нас к выносу части данных в EAV(отличный пример универсализации в ущерб производительности), что как раз будет серьезно напрягать выборки бд, если понадобится делать какие-либо поисково-выборочные манипуляции по этим данным.
    Ответ написан
    6 комментариев
  • Как правильно хранить контент поста?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Использовать собственные минифицированные теги, благодаря которым определенный парсер будет воссоздавать нужные блоки с помощью компонентов (возможно динамичесих)

    20 лет назад этот вопрос был полнонстью решен с помощью технологий XML/XSLT/XPath.
    Языки C#/dotNet, Java поддерживают этот стек. И много других языков и библиотек.

    Потом еще создавали более простые вещи. Шаблонизаторы. Velocity, FreeMarker. Они немножко
    переворачивают постановку. Но их тоже можно рассмотреть.

    Хранить html код в столбце поста кажется нецелесообразным.

    С точки зрения суммарной стоимости владения (TCO) база данных всегда будет дороже
    чем файловая система. А самым дешевым будут хранилища типа Amazon S3, MS Blob, G-Drive.
    Ну если пересчитать удельно сколько стоит гигабайт.

    Хранить каждый элемент поста отдельно в бд со следующим содержанием (element_name, position, content, post_id),
    Тут - непонятно. Но есть такое эвристическое правило дизайна
    хороших NoSQL систем. Все данные для запроса должны лежать физически рядышком
    и не требовать дополнительных действий
    . В идеале - для отдачи поста вы должны сделать
    один единсвтвенный SELECT без joins и без подзапросов и агрегаций и без CONNECT-BY.
    Ответ написан
    2 комментария
  • Как вместо числа "5620", показывать "5,6K"?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Вы какой-то не тот интернет "облазили". Задача давно решена, ответ ищется за три секунды: https://www.google.com/search?q=thousands+to+k+php
    Но даже если предположить, что никто до вас такого не делал, то ведь это алгоритм на десять строчек...
    Ответ написан
    Комментировать
  • Yii как работать с датами?

    1. yiiframework.ru/forum/viewtopic.php?t=18206
    Там же и на 2 вопрос ответ, если я правильно понял.
    Ответ написан
    3 комментария
  • Yii2: как принимать только post запросы на action?

    @karminski
    Senior React.JS Developer
    Вообще то в Yii2 есть замечательная вещь как фильтры. Вам нужен VerbFilter. Курить мануалы тут: www.yiiframework.com/doc-2.0/yii-filters-verbfilte...
    Ответ написан
    Комментировать
  • Почему не срабатывает событие .click после pjax загрузки?

    bubandos
    @bubandos
    bash'у, javascript'ую, php'лю, css'аю, html'каю
    Вы перезагружаете содержимое контейнера, соответственно, у вас уже другой экземпляр кнопки создается.
    Поэтому и обработчика события на нем нет.
    Выхода два:
    1) после обновления контента вешать обработчик события заново.
    2) повесить обработчик на один из родителей и анализировать event.target, а заодно почитать про паттерн behavior и всплытие событий... например, тут )
    Ответ написан
    2 комментария
  • YII2 как получить старые значения модели?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Это не подойдёт?
    public function afterSave($insert, $changedAttributes)
    {
            var_dump($changedAttributes['desabilitado']);
            var_dump($this['desabilitado']);
            die;
            [...]
    }

    Напишите для чего нужно использовать.
    Ответ написан
    7 комментариев
  • Как вывести массив foreach в обратном порядке?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    у array_reverse есть второй параметр отвечающий за сохранение порядка ключей
    <?php
    $go = ['test1','test2','test3'];
    print_r(array_reverse($go, true));

    выведет
    Array ( [2] => test3 [1] => test2 [0] => test1 )

    более правильное решение если массив именно такой как ты указал, т.е. не ассоциативный
    <?php
    $go = ['test1','test2','test3'];
    
    for ($i=count($go)-1; $i>=0; $i--) {
         echo $i.' => '.$go[$i].'<br>';
    }

    выведет
    2 => test3
    1 => test2
    0 => test1
    Ответ написан
    Комментировать
  • Как перемещать страницу на нужную строчку таблицы?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Лучше всего делать это на jQuery, примерно так:

    var $rows = $("#main").find("tr");
    
    function goToRow (num) {
         var $target = $rows.eq(num);
         var y = $target.offset().top;
    
         $(window).scrollTop(y);
    }
    Ответ написан
    1 комментарий
  • Какое техническое решение выбрать под проект?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Но не знаю, какое техническое решение взять? Писать на нативном РНР? Взять готовый фрэймворк?

    Что знаете, на том и пишите.

    Если Вы задаёте вопрос про "фреймворки или нет", значит Вам темболее необходимо использовать фреймворк. Свой велосипед Вы в любом случае напишите хуже.

    Если Вы не разработчик, то наймите ПМ или разраба, он Вам и сообщит, на чем именно он будет писать.
    Ответ написан
    1 комментарий