Как стать автором
Обновить
3
0
Пан Алексей @pan-alexey

frontend

Отправить сообщение

История о V8, React и падении производительности. Часть 1

Время на прочтение8 мин
Количество просмотров13K
В материале, первую часть перевода которого мы публикуем сегодня, речь пойдёт о том, как JavaScript-движок V8 выбирает оптимальные способы представления различных JS-значений в памяти, и о том, как это влияет на внутренние механизмы V8, касающиеся работы с так называемыми формами объектов (Shape). Всё это поможет нам разобраться с сутью недавней проблемы, касающейся производительности React.


Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии5

Синтетический мониторинг производительности

Время на прочтение7 мин
Количество просмотров20K

Синтетический мониторинг производительности


Благодаря внедрению клиентского мониторинга производительности, мы с полной уверенностью можем диагностировать проблемные места проекта и составить план для дальнейшей оптимизации.


Однако было бы неплохо иметь инструмент, который еще на этапе разработки позволял бы выявлять возможные регрессы производительности. Именно так родилась идея о создании синтетического мониторинга.

Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии3

Создаем интернет-магазин на Nuxt.js 2 пошаговое руководство Часть 3

Время на прочтение20 мин
Количество просмотров15K


Как и обещал продолжаем.


В этой части:


  • создадим блоки товаров "С этим товаром также покупают" и "Интересные товары"
  • создадим иконку корзины с количеством товаров
  • подключим модальное окно с товарами в корзине
  • перепишем всю логику store
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии2

Утечка памяти в Nuxt на стороне сервера при использовании SSR (Server Side Rendering)

Время на прочтение4 мин
Количество просмотров12K
Привет, Хабр! Данная статья обязательна к прочтению всем, кто работает с Vue SSR, в частности с Nuxt. Речь пойдет об утечке памяти при использовании axios.

Предыстория


Пол года назад я попал на проект со стеком VueJS + Nuxt, его особенность была в том, что в проде постоянно умирали нодовские сервера(Nuxt) и на их места поднимались новые. По графикам и логам было видно, что оператива процесса ноды доходила до 100% и она падала с ошибкой out of memory. В это время на место убитого процесса поднимался новый, на что уходило порядка 30 сек., этого хватало, чтобы пользователи успели получить 502 ошибку. Очевидно, что где-то в коде была утечка памяти, которую нужно было найти.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+16
Комментарии20

Как пройти собеседование в GitLab, попасть в команду разработчиков Vue и стать Staff-engineer

Время на прочтение14 мин
Количество просмотров23K


В конце мая в нашем инстаграм-аккаунте выступала Наталья Теплухина — Vue.js core team member, GoogleDevExpret и фронтенд-разработчица. Мы анонсировали ее как Senoir, но за неделю до прямого эфира ее повысили и она стала первым Staff Frontend Engineer в Gitlab.

Наташа рассказала, как попасть в команду разработки фреймворка Vue, о его будущем, как попасть в Gitlab, почему джунам не стоит идти на удаленку, и о синдроме красной ручки, которыми страдают русскоязычные команды разработки.

Делимся расшифровкой и записью эфира.
Всего голосов 32: ↑26 и ↓6+34
Комментарии25

Vuex – решаем старый спор новыми методами

Время на прочтение3 мин
Количество просмотров9K

Во Vuex есть одна популярная практика — не использовать mapState и mapMutations. Вообще. Вместо это мы сразу же при создании нового значения в store делаем для него геттер, а для каждой мутации – экшен.


Что-то наподобие:


export default new Vuex.Store({
  state: {
    // 1
    count: 0
  },
  getters: {
    // 1
    count: (state) => state.count
  },
  mutations: {
    // 2
    increment(state) {
      state.count++;
    }
  },
  actions: {
    // 2
    increment({ commit }) {
      commit('increment');
    }
  }
});

Холивара не избежать. Это уже доказала вот эта статья. Опять в интернете кто-то не прав, и я должен доказать почему. И я докажу.

Читать дальше →
Всего голосов 7: ↑6 и ↓1+9
Комментарии18

Беги, PHPUnit, беги: как я оптимизировал время выполнения тестов

Время на прочтение5 мин
Количество просмотров6K

