• Где хранить различные данные при написании приложения на ReactJS?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    Ответ написан
    Комментировать
  • Насколько адекватно требовать домашнего развития от разработчиков?

    @majstar_Zubr
    C++, C#, gamedev
    Это вполне адекватно, потому что в таком случае работодатель преследует лишь одну цель - помочь вам как можно скорее найти другое место работы.
    Ответ написан
    1 комментарий
  • Какие шаблоны проектирования js применяются на практике чаще всего?

    @DiGiTAll
    Hype Driven Development
    Ответ написан
    Комментировать
  • Какие шаблоны проектирования js применяются на практике чаще всего?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    какие паттерны применяются чаще всего на практике и где

    Сразу отмечу, что все это чисто мое имхо, которое может не совпадать с мнением окружающих. В контексте фронтенда обычно все довольно просто. По моим наблюдениям в среднем сайте могут иметь смысл:
    1. Модули (делим код на независимые части)
    2. Фабрики (для компонентов интерфейса)
    3. Синглтоны (для хранилищ, точек сбора полифиллов / утилит и.т.д.)
    4. Адаптеры (для зависимостей и полифилов, которые могут измениться / выпилиться)
    5. Наблюдатели (для сбора происходящих событий в одном месте)
    6. Хранители (для сохранения действий пользователя и "Ctrl-Z")
    7. Стратегии (если действуем в зависимости от прилетевших данных)

    Другим паттернам применение вижу редко, только если под какую-то замороченную бизнес-логику. Хотя кого я обманываю, на среднем сайте обычно происходит только один паттерн - доширак из костылей. Ну и стоит сказать, что SPA-фреймворки имеют свойство навязывать свои подходы к решению задач, но это отдельная тема.

    Важно понимать, что паттерны проектирования - это просто хорошие идеи по поводу того, как организовать большой объем кода в той или иной ситуации. Это не "изучи тайное знание, запомни, и делай так всегда", не "используй паттерны, потому что великие их используют", это скорее "если не уверен как организовать код, возьми готовую идею, она вроде работает". Если вы будете просто решать задачи, то через N лет практики вы сами их все "изобретете", только не будете знать, что у них есть названия. Эффективно будет организовать себе заметку о том, какие из этих идей для чего примерно применяют, а потом, в процессе работы, в нее подглядывать, если встал вопрос "как организовать этот код".
    Ответ написан
    7 комментариев
  • Решать задачи VS Продолжать учиться?

    Martovitskiy
    @Martovitskiy
    codewars хорошо
    learn.javascript - тоже хорошо
    практические знания - возьмите проект, например интернет-магазин или блог и пытайтесь реализовать (запоминается быстрее)
    Ответ написан
    2 комментария
  • Решать задачи VS Продолжать учиться?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Начать решать задачи, теория без практики мертва.
    Ответ написан
    2 комментария
  • Решать задачи VS Продолжать учиться?

    heksen
    @heksen
    Написать свой небольшой проект.
    Ответ написан
    Комментировать
  • Что лучше использовать RedBeanPHP или фреймворк?

    sandu2d
    @sandu2d
    Человек
    Что нравится то и используй. Всё равно в начале пути одно говно будешь делать как и все мы :)
    Ответ написан
    1 комментарий
  • Как сделать так, чтобы цифры в сгенерированном массиве не повторялись?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    const Array = [];
    
    while (Array.length < 4) {
        const rand = Math.floor(Math.random() * 9) + 1;
        if (!Array.includes(rand)) {
            Array.push(rand);
        }
    }
    Ответ написан
    3 комментария
  • Какой смысл использования node.js и прочего для backend?

    sim3x
    @sim3x
    если все заказчики, в основном, просят натяжку на CMS, где нужно понимание php
    False

    на CMS, где нужно понимание php
    False

    на каком уровне нужно знать backend
    на уровне - я знаю как решить данную проблему за Х часов, я ее уже решал минимум два раза
    Ответ написан
    1 комментарий
  • Как правильно повесить обработчик события?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Потому, что в первом случае вы передаете возвращаемое значение функции, а во втором функцию, которую нужно выполнить.
    т.е. element.addEventListener ожидает вторым аргументом функцию, которую следует выполнить. Вот этот кусок
    myFunc('arg')
    это вызов функции с аргументом 'arg', вызов функции будет произведен сразу, и его результат (который будет передан в return функции) будет передан в element.addEventListener. Вы конечно же можете в myFunc вернуть функцию, тогда будет работать.
    также можно написать так
    element.addEventListener( "click" ,  myFunc.bind(null, 'arg') );

    метод bind создает и возвращает функцию обертку, при вызове которой, в нее будет подставлен аргумент 'arg'.
    Ответ написан
    Комментировать
  • Обучение в хорошем вузе с "проблемами" или обучение в "так-себе" вузе, но "без проблем"?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    У вас так все просто, «поступлю в ИТМО, ну или, так и быть, в ЛЭТИ». Вы хоть приблизительно представляете то, что так легко планируете? По теме: пункт 1, вне всяких сомнений. «Корочка» такого ВУЗа - хороший пропуск на хорошую работу. Знания пригодятся не все, но умение думать - ещё как.
    Ответ написан
    Комментировать
  • Дайте оценку верстке?

    @Flying
    Визуально выглядит вполне пристойно и очевидных косяков почти нет, но если копнуть глубже - возникают вопросы.

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

    Из наиболее заметного - заглавная картинка с автомобилем в PNG которая занимает почти 600кб и из-за этого грузится весьма и весьма неспешно (и заметно для пользователя). В целом это по большей части косяк дизайнера, не приложившего усилий к тому чтобы выбрать правильную графику (автомобиль снят явно на улице и отражения в стёклах дают существенный вклад в визуальный шум и, как следствие, в размер картинки, нужно было выбирать фотографию сделанную в специальном помещении). Кроме того дизайнер, очевидно, не слышал про требования к такси в Нью-Йорке и рисовал как взбредёт в голову, но оставим это на его совести. Сочетание фоновой картинки, на которой весь траффик едет в обратном направлении и делает автомобиль такси нарушающим правила дорожного движения - тоже на совести дизайнера.

    Однако и в этом случае и, тем более, в случае фоновых изображений ниже по странице вы допускаете ошибки с выбором форматов файлов, способами их вставки в страницу и оптимизацией. К примеру из картинки с автомобилем можно выжать почти 100кб просто за счёт использования оптимизаторов. Гораздо грустнее ситуация с фоновыми картинками ниже по тексту. Во-первых вы сохраняете фотографии в PNG, получая на выходе файлы по мегабайту, хотя они же в JPEG занимали бы в 5-10 раз быстрее. Во-вторых вы, скорее всего, сохранили фоновые картинки уже обработанными (затемнёнными). Я не видел макета, но предположу что там эти картинки стоят в их оригинальном виде и на них наложены какие-нибудь фильтры. На первый взгляд кажется что проблемы нет, но на практике (в случае вёрстки для реального сайта) вы вынуждаете человека который будет поддерживать сайт либо готовить картинки с такой же пост-обработкой либо мириться с тем что стиль сайта меняется. Правильное решение здесь - грузить картинки как они есть и реализовывать фильтры на CSS, тем более что здесь это делается элементарно через multi background или псевдо-класс с полупрозрачным фоном. Очевидно также что для таких тёмных картинок вполне можно использовать JPEG с меньшим качеством и тем самым существенно сэкономить пользователям трафик.

    Ещё одна проблема связанная с фоновыми картинками - вы не подкладываете под них близкий по цвету solid color. Попробуйте включить в dev.tools "Network throttling", отключить кэш и перегрузить свою страницу - думаю вы поймёте что я имею в виду - белые блоки с белым текстом стоят довольно продолжительное время, постепенно заполняясь довольно тёмными картинками. Если бы background-color под ними был бы чёрным - проблемы бы не было.

    Далее - логотип. Обычно логотипы разрабатываются отдельно и даже если он выглядит просто набранным шрифтом - это вовсе не значит что это не так. Логотип Google, Microsoft или Яндекс - тоже просто название, но, надеюсь вы не сверстаете их, написав надпись текстом? В общем логотип = картинка, лучше в векторе. Сейчас даже одно съезжание слогана на пиксель влево относительно названия уже рушит всю конструкцию логотипа.

    Обратите внимание на то как вы работаете с формами. Все поля в форме являются <input type="text">, хотя часть названий явно намекает на date / time селекторы, а "Choose Vehicle" - на список выбора.

    Хотелось бы отметить работу с иконками - их всё-таки лучше хранить в SVG и либо требовать с дизайнера либо подбирать на том же Icon Finder. При этом оформление (те пресловутые жёлтые кружки) лучше делать через CSS т.к. это позволяет вам существенно гибче работать с размерами элементов.

    Есть всякие недочёты касающиеся responsive, к примеру, внимание как отображается блок "Our Tariffs" в размере чуть более 600px, в частности название тарифа и описание.

    Пожалуйста обратите внимание на то что вы используете два разных меню для desktop и mobile представления. В целом в вашем случае меню довольно простое и можно было бы обойтись одним. Конечно две копии используют часто, но у этого решения есть свои недостатки (в частности отсутствие синхронизации состояния), так что вы должны осознанно принимать решение по таким вопросам. Кроме того inline обработчики onclick там явно могут быть заменены на элементарный
    document.querySelectorAll('.menu a, .menu-hover a').addEventListener()
    что явно сделает код более простым и поддерживаемым.

    Ещё один важный момент который зачастую опускают при вёрстке - поведение макета с реальными данными. То что дизайнер в макете понапихал везде lorem ipsum и тексты примерно одинакового размера - отнюдь не означает что на реальном сайте эти условия будут соблюдаться. Отсутствие навыка проверять поведение макета в изменяющихся условиях ведёт к множеству ошибок которые не видны в условиях синтетических данных. К примеру попробуйте в блоке "We Do Best Than You Wish" (претензии по поводу английского языка оставим в стороне) в любом из элементов банально увеличить количество текста в 2-3 раза. В Chrome это приводит только к излому сетки, в Firefox - ещё и к изменению размера иконки. При этом я предполагаю что Firefox ведёт себя правильно т.к. пропорции элементов изменились, а ограничения размеров на картинки у вас не заданы.

    В целом похоже что макет верстался и проверялся только в Chrome. К примеру посмотрите как ведёт себя картинка с рукой и телефоном в Firefox при изменении размеров. Опять же Firefox вполне корректен т.к. вы не обрезали картинку корректно, предпочитая выгрузить "как есть" и подгонять положение в CSS, но забыв при этом про overflow: hidden для контейнера.

    Теперь перейдём к CSS:

    Обратите внимание на то как вы подключаете внешний шрифт:
    family=Lato:400,700,700i,900,900i&amp;subset=latin-ext
    . Возникают два вопроса:
    1. Зачем вам subset=latin-ext на сайте где есть только базовая латиница?
    2. Как вы выбирали начертания? У вас подключаются 5 начертаний (400, 700, 900 + два italic'а), при этом grep по CSS даёт значения font-weight 200, 300, 400, 500, 600, 800 и ни одного italic. Вам не кажется что эти множества почти не пересекаются?


    Кроме того вы постоянно забываете про fallback шрифты что на медленном интернете и при отсутствии инструкций для font loading приводит к невидимому контенту страницы на период загрузки.

    Отсутсвие ограничения по ширине для .wrapper приведёт к недопустимо широкому сайту на больших мониторах с высоким разрешением. Можете уменьшить масштаб страницы до 50% и полюбоваться результатом.

    В стилях повсеместно используются достаточно общие названия классов в global namespace. К примеру кто бы мог подумать что стилизует селектор .text? Вы уверены что нигде больше на сайте подобный селектор не встретится? Даже при дальнейшем развитии сайта? Другими словами именование селекторов - важная часть работы, вы можете использовать любую методологию (тот же БЭМ или что-то ещё) или разработать свою, но ваш код не должен ломаться при добавлении ещё пары блоков, особенно если это будет делать другой человек.

    Списки элементов, к примеру тот же .product-cont лучше делать именно списками, а не распихивать элементы по столбцам вручную, благо flexbox и column layout здесь всё прекрасно сделают за вас, зато имея одноранговый список вы обеспечите себе куда большую свободу действий.

    Использование id в качестве CSS селектора - плохая практика, но у вас таких мест немало, 11 штук.

    Уверен что мог бы найти ещё что-то, но надеюсь для затравки хватит, и так много получилось... :)
    Ответ написан
    4 комментария
  • Как Telegram так быстро реагирует на прочтение сообщения?

    @rPman
    Я не знаю как сделано в телеграмме, вполне возможно что просто быстрый сервер,.. к тому же даже размещение сервера на другом конце света даст пинг в 0.2 секунды, для человеческого восприятия это - мгновенно.

    Если надо еще быстрее, возможно использовать локальную сеть (этим пользуются торент клиенты к примеру), к тому же сканировать сеть не требуется, клиенты знают какой ip адрес им выдан, достаточно попытаться подключиться (при старте и периодически при смене сетевых настроек) по ним и держать соединение, тогда реакция будет мгновенной даже по меркам машины (пара миллисекунд).

    p.s. возможно вы воспитаны на тормозах http rest архитектуры, где для обмена сообщениями используются периодические опросы вместо постоянно открытого tcp или даже udp соединения?
    Ответ написан
    Комментировать
  • Как вы обновляете vue проекты на проде?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    CI/CD (Continuous Integration/Continuous Delivery) сервер ответ на ваши проблемы. Например, bitbucket pipelines, circle ci, gitlab pipelines, jenkins и т.д. Работает так:
    • сервер отслеживает пуши в определенные ветки, например, в master.
    • если в master пришли коммиты, то запускается определенный скрипт, который вызывает сборку (обычно еще перед этим запускаются тесты, если есть).
    • если сборка прошла успешно, то результат этой сборки кладется в отдельную папку -- это называется build artifact
    • этот build artifact тем или иным образом загружается на хостинг -- у всяких там AWS/Azure и т.п. облак обычно есть API для этого, можно передавать файлы через scp или sftp.

    Если вся инфраструктура локальная, то и CI/CD сервер обычно ставят локально, например, Jenkins или TeamCity. Но без выделенного админа/девопса проще в облаках настроить, наверное.

    P.S. это, конечно, годится не только для проектов на vue, а вообще для любого веба, включая бэкенд.
    Ответ написан
    Комментировать