Почему иногда стоит изобретать велосипед
Многие IT-специалисты будут убеждать всех в том, что «не нужно изобретать велосипед»: пользуйтесь готовыми модулями, в них есть почти всё, что вам нужно. Однако здесь речь пойдёт об обратном подходе: «пишите всё сами, если можете».
Взглянем на часть подключаемых библиотек/модулей среднего сайта:
Многовато, не правда ли? Мелкому или среднему проекту, скорее всего, столько не нужно. А появилось всё это добро из-за нежелания потрудится над собственной реализацией простых вещей или неоправданной спешки.
Так что же, все готовые решения плохие? Нет, но их редко используют по назначению. Канонический пример: нужно добавить на сайт простую галерею для просмотра фотографий. Средний программист при желании напишет её за день с учётом специфики проекта. Только делать он этого в большинстве случаев не будет, а подключит чей-нибудь громоздкий модуль с кучей настроек и улучшенной поддержкой IE 5.5.
Зато вполне разумно использовать, например, сторонние карты, т. к. на написание собственных у вас уйдут годы.
Единственным неоспоримым преимуществом готовых решений можно назвать повышение скорости разработки (кстати, большим преимуществом). Поэтому рассмотрим подробнее их недостатки для большинства проектов:
- Полуготовность. Сторонние модули можно сравнить с лапшой быстрого приготовления. Нужно изучить инструкцию, достать тарелку, распаковать содержимое, раздобыть воду, нагреть её, залить, подождать и ещё где-то найти ложку. Т. е. готовые решения нужно адаптировать под проект (а это не всегда хорошо и быстро получается).
- Низкий КПД. В JS-библиотеке порой содержатся тысячи функций. Сколько из них используется в проекте? 10? 50? Все остальные просто висят мёртвым грузом, увеличивая нагрузку на оборудование.
- Неоптимальная реализация. Сторонние модули претендуют на некую универсальность, поэтому в них содержится куча проверок и настроек, которые не нужны для вашего проекта. Собственное решение может работать в десятки раз быстрее.
- Отсутствие функционала. Очень часто в готовом решении есть 70% функционала, который вам нужен, но не 100%. Т. е. придётся использовать ещё один модуль или реализовывать остальное самостоятельно.
- Конфликтность. Несколько чужих модулей могут влиять на работу друг друга не лучшим образом. Найти и разрешить такие противоречия бывает нелегко.
- Непредсказуемость. Любая функция может работать не так, как ожидалось. Например, недавно попался текстовый редактор, который наотрез отказывался печатать букву «ё».
- Неисправимые ошибки. Почти любая программа содержит ошибки. Готовые подключаемые модули — не исключение. Проблема в том, что ошибку в собственном коде программист найдёт гораздо быстрее, чем в чужом. Некоторые компании вообще запрещают модифицировать свою интеллектуальную собственность.
- Платность. Мощные решения часто являются платными. Не все компании имеют средства для их покупки.
- Отсутствие гарантий безопасности. Вы уверены, что какая-нибудь чужая функция не передаёт внутренние данные компании третьим лицам?
Напоследок рассмотрим пример почти полного отказа от готовых решений на televizor-x.ru:
Что это за сиреневый туман? Это весь JS-код клиентской части сайта (кроме счётчика Метрики). Он занимает около 10 килобайт и вмещается в один FullHD экран. В коде реализованы:
- Работа с AJAХ-запросами.
- Галерея (переключение миниатюр, лупа, полноэкранный просмотр, предзагрузка, листание пальцами).
- Фильтр по характеристикам.
- Коррекция ввода в некоторых полях.
- Изменение URL без перезагрузки.
- Всплывающие подсказки для характеристик товаров.
- Поиск.
- Кнопки «поделиться в соцсетях».
- Скрытие/показ блоков на маленьких экранах.
- Вызов Яндекс.Метрики.
При необходимости код можно ещё оптимизировать.