С самого начала работы над одним из web-проектов мы стремились к высокому уровню покрытия кода тестами, и на начальном этапе разработки я не задумывался об оптимизациях скорости их выполнения. Как результат, с ростом проекта, всё большим покрытием его тестами и ростом команды время выполнения тестов выросло с нескольких секунд до десятков минут. А наличие быстрых тестов может быть также важно как и производительность всего приложения.


Как я с этим боролся и что получилось в итоге?

Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии17

«Особенности» Тиндера

Время на прочтение3 мин
Количество просмотров88K

Informative


Бывают такие баги, которые, вроде как и угрозу безопасности не несут, но вред все-таки могут причинить. Интереснее всего, когда их и править никто не хочет, но и открыто о них нам не говорят. Часто в таких случаях разработчики утверждают, что это не баг, а фича. Именно о двух таких фичах в Тиндере и пойдет речь в посте.


Внимание! Перед тем, как рассказать аудитории Хабра об этих проблемах, мной были предприняты попытки сообщить о них разработчикам через платформу HackerOne. Разработчики посчитали это все “не багами”, а репорты были закрыты в статусе “informative”, дважды!



Читать дальше →
Всего голосов 60: ↑56 и ↓4+74
Комментарии29

Руководство по CI/CD в GitLab для (почти) абсолютного новичка

Время на прочтение13 мин
Количество просмотров351K

Или как обзавестись красивыми бейджиками для своего проекта за один вечер ненапряжного кодинга


Наверное, у каждого разработчика, имеющего хотя бы один пет-проект, в определённый момент возникает зуд на тему красивых бейджиков со статусами, покрытием кода, версиями пакетов в nuget… И меня этот зуд привёл к написанию этой статьи. В процессе подготовки к её написанию я обзавёлся вот такой красотой в одном из своих проектов:


результаты


В статье будет рассмотрена базовая настройка непрерывной интеграции и поставки для проекта библиотеки классов на .Net Core в GitLab, с публикацией документации в GitLab Pages и отправкой собранных пакетов в приватный фид в Azure DevOps.


В качестве среды разработки использовалась VS Code c расширением GitLab Workflow (для валидации файла настроек прямо из среды разработки).

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии9

Телефон для коня и оркестр без пианиста. Как придумать спортивные задачи по фронтенду

Время на прочтение8 мин
Количество просмотров7.2K

Привет! Меня зовут Дмитрий Андриянов, я работаю разработчиком интерфейсов в Яндексе. В прошлом году я участвовал в подготовке нашего онлайн-соревнования по фронтенду.



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

Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии9

Руководство по SQL: Как лучше писать запросы (Часть 2)

Время на прочтение11 мин
Количество просмотров53K
Продолжение статьи Руководство по SQL: Как лучше писать запросы (Часть 1)

От запроса к планам выполнения


Зная, что антипаттерны не статичны и эволюционируют по мере того, как вы растете как разработчик SQL, и тот факт, что есть много, что нужно учитывать, когда вы задумываетесь об альтернативах, также означает, что избежать антипаттернов и переписывания запросов может быть довольно сложной задачей. Любая помощь может пригодиться, и именно поэтому более структурированный подход к оптимизации запроса с помощью некоторых инструментов может быть наиболее эффективным.

Следует также отметить, что некоторые из антипаттернов, упомянутых в последнем разделе, коренятся в проблемах производительности, таких, как операторы AND, OR и NOT и их отсутствие при использовании индексов. Размышление о производительности требует не только более структурированного, но и более глубокого подхода.

Однако этот структурированный и углубленный подход будет в основном основан на плане запроса, который, как вы помните, является результатом запроса, впервые проанализированного в «дерево синтаксического анализа» или «дерево разбора» («parse tree»), и точно определяет, какой алгоритм используется для каждой операции и как координируется их выполнение.
Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии5

Немного финансовой математики: расчёт инфляции и процентов

Время на прочтение18 мин
Количество просмотров11K
Недавно мне пришлось проверить расчёты, которые выполняют коммунальщики моего города. Возник спорный вопрос, разрешить который можно только лишь проведя корректные расчёты. Забегая вперёд, скажу, что коммунальщики считают неправильно. Поэтому здесь мы рассмотрим, как правильно начислять инфляционные затраты и 3% годовых на долг по обязательствам, согласно ГК Украины.

