Size: a a a

Иван Акулов про разработку

2017 December 05
Иван Акулов про разработку
Как оптимизировать изображения в Вебпаке

3. Уменьшать изображения с помощью image-webpack-loader.

image-webpack-loader сжимает png-, jpg-, gif- и svg-изображения, прогоняя их через оптимизаторы. Так как он просто пропускает изображения через себя и не вставляет их в бандл, его нужно использовать вместе с url-loader/svg-url-loader.

Стандартные настройки загрузчика — ок:

module.exports = {
 module: {
   rules: [
     {
       test: /\.(jpg|png|gif|svg)$/,
       loader: 'image-webpack-loader',
       // Применяем enforce: 'pre', чтобы вызвать загрузчик
       // перед url-loader/svg-url-loader и не дублировать
       // его в обоих правилах
       enforce: 'pre'
     }
   ]
 }
};
источник
Иван Акулов про разработку
— Почему это важно?
— Изображения занимают половину размера средней страницы. Это куча трафика, и уменьшить его очень легко.

— Что мне делать?
— Пойдите и добавьте эти загрузчики в конфиг.

— Какие побочные эффекты?
image-webpack-loader увеличивает время билда, поэтому лучше отключать его в режиме разработки (передайте опцию bypassOnDebug: true для этого)
url-loader и svg-url-loader убирают лишние запросы за изображениями, но ломают кеширование этих изображений и увеличивают время загрузки/парсинга JS-а. Если включать в бандл большие изображения или очень много изображений, это может привести к проблемам.

***

Есть что добавить? → @iamakulov
источник
2017 December 06
Иван Акулов про разработку
Два часа ночи. Самое время, чтобы полезть читать исходники вышедшей вчера альфы Вебпака 4 — https://twitter.com/iamakulov/status/938158771095986177
источник
2017 December 13
Иван Акулов про разработку
​​Текущее состояние ES-модулей в Node.js, письмо из руководящего технического комитета: https://medium.com/the-node-js-collection/the-current-state-of-implementation-and-planning-for-esmodules-a4ecb2aac07a

Коротко:
1. Поддержку ES-модулей, начиная с v8.9.0, можно включить флагом --experimental-modules

2. ES-модули пока что работают только в .mjs-файлах

(Почему это сделано так: ES-модули и CJS-модули работают немного по-разному, и Node.js нужно различать, в каком режиме парсить файл. Сейчас она понимает это по расширению)

3. Динамический import() уже есть за флагом --harmony-dynamic-import — но, кажется, пока не работает (у меня на v9.3.0 промисы из import() реджектятся)

4. Консенсуса по взаимодействию ES- и CommonJS-модулей пока что нет. То есть, возможно, подход с .mjs (см. пункт 2) позже поменяется на другой

(Например, Node.js сможет различать типы модулей не по расширению, а по тому, как вы их импортируете. Тогда для импорта CJS-модулей из ES-модулей нужно будет использовать import.meta.require())
источник
2017 December 14
Иван Акулов про разработку
💬 Ребята-организаторы FrontendConf попросили рассказать, что они ищут спикеров.

Я на конференции не был, но она выглядит интересно — в прошлом году, например, среди докладчиков были Яндекс, Avito, Рамблер и HTML Academy.

