Ниже приводится заявление, сделанное мне недавно в Twitter кем-то по имени Дэвид Леульетт (перевод с французского):
# Компас должен #Sass, что #jQuery для #JavaScript, вы подтверждаете @HugoGiraudel?
— Дэвид Леульетт, Twitter
Пока я должен сказать, что аналогия имеет некоторые достоинства. Честно говоря, это не то, о чем я раньше думал, но теперь, когда идея находится на столе, давайте попробуем немного углубиться в это, чтобы посмотреть, сможем ли мы прийти к определенному выводу.
Давайте сравним то, о чем мы говорим здесь:
JavaScript — это интерпретируемый язык компьютерного программирования (из Википедии ). Позвольте мне воспользоваться этой возможностью, чтобы напомнить всем, что существует мир для JavaScript вне браузера, начиная с Unity3D, Node.js, хотя мы более привыкли иметь дело с ним в браузере. Но главное в том, что JavaScript — это язык.
Сам по себе Sass больше похож на программу, которая компилирует SassScript в настоящий CSS. Таким образом, хотя сам язык является SassScript, давайте упростим это и постулируем, что Sass является интерпретируемым языком сценариев.
Фреймворк или библиотека?
jQuery — это библиотека JavaScript, согласно ее домашней странице . Хорошо отметить, что jQuery ориентирован на клиента, тем более что его основная цель — помочь манипулированию DOM, Ajax-запросам и обработке событий (среди прочего, конечно) через простой и доступный API.
jQuery — это быстрая, небольшая и многофункциональная библиотека JavaScript.
Между тем, как объясняется на его домашней странице , Compass — это фреймворк для проектов Sass или CSS Authoring Framework (что бы это ни значило!).
Compass — это CSS Authoring Framework с открытым исходным кодом.
Итак, с одной стороны, у нас есть библиотека, а с другой — у нас есть фреймворк. Прежде чем идти дальше в нашем сравнении, мы, вероятно, должны взглянуть на основное различие между библиотекой и фреймворком . Хотя эти термины часто используются взаимозаменяемо, я провел некоторые исследования, чтобы помочь нам определить их более точно.
Две цитаты, которые я выкопал, говорят нам, что фреймворк более глобален, чем библиотека, тогда как библиотека — это нечто совершенно конкретное, что вы можете вызывать, когда вам это нужно.
Библиотека выполняет определенные, четко определенные операции. Каркас — это каркас, в котором приложение определяет «мясо» операции, заполняя каркас. У скелета все еще есть код для соединения частей, но самая важная работа выполняется приложением.
— Джейсон Коэн, Переполнение стека
Библиотека — это, по сути, набор функций, которые вы можете вызывать, в наши дни обычно организованные в классы. Каждый звонок выполняет некоторую работу и возвращает управление клиенту. Фреймворк воплощает в себе некоторый абстрактный дизайн со встроенным поведением. Чтобы использовать его, вам нужно вставить свое поведение в различные места фреймворка либо путем создания подклассов, либо путем подключения ваших собственных классов. Код фреймворка затем вызывает ваш код в этих точках.
— Мартин Фаулер, инверсия контроля
Далее, вот две основные цитаты, одна из которых посвящена обсуждению методологии проектирования программного обеспечения, называемой принципом Голливуда :
Я думаю, что главное отличие состоит в том, что фреймворки следуют принципу Голливуда, то есть «не звоните нам, мы вам позвоним».
— Panos, переполнение стека
Вы звоните в библиотеку. Фреймворк зовет вас.
— Йен Бойд, Переполнение стека
И, наконец, цитата, которая подводит итог всего этого:
Библиотека — это инструмент. Рамки — это образ жизни. Библиотека, в которой вы можете использовать любую маленькую часть, которая вам поможет. Фреймворк, которому вы должны передать весь свой проект.
— Джеймс Керран, Переполнение стека
В конце концов, jQuery — это действительно библиотека. Все, что он делает, — это предоставляет набор методов и других функций, которые вы можете использовать для облегчения разработки. Это как синтаксический сахар для JavaScript.
С другой стороны, Compass предоставляет пользователю не только набор миксинов, но и целый ряд других функций, таких как управление изображениями и путями, создание спрайтов, чертежи и многое другое.
Оттуда мы можем поднять первый флаг в нашем сравнении: в некотором смысле, Compass — это больше, чем jQuery.
Нужны ли они нам?
Опытные разработчики JavaScript, вероятно, признают, что им не нужен jQuery, но он очень пригодится для больших проектов, которые нуждаются в поддержке в старых браузерах, таких как IE8.
Но если вы спросите разработчиков Sass, нужен ли им Compass, есть большая вероятность, что они скажут вам, что есть некоторые вещи, которые просто невозможно сделать без Compass. Это потому, что Compass делает то, что Sass не может делать сам, в то время как jQuery не делает абсолютно ничего, что вы не можете сделать с необработанным JavaScript (jQuery, в конце концов, просто JavaScript). Так что это, вероятно, самый большой недостаток в аналогии.
В настоящее время все больше и больше людей избегают jQuery по разным причинам:
- Надежный ванильный JavaScript становится все более популярным благодаря учебным пособиям, блогам и другим библиотекам с открытым исходным кодом (давайте не будем забывать, что jQuery был впервые представлен 8 лет назад).
- Стандарты и браузеры движутся вперед, что делает ненужными некоторые функции jQuery.
- Избавление от jQuery сохраняет HTTP-запрос и предотвращает загрузку около 100 КБ (неиспользованного) JavaScript; это в конечном итоге лучше для конечного пользователя, который может иметь медленное соединение на мобильном телефоне.
Между тем, на этом этапе от компаса избавиться нечего, поскольку он не запускается на стороне клиента; это инструмент разработки (как и Sass). Хотя удаление JavaScript может сделать страницу быстрее, удаление библиотеки / фреймворка Sass не имеет никакого значения для конечного пользователя.
В лучшем случае Sass будет компилировать таблицы стилей немного быстрее без Compass, но я не уверен, что вы действительно сможете почувствовать разницу. Кроме того, я не уверен, что отказ от всех инструментов и ярлыков, предлагаемых Compass, стоит немного быстрее. По моему мнению, это определенно не стоит жертв.
Что мы можем сделать вывод?
Остается вопрос: Compass to Sass — это jQuery для JavaScript?
Если вы придерживаетесь правильной терминологии, как обсуждалось выше, то ответ — нет . jQuery — это библиотека функций, написанная на JavaScript, в то время как Compass предоставляет множество функций, помимо простых миксинов. Это основная причина, по которой Compass и Sass часто обсуждаются как единое целое, потому что каждый дополняет друг друга.
С другой стороны, если мы игнорируем технические определения «библиотека» и «структура», то ответ может быть: вид . В некотором смысле, использование Compass для mixins очень похоже на использование jQuery для функций. Это меньше многословия, это делает вещи проще и более читабельным, и, следовательно, легче поддерживать. Это очень похоже на то, что делает jQuery.
Но, как уже говорилось, в конце концов прагматизм побеждает: реальная разница между Compass и jQuery заключается в том, что, хотя есть и то, что нужно избегать jQuery, я не вижу причин отказываться от Compass.