Первая часть описывает расчёт инфляционных затрат, это специфично для Украины.
Вторая (большая) часть будет посвящена вопросу расчёта 3% годовых. Она также применима и к РФ, РБ и РК, но в этих странах ставка не является фиксированной, а зависит от ставки рефинансирования ЦБ. Остальные страны не смотрел.

Вторая часть очень близка к расчётам процентов по обычным кредитным сделкам (кредиты, ссуды, займы и пр.).

image alt

Сначала теория, в конце немного кода.

Всё это под катом.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии0

PSR-14 — главное событие в PHP

Время на прочтение4 мин
Количество просмотров20K
В прошлом году PHP-FIG — Группа концепций совместимости PHP, выпустила несколько новых спецификаций. Последняя из них — PSR-14, посвящена диспетчеризации событий. Как и другие PSR, это локальная спецификация, но имеет большое влияние на многие аспекты стандартизации.

От переводчика: Это перевод первой части целой серии публикаций, в которой Larry (Crell) Garfield, один из членов PHP-FIG, объясняет, что такое PSR-14, на что способен, а на что нет, и как лучше всего использовать его в своих проектах.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии27

Логирование в распределенном php-приложении

Время на прочтение17 мин
Количество просмотров40K


В статье пойдет речь о том, какую пользу оказывает логирование. Расскажу о логах по PSR. Добавлю немного личных рекомендаций по работе с уровнем, сообщением и контекстом логируемого события. Будет приведен пример, как можно организовать логирование и мониторинг с помощью ELK в приложении, написанном на Laravel и запущенном через Docker на нескольких инстансах. Распишу важное правило системы оповещения. Приведу пример скрипта, который поднимает одной командой весь стек мониторинга.

Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии16

Как мы делаем Спортмастер

Время на прочтение7 мин
Количество просмотров13K
Всем привет! Уверен, многие из вас когда-нибудь покупали майку, мяч, кроссовки, ну или какой-нибудь другой спортивный инвентарь в наших магазинах, но мало кто знает, что из себя представляет Спортмастер с технической точки зрения.


Немного Спортмастера образца 2003 года с сайта web.archive.org

Меня зовут Дмитрий, я старший java-разработчик в компании Спортмастер, и сегодня я хотел бы рассказать о нашем интернет-магазине, о том, какой путь он проделал, чтобы стать тем, каким вы его знаете сейчас: с чего мы начинали, как развивались, что получилось, а что нет, о проблемах сегодня, и о планах на будущее. Интересно? Добро пожаловать под кат!
Читать дальше →
Всего голосов 43: ↑31 и ↓12+19
Комментарии31

Опыт интеграции онлайн кассы Атол с собственной торговой CRM

Время на прочтение6 мин
Количество просмотров22K
Вокруг онлайн касс в последнее время дикий ажиотаж, 1 июля 2019 заканчивается последняя отсрочка, поэтому и мне пришлось заняться этим вопросом. Тем, у кого 1С или другая система особо можно не напрягаться, но если у вас собственная самописная система, то на ваши плечи ложится еще и интеграция с онлайн-кассами.

Мой опыт пригодится для интеграции с кассами Атол в режиме обмена данными по сети, ваша программа может отправлять данные на web-сервер Атол как на локалхост, так и по локальной сети, можно хоть из браузера AJAX отправлять, хоть с сервера через CURL, поэтому, неважно на каком языке написан ваш корпоративный софт, всё кроссплатформенно.
Читать дальше →
Всего голосов 9: ↑8 и ↓1+7
Комментарии28

10 лучших JavaScript библиотек для визуализации данных на графиках и диаграммах

Время на прочтение9 мин
Количество просмотров150K
Есть в графиках что-то магическое. Изгиб кривой мгновенно раскрывает всю ситуацию — историю развития эпидемии, паники или периода процветания. Эта линия просвещает, пробуждает воображение, убеждает.
Генри. Д. Хаббард
Объемы данных, с которыми нужно работать, постоянно увеличиваются. И чем больше информации, тем сложнее ее обрабатывать. Вот почему сейчас стала особенно популярна тема визуализации данных — в виде графиков, диаграмм, дашбордов, желательно интерактивных. Визуальное представление данных позволяет нам, людям, тратить меньше времени и сил на их просмотр, анализ и осмысление, а также на принятие правильных, информированных решений на основе этого.

