Оптимизация кода в мире, который не хочет оптимизировать

Опубликовано: 2019-11-22

Преждевременная оптимизация — корень всех зол.

Это распространенная поговорка среди разработчиков. Это имеет смысл. Преждевременная оптимизация может означать переделку работы в будущем, а время — самый ограниченный ресурс разработчика. Это может означать трату драгоценного времени на оптимизацию сценариев, которые еще не существуют для пользователей продукта. Это может означать написание кода, который сложнее понять, с неясным приростом производительности.

Около года назад, участвуя в группе проверки темы WordPress, я снова наткнулся на этот совет. Преждевременная оптимизация — корень всех зол. Ответ был адресован автору темы, который хотел уменьшить количество и вес скриптов, необходимых для загрузки их темы. С одной стороны, автор темы может загрузить скрипт размером 1,29 КБ без каких-либо зависимостей, чтобы выполнить свою работу. Другим вариантом было использование скрипта, зависящего от jQuery, включенного в ядро ​​​​WordPress, всего 105 КБ, потому что «большинство» сайтов WordPress все равно загружают jQuery.

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

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

За последний год этот разговор остался со мной. Это помогло мне лучше понять ужасающую тенденцию не только в сообществе разработчиков WordPress, но и в веб-разработке в целом. Слишком часто разработчики так далеки от обычных пользователей, и технология, на которую эти пользователи полагаются в этой оптимизации, не более чем второстепенна. Вместо этого он всегда должен быть в центре внимания любого разработчика.

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

Частью написания качественного кода является оптимизация этого кода на каждом этапе процесса разработки. Речь идет о принятии трудных решений по сокращению ненужных вещей по мере создания программного обеспечения. Кэширование должно быть последним средством после очистки всего остального.

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

Не все пользуются гигабитным интернетом

Большинство разработчиков, которых я знаю, пользуются сверхскоростным подключением к Интернету, часто со скоростью загрузки 1 Гбит/с и безлимитным трафиком. В этой ситуации легко забыть, что большие части мира все еще используют медленные соединения с ограничениями данных.

Некоторые могут даже ассоциировать медленные соединения со странами третьего мира, где миллионы людей используют технологию сотовых телефонов 2G. Однако в Соединенных Штатах и ​​других развитых странах есть большие территории, где нет прямых кабельных линий или линий DSL, которые обычно доступны в городах и пригородах.

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

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

Для такой технологически развитой страны многие ее жители едва догоняют то, что было десять лет назад.

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

Хотя это анекдотично, это суровая реальность сельской жизни в карманах США.

Преимущество жизни в глуши Алабамы в том, что она изменила мою точку зрения как разработчика. Это означало, что мне нужно было подвергать сомнению каждое решение кода для каждого созданного мной плагина и темы. С ограничениями данных мне нужно было убедиться, что я не использую слишком много ресурсов.

Более того, наличие ограничения данных изменило то, как я использовал Интернет. Сейчас у меня блокировщик рекламы. У меня есть расширение для уничтожения видео из автозагрузки. Я отключаю JavaScript на тяжелых сайтах, которые мне нужно использовать. Некоторые сайты кажутся интересными, но я никогда не возвращаюсь к ним, потому что они пожирают ресурсы.

Когда вы живете в месте, где каждый байт имеет значение, вы стремитесь не тратить их впустую.

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

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

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

Темы и плагины, которые создают разработчики WordPress, никогда не должны быть узким местом для веб-сайта. Мы можем сделать лучше.