Подавайте заявки:
источник
Иван Акулов про разработку
Переслано от Artem Boychuk
Друзья, мы стартуем набор докладов на весенний фестиваль РИТ++ (http://ritfest.ru/) в рамках которого пройдет профессиональная конференция для фронтенд-разработчиков FrontendConf (http://frontendconf.ru/). 28 и 29 мая, Москва, Сколково.

Приглашаем докладчиков по темам: автоматизация и тестирование фронтенда, быстродействие интерфейса, оффлайн-страницы, кэширование, шаблонизаторы и препроцессоры, адаптивный дизайн и вёрстка, мобильные сайты и приложения, одностраничные приложения, JavaScript и node.js, пакетные менеджеры, генераторы статики, браузеры и новые API, AngularJS, React и другие JS-фреймворки, WebRTC, оптимизация изображений, в общем – всё, что касается фронтенда.

Условия участия простые – кроме (понятно) бесплатного участия в конференции, мы оплачиваем билеты до Москвы и проживание в одной из наших гостиниц. Подробнее: http://speakers.ritfest.ru/

В качестве затравки мы решили открыть видеозаписи всех докладов Frontend Conf 2017 – смотрите, надеюсь, что будет полезно:

https://www.youtube.com/playlist?list=PLH-XmS0lSi_zf4qPxvWDmMkf4foWonrH7

Спасибо! Любые вопросы задавайте на speakers@ontico.ru
источник
2017 December 15
Иван Акулов про разработку
Узнал про метод _.keyBy в Лодэше.

Он полезен, когда нужно превратить массив объектов в один объект с ключами-ID-шками (например, в Редаксе).

(Раньше я для этого писал громоздкие редьюсы)
источник
2017 December 19
Иван Акулов про разработку
источник
Иван Акулов про разработку
Хинт: если в Реакте вы вычисляете стейт на основании пропов, делайте это в componentWillReceiveProps(), а не в componentDidUpdate().

Когда вы вызываете setState() из componentDidUpdate(), вы заставляете Реакт перерендерить компонент ещё раз — сразу после предыдущего рендера. Это может ухудшить производительность.

(Только что обнаружил, что сам сделал эту ошибку.)
источник
2017 December 25
Иван Акулов про разработку
Введение в DNS: как это всё работает + типы записей — https://www.digitalocean.com/community/tutorials/an-introduction-to-dns-terminology-components-and-concepts

Коротко:
— DNS-сервера преобразуют адрес сайта (example.com) в IP (123.123.123.123)

— Сервера конфигурируются таблицами, где каждая строчка — это запись — правило преобразования

— Главные типы записей — это
A и AAAA (говорит, что example.com — это IP 123.123.123.123),
CNAME (говорит, что IP для example.com нужно искать на другом домене — например, example2.com) и
MX (говорит, на какой домен нужно посылать почту, отправленную на example.com)

— Посмотреть любые DNS-записи для любого домена можно с помощью утилиты dig

#учу_nodejs_в_продакшене
источник
2017 December 26
Иван Акулов про разработку
​​Хинт: есть библиотека react-hoc, которая берёт на себя рутину по созданию компонентов-обёрток: https://www.npmjs.com/package/react-hoc

— Пробрасывает статические свойства с обёрнутого компонента
— Устанавливает нормальный displayName вроде тех, что в реакт-роутере ( withRouter(MyComponent))
— Добавляет поле WrappedComponent, которое ссылается на обёрнутый компонент
источник
2018 January 02
Иван Акулов про разработку
источник
Иван Акулов про разработку
Написал новый пост!

Почему API вроде
_.get(object, ['deep', 'property'])
лучше, чем
_.get(object, 'deep', 'property')
— и как вам это учитывать, когда вы делаете свои интерфейсы.

https://iamakulov.com/notes/apis-arrays/
источник
Иван Акулов про разработку
iamakulov_channel
Написал новый пост!

Почему API вроде
_.get(object, ['deep', 'property'])
лучше, чем
_.get(object, 'deep', 'property')
— и как вам это учитывать, когда вы делаете свои интерфейсы.

https://iamakulov.com/notes/apis-arrays/
Хотя, на самом деле, это я достал черновик годовой давности, к которому никак не мог найти идеального примера, и решил опубликовать как есть. Не будьте слишком перфекционистами, как я тут.

Но, кстати, если вы встречали популярные API, которые сначала сделали с переменным числом аргументов, а потом переделывали на массив, расскажите: @iamakulov
источник
2018 January 04
Иван Акулов про разработку
Если вы уже слышали про уязвимости с современными процессорами (а если не слышали, то вот: https://t.me/alexmakus/1579), то, наверное, знаете, что фикс первой из них (Meltdown) приведёт к падению производительности компьютеров на 5-30%.

А вот вторая (Spectre), оказывается, заденет даже фронтенд:
источник
Иван Акулов про разработку
источник
Иван Акулов про разработку
источник
Иван Акулов про разработку
Вот для чего отключаются эти API
источник
Иван Акулов про разработку
А вот proof-of-concept атаки из JavaScript-а: https://twitter.com/dan_abramov/status/948743080630542336
источник
2018 January 09
Иван Акулов про разработку
Рассказываю, насколько мы близки к ванильному CSS без препроцессорного сахара — http://andrew-r.ru/notes/?go=all/preprocessors-vs-vanilla-css/
источник