Вряд ли кто-то станет отрицать, что в современном HTML5 вебе JavaScript — самая универсальная и простая технология для визуализации данных. Так что, если вы занимаетесь фронтенд-разработкой, то вы, скорее всего, либо уже имели дело с созданием JS чартов, либо столкнетесь с этим в (скором) будущем.

Существует множество JavaScript библиотек для построения графиков и диаграмм, каждая из которых (как и любые другие инструменты) имеет свои плюсы и минусы. Чтобы облегчить вам жизнь, я решил рассказать о тех из них, которые нравятся мне больше всего. Я считаю, десять следующих библиотек — это лучшие JS библиотеки для создания графиков, и они действительно способны помочь решить практически любую задачу по визуализации данных. Давайте вместе пройдемся по списку и убедимся, что они вам известны хотя бы базово и вы не упустили из виду какую-нибудь хорошую библиотеку, которая может оказаться полезной в текущих или будущих больших проектах.

Заглавная картинка: визуализация данных на графиках и диаграммах

Что ж, приступим: вот лучшие JS библиотеки для визуализации данных!
Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии29

Раздаем файлы с Google Drive посредством nginx

Время на прочтение4 мин
Количество просмотров13K

Предыстория


Так уж случилось, что нужно мне было где-то хранить более 1.5тб данных, да еще и обеспечить возможность скачивания их обычными пользователями по прямой ссылке. Поскольку традиционно такие объемы памяти идут уже на VDS, стоимость аренды которых не слишком вкладывается в бюджет проекта из категории «от нечего делать», а из исходных данных у меня был VPS 400GB SSD, куда при всем желании 1.5тб картинок без lossless сжатия поместить не удастся.

Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии25

Разработка гибридных PHP/Go приложений с использованием RoadRunner

Время на прочтение18 мин
Количество просмотров24K
Классическое PHP-приложение — однопоточность, тяжелая загрузка (если вы, конечно, не пишите на микрофреймворках) и неизбежная смерть процесса после каждого запроса… Такое приложение тяжелое и медленное, но мы можем дать ему вторую жизнь гибридизацией. Чтобы ускорить — демонизируем и оптимизируем утечки памяти, чтобы добиться большей производительности — внедрим собственный сервер РНР-приложений RoadRunner на Golang, чтобы добавить гибкости — упростим PHP-код, расширим стек и разделим ответственность между сервером и приложением. По сути, заставим наше приложение работать, как если бы мы писали его на Java или другом языке.

Благодаря гибридизации ранее медленное приложение перестало страдать 502 ошибками под нагрузками, уменьшилось среднее время ответа на запросы, производительность увеличилась, а деплой и сборка стали проще за счет унификации приложения и избавления от лишней обвязки в виде nginx + php-fpm.


Антон Титов (Lachezis) — технический директор и соучредитель SpiralScout LLC с опытом активной коммерческой разработки на PHP в 12 лет. Последние несколько лет активно внедряет Golang в стек разработки компании. Об одном из примеров Антон рассказал на PHP Russia 2019.
Всего голосов 46: ↑44 и ↓2+42
Комментарии3

Несколько версий PHP на хосте с помощью Docker

Время на прочтение4 мин
Количество просмотров11K
Часто перед разработчиками PHP встаёт задача проверить работу веб-приложения под несколько версий интерпретатора. Решить её можно разными способами. Можно банально установить разные версии PHP на один хост, но это чревато конфликтами библиотек и другими сложностями. Вторая крайность — сделать несколько изолированных виртуальных машин с разным окружением, но здесь не обойтись без чрезмерного использования аппаратных ресурсов и излишней траты времени на разворачивание рабочего окружения. На настоящий момент наиболее просто решить данную задачу можно с помощью Docker.

image
Читать дальше →
Всего голосов 24: ↑19 и ↓5+14
Комментарии28
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность