Жс что такое: ЖС | это… Что такое ЖС?
alexxlab | 31.03.1991 | 0 | Разное
Backend vs Frontend разработка: Что нужно знать, чтобы начать
В настоящее время навыки программирования и разработки являются одними из самых востребованных на рынке труда. Поэтому неудивительно, что вам интересно узнать больше о back-end и front-end разработке.
Front-end и back-end: в чем различия?
Проще говоря, front-end – это то, что видят пользователи при взаимодействии с веб-сайтом, приложением или программой. Бэк-энд – это уровень, на котором программисты создают процессы для того, чтобы эти взаимодействия происходили, функционировали и работали гладко.
Таким образом, мы можем лучше понять, что front-end разработка – это проектирование на поверхностном уровне: вы заботитесь о внешнем виде вашего сайта или приложения, стиле, оптимизации элементов внутри we-страниц и так далее.
Back-end разработка имеет дело со скрытыми процессами, которые позволяют сайту, приложению или программе функционировать. Кроме того, бэкэнд-разработчик также заботится о том, что происходит на серверах и в базах данных сайта или приложения, над которым он работает.
Языки программирования
Теперь, когда мы знаем разницу между front-end и back-end, мы можем перейти к пониманию того, как вы можете сделать первые шаги в обоих мирах. Конечно, сначала вам нужно знать, какие языки программирования чаще всего используются как для front-end, так и для back-end фреймворков.
Если вы хотите стать back-end или front-end инженером, вы можете начать изучение с языков программирования, которые мы сейчас обсудим. Если вы хотите стать full-stack разработчиком, то начинать нужно именно с этого. Если вы не знаете, что такое full-stack, то это термин, который разработчики используют для обозначения областей разработки как back-end, так и front-end. Например, разработчик полного стека – это человек, который может заниматься обоими аспектами веб-сайта или приложения.
Языки программирования для front-end разработки
HTML
HTML – это самый базовый язык программирования, который вы можете выучить. Он расшифровывается как Hypertext Markup Language, и это один из самых старых языков программирования. Это фундаментальный язык, но HTML позволяет создавать разделы, абзацы и ссылки с помощью тегов и атрибутов. Это также один из самых простых для изучения языков программирования (дети изучают его в школе!).
Конечно, хотя HTML является базовым для каждого front-end инженера, использование только HTML для вашей front-end разработки не будет правильным. HTML просто слишком прост, а пользователи привыкли к более сложным фреймворкам и интерфейсам. Пример почти чистого HTML-сайта или приложения? Википедия! Этот сайт – огромный гипертекст, и это практически HTML. Однако вам понадобится интерфейс, который будет более цветным, привлекательным и интерактивным, чем гипертекст Википедии. По этой причине HTML – это только начало: вам нужно двигаться дальше и изучать более сложные и продвинутые языки программирования для внешней разработки. Конечно, HTML также необходим для полномасштабной разработки.
Изучение HTML: с чего начать?
Изучение HTML не представляет особой сложности. Если вы можете научить себя чему-то, то это, безусловно, HTML. Вы можете найти тонны бесплатных ресурсов в Интернете – и они будут бесплатными! Если вы хотите иметь все в одном месте и потратить около $20 или около того, вы можете приобрести руководство по HTML. Если вам нужно руководство, вы можете подписаться на один из многочисленных онлайн-курсов: вам не составит труда найти тот, который соответствует вашему уровню подготовки и бюджету.
CSS
CSS означает Cascading Style Sheets, и, помимо HTML, это самый известный и используемый язык программирования, когда речь идет о front-end разработке (также необходимый для full-stack разработки). С помощью CSS можно создавать великолепно выглядящие веб-страницы.
Он сложнее, чем HTML, и если вы хотите начать изучать CSS, вы уже должны знать хотя бы немного HTML и иметь базовые знания о работе с файлами. Но что вы можете делать с помощью CSS? Проще говоря, с помощью CSS вы можете управлять тем, как именно элементы HTML выглядят в браузере, то есть на вашей веб-странице. CSS – это язык программирования для фронтальной разработки, поскольку он определяет, как документы и детали представляются пользователям.
Вы можете использовать CSS для очень простой стилизации, например, для изменения цвета и размера шрифтов и абзацев, но также и для более сложных целей: вы можете использовать его для создания макета с основной областью содержания и боковой панелью для сопутствующей информации, например, добавить анимацию и эффекты, и так далее…
Изучение CSS: с чего начать
В ресурсах по CSS тоже нет недостатка: как и в случае с HTML, существует масса сайтов, посвященных изучению CSS, но вы всегда можете выбрать учебник или, если у вас больше бюджет, специальный курс для front-end инженеров.
JavaScript
Как только вы освоите HTML и CSS, можно переходить к изучению JavaScript. Базовые знания HTML и CSS необходимы, когда вы начинаете изучать JavaScript.
В то время как HTML является базовым, а CSS помогает улучшить внешний вид вашего сайта или приложения, вы можете реализовать сложные функции на ваших веб-страницах с помощью Javascript. Используя Javascript, вы не ограничены статической информацией, отображаемой на веб-странице. Вы можете создавать интерактивные платформы, которые постоянно динамически обновляются и с которыми пользователь, конечно же, может взаимодействовать.
Изучение JavaScript: с чего начать
Как мы уже говорили, не стоит обращаться к Javascript, если вы не знакомы хотя бы с HTML и CSS. Научить себя JavaScript будет сложнее, чем двум предыдущим языкам программирования для front-end разработки. Тем не менее, хорошей новостью является то, что вы можете легко найти онлайн-курсы (которые стоят дешевле, чем очные курсы по front-end разработке), которые включают в себя обучение каждому языку программирования front-end разработки: HTML, CSS и JavaScript. Если вы выберете один из них, вы сможете сэкономить много денег и оптимизировать процесс обучения!
Внутренние языки программирования
JavaScript
Back-end разработчики также используют разновидность JavaScript, которая называется Node.js. Это фреймворк с открытым исходным кодом, который широко используется новичками, но его также применяют такие крупные компании, как Netflix. Как вы можете догадаться, он очень масштабируем и, несмотря на свою простоту, позволяет создавать приложения, которые могут обрабатывать множество запросов пользователей одновременно.
Как видите, Javascript – важнейший язык программирования для каждого разработчика, front-end, back-end и full-stack разработчиков. Мы уже говорили о том, где вы можете изучать JavaScript в предыдущем параграфе; как вы видите, путь обучения, который вы должны пройти, начинается с Front-end разработки, потому что вы не сможете подойти к Node.js, если вы не знакомы с HTML или CSS. Поскольку JavaScript используется как для фронтенд-разработки, так и для бэкенд-разработки, его изучение является обязательным, если ваша цель – полнофункциональная разработка.
Python
Python очень важен для любого компьютерного разработчика, потому что его можно использовать для очень многих вещей. Как говорится, Python может предложить рамочное решение для любой компьютерной проблемы, а написание кода не так уж сложно и не требует много времени. Как только вы написали код, он может работать практически на любом компьютере без изменения программы. Он может использоваться для обработки текста, чисел, изображений, данных и многого другого. Он используется на очень популярных веб-сайтах, таких как Google, YouTube, сайт NASA и т.д. Python настолько универсален, что его знает любой front-engineer или специалист по полномасштабной разработке.
Изучение Python: с чего начать?
О Python имеется множество документации, потому что это, вероятно, самый популярный и наиболее часто используемый язык программирования сегодня во многих областях. Когда вы начнете изучать Python, вы можете почувствовать себя подавленным, потому что вам предстоит многое понять и выучить. Одного руководства никогда не будет достаточно, чтобы постичь весь потенциал этого фреймворка. Итак, с чего же начать?
Наша рекомендация – подумать о своих целях: для чего вы хотите изучать Python? Хотите ли вы создать веб-сайт или приложение? Хотите ли вы автоматизировать некоторые задачи вашего рабочего процесса? Хотите ли вы создать мобильное приложение для своих клиентов? Знание цели поможет вам сузить область изучения, по крайней мере, на начальном этапе, чтобы ваш процесс обучения был более целенаправленным, и вы не чувствовали, что вам нужно выучить слишком много.
Front-end и back-end: с чего начать?
Допустим, вы совсем новичок и хотите узнать о разработке. Вас не особенно интересует front-end или back-end. Вы просто хотите начать изучать программирование: с чего вам следует начать? С front-end или back-end?
Разработчики front-end и back-end рекомендуют, что если вы заинтересованы в изучении как front-end, так и back-end разработки, вам следует начать с front-end. Это связано с тем, что, поняв, как устроен и работает front-end веб-сайтов и приложений, вы сможете быстрее понять, как они работают за кулисами. Это облегчит вам задачу, когда вы перейдете к изучению back-end разработки.
Front-end и back-end разработка: FAQ
Легче ли front-end разработка, чем back-end?
Front-end – это то, что мы можем видеть. Даже впервые услышав разговор о нем, вы сможете быстро понять, о чем идет речь, с чем имеют дело разработчики и какие навыки и языки программирования необходимы, если вы хотите стать front-end инженером. Это создает представление о том, что front-end разработка проще, чем back-end: так ли это?
Front-end разработка проще, чем back-end разработка – это всего лишь иллюзия: это совсем не так! Оба аспекта разработки сайта или приложения по-своему сложны. Тем не менее, front-end разработку можно считать даже более сложной и ответственной, поскольку она чаще меняется и требует постоянного обновления и поддержки. Если с ним что-то не так, пользователи сразу это заметят! По этим причинам, если мы хотим сказать, что проще между front-end разработкой и back-end, то ответ – back-end.
Знать это важнее, чем вы думаете: поскольку многие люди думают, что front-end разработка проста, они могут быть склонны недооценивать сложность процесса обучения. Кроме того, мнение о том, что back-end разработка сложнее, создает иллюзию, что если вы сначала изучите back-end разработку, то вам будут больше платить.
Есть ли альтернативный путь развития?
Несмотря на то, что многие люди не знают, изучение языков программирования – это не единственный способ стать специалистом по back-end разработке, full-stack или front-end инженером, и это не единственный способ создания веб-сайта, мобильного приложения или веб-приложения. Да, на протяжении многих лет это был единственный доступный путь, но это уже не так! Сегодня существуют инструменты, так называемые no-code tools, которые позволяют разработчикам создавать мобильные и веб-приложения без необходимости писать какой-либо код.
AppMaster – идеальный пример инструмента для программирования без кода. Он предоставляет вам платформу, с помощью которой вы можете создать свою основу и полноценные рабочие приложения или веб-приложения без написания кода. Это не означает, что кодирование, front-end и back-end не существуют, когда вы разрабатываете с помощью AppMaster. Это лишь означает, что вам не нужно управлять ими напрямую или с помощью языков программирования.
Фреймворки front-end и back-end создаются автоматически, а с AppMaster их можно даже экспортировать. Даже если вы уже обладаете глубокими знаниями языков программирования для front-end или back-end разработки, вы можете улучшить свой рабочий процесс с помощью таких инструментов, как AppMaster: процесс разработки фреймворков станет проще, менее напряженным и быстрым.
Настройка Node.js в собственной среде разработки Windows
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 5 мин
Если вы не занимались разработкой с помощью Node. js и хотите быстро начать работу, установите Node.js непосредственно в Windows, выполнив указанные ниже действия.
Примечание
Если вы используете Node.js профессионально и вам нужно оптимизировать скорость и производительность, обеспечить совместимость системных вызовов, выполнять контейнеры Docker, которые используют рабочие области Linux, и не нужно использовать скрипты сборки Linux и Windows или вы просто предпочитаете использовать командную строку Bash, установите Node.js в подсистеме Windows для Linux (точнее, в WSL 2).
Установка nvm-windows, Node.js и npm
Наряду с возможностью выбора системы для разработки (Windows или WSL) при установке Node.js доступны и другие возможности. Мы рекомендуем использовать диспетчер версий, так как версии меняются достаточно быстро. Вероятно, вам придется переключаться между несколькими версиями Node.js в зависимости от потребностей для различных проектов, над которыми вы работаете. Диспетчер версий Node Version Manager, чаще называемый nvm, является наиболее популярным средством установки нескольких версий Node.
Важно!
Рекомендуем всегда удалять любые имеющиеся установки Node.js или npm из операционной системы перед установкой диспетчера версий, так как эти установки могут создавать необычные и запутанные конфликты. Сюда относится удаление всех существующих каталогов установки Node.js (например, C:\Program Files\nodejs), которые могут остаться. Созданная символьная ссылка NVM не будет перезаписывать существующий (даже пустой) каталог установки. Справку по полному удалению предыдущих установок см. здесь.
Следуйте инструкциям по установке, приведенным в репозитории windows-nvm. Мы рекомендуем использовать установщик, но если вы лучше понимаете свои потребности, возможно, целесообразным будет выполнить установку вручную.
Установщик перенаправит вас на страницу выпусков с информацией о последней версии.
Скачайте последний выпуск файла nvm-setup.zip.
После скачивания откройте ZIP-файл, а затем запустите файл nvm-setup.exe.
Мастер установки Setup-NVM-for-Windows поможет выполнить все этапы установки, в том числе выбрать каталог, в котором будут установлены репозиторий nvm-windows и Node.js.
Установка завершится. Откройте PowerShell (рекомендуется открыть с повышенными правами администратора) и попробуйте использовать windows-nvm, чтобы указать, какие версии узла сейчас установлены (на этом этапе они не указаны):
nvm ls
Установите текущий выпуск Node.js (в нем вы сможете протестировать новейшие улучшенные возможности, но вероятность возникновения проблем при этом будет больше, чем при использовании версии LTS) с помощью команды
nvm install latest
.Установите последний стабильный выпуск LTS Node.
js (рекомендуется). Для этого сначала выполните поиск номера текущей версии LTS с помощью команды
nvm list available
, а затем установите версию LTS по номеру с помощью командыnvm install <version>
(замените<version>
номером, например:nvm install 12.14.0
).Вызовите список установленных версий Node, выполнив команду
. Теперь в нем должны отображаться две недавно установленные версии.После установки требуемых версий Node.js выберите нужную версию, введя
nvm use <version>
(замените<version>
нужным номером, напримерnvm use 12.9.0
).
Предупреждение
Проблема с отказом в доступе в nvm-windows версии 1.1.9, для версии узла переключения требуется PowerShell с повышенными правами (запуск от имени администратора). Рекомендуется использовать версию 1.1.7, чтобы избежать этой проблемы.
Чтобы изменить версию Node.
. Затем введитеjs на ту, которую вы хотите использовать для проекта, создайте каталог проекта с помощью команды
mkdir NodeTest
и укажите каталог, выполнив командуcd NodeTest
nvm use <version>
, заменив<version>
номером версии, который вы хотите использовать (т. е. версии 10.16.3).Проверьте, какая версия npm установлена, с помощью
npm --version
. Этот номер версии автоматически изменится на номер той версии npm, которая связана с вашей текущей версией Node.js.
Альтернативные диспетчеры версий
Несмотря на то что windows-nvm сейчас является самым популярным менеджером версий для Node, есть несколько альтернативных вариантов:
nvs (Node Version Switcher) — это кроссплатформенный вариант
nvm
с возможностью интеграции с VS Code.Volta — это новый диспетчер версий, созданный командой LinkedIn. Заявлено, что он отличается увеличенной скоростью и межплатформенной поддержкой.
Чтобы установить Volta в качестве диспетчера версий (вместо windows-nvm), перейдите в раздел
Важно!
Перед установкой Volta необходимо убедиться, что на компьютере с Windows включен режим разработчика.
Дополнительные сведения об использовании Volta для установки нескольких версий Node.js в Windows см. в документации по работе с Volta.
Установка Visual Studio Code
Для разработки с помощью Node.js в Windows рекомендуем установить Visual Studio Code, а также пакет расширений Node.js. Установите их все или выберите наиболее полезные для вас.
Чтобы установить пакет расширений Node.js, сделайте следующее:
- Откройте в VS Code окно Расширения (нажав клавиши CTRL+SHIFT+X).
- В поле поиска в верхней части окна расширений введите: Node Extension Pack (Пакет расширений Node) (или имя любого расширения, которое необходимо найти).
- Выберите пункт Установить. После установки расширение появится в папке “Включено” в окне Расширения. Вы можете отключить, удалить или настроить параметры, выбрав значок шестеренки рядом с описанием вашего нового расширения.
К дополнительным рекомендуемым расширениям относятся следующие:
- Отладчик для Chrome — после завершения разработки на стороне сервера с помощью Node.js вам нужно будет выполнить разработку и тестирование на стороне клиента. Это расширение интегрирует редактор VS Code со службой отладки браузера Chrome, что увеличивает эффективность выполнения операций.
- Раскладки клавиатуры других редакторов — эти расширения позволят использовать необходимую раскладку при переходе в другой текстовый редактор (например, Atom, Sublime, Vim, eMacs, Notepad++ и т. п.).
- Расширение синхронизации параметров — позволяет синхронизировать параметры VS Code в разных установках, используя GitHub. Если вы работаете на разных компьютерах, это обеспечит согласованность среды между ними.
Альтернативные редакторы кода
Если вы предпочитаете использовать редактор кода или интегрированную среду разработки, отличные от Visual Studio Code, для среды разработки Node.js также подходят следующие варианты:
- IntelliJ IDEA
- Sublime Text
- Atom
- Brackets
- Notepad++
Установка GIT
Если вы планируете работать совместно с другими пользователями или размещать проект на сайте с открытым исходным кодом (например, GitHub), примите во внимание, что VS Code поддерживает управление версиями с помощью Git. Вкладка системы управления версиями в VS Code отслеживает все изменения и содержит общие команды Git (добавление, фиксация, принудительная отправка, извлечение) прямо в пользовательском интерфейсе. Сначала необходимо установить Git для включения панели управления версиями.
Скачайте и установите Git для Windows с веб-сайта git-scm.
В комплект входит мастер установки, который задает вам ряд вопросов о параметрах установки Git.
Рекомендуется использовать все параметры по умолчанию, если у вас нет конкретной причины изменить какой-либо из них.
Если вы никогда не использовали Git, обратитесь к руководствам по GitHub. Они помогут вам приступить к работе.
Мы рекомендуем добавлять GITIGNORE-файл в проекты Node. На сайте GitHub вы можете найти GITIGNORE-шаблон по умолчанию для Node.js.
Использование подсистемы Windows для Linux в рабочей среде
Использование Node.js напрямую в Windows отлично подходит для обучения и экспериментов с возможностями. Когда вы будете готовы создавать готовые к работе веб-приложения, которые обычно развертываются на сервере под управлением Linux, мы рекомендуем использовать подсистему Windows для Linux версии 2 (WSL 2) для разработки веб-приложений Node.js. Многие пакеты и платформы Node.js создаются с помощью среды *nix, а большинство приложений Node.js развертываются в Linux, поэтому разработка в WSL обеспечивает согласованность между средой разработки и рабочей средой.
Примечание
В достаточно редкой ситуации, когда вам требуется разместить приложение Node.js на сервере Windows, лучше использовать обратный прокси-сервер. Это можно сделать двумя способами: 1) с помощью iisnode или напрямую. Эти ресурсы не поддерживаются. Мы рекомендуем использовать серверы Linux для размещения приложений Node.js.
что лучше для разработки сайта
Автор статьи
МАКСИМ КОЛМОГОРОВ
Соучредитель, технический директор vverh.digital
Введение
Автор статьи – разработчик с шестилетним опытом работы, а также совладелец двух стартапов. Автор умеет в разработку на PHP и Node.js, знаком с такими технологиями как WordPress, Laravel, Doctrine, Express, Sequelize.
Забежим вперед и скажем сразу: в статье нет однозначного ответа какой из представленных языков программирования лучше. Данная статья вообще не про техническое сравнение. Цель данного материала помочь предпринимателю определиться с выбором конкретной технологии, дабы бизнес не пострадал. Поэтому, мы рассмотрим все с коммерческой стороны (но с техническим обоснованием).
Что такое Node.js
Node.js – это серверная реализация языка программирования JavaScript (не путать с Java). Грубо говоря, это тот же JavaScript, только теперь его еще можно использовать за пределами браузера.
Вообще, когда клиенту в СНГ предлагаешь сайт на Node.js он начинает много гуглить, потому что либо ничего об этом не слышал, либо слышал, но что-то плохое (и то только от других программистов). Почему так происходит? Во-первых, данная технология среди обывателей (малого бизнеса) в России и СНГ мало кому известна (как Python и Django), скорее всего, потому что сам Node.js появился в 2009 году, а популярность начал обретать после 2014, поэтому достойной информации в СНГ сегменте интернета о нем мало. Во-вторых, можно часто встретить негативные высказывания, но они все абсолютно пустые для нас: вся ненависть по отношению к данному языку идет от других программистов, ну вот сущность у людей такая, сложно многим новое воспринимать.
Просто, посмотрите на следующую статистику. JavaScript (помним, Node.js этот тот же JavaScript) в данный момент самый популярный язык программирования в мире.
Это статистика с популярного среди разработчиков сайта Stack Overflow. Да, статистика за 2017 год, но пока мало что поменялось, вот еще ссылка на статистику за 2020 год. Как видите, популярность JavaScript растет, а вот PHP потерял две позиции. Так что мнение людей в интернете сильно отличается от фактов из реальной жизни. И да, чуть позже Вы поймете почему так происходит.
Что такое PHP
PHP – это серверный язык программирования, в отличии от JavaScript может работать только на сервере.
Язык появился в 1994 году ради одной цели – создавать сайты, ну и в 2020 году цель не изменилась. В отличии от Node.js, который создавался для широкого применения, PHP создан для разработки сайтов и веб-приложений. Даже аббревиатура языка PHP – Personal Home Page (персональная домашняя страница) о много нам говорит.
Обычно, чем старше технология, тем хуже для IT бизнеса. Старые технологии имеют свойства умирать из-за неактуальности или терять популярность, а все это ведет к удорожанию стоимости работы программистов. Со временем появляются более удобные инструменты для решение тех или иных задач, которые (чаще всего) дешевле предыдущих. Так, в 2000-х годах PHP сместил Perl с пьедестала языка для разработки сайтов, так сейчас Node.js начал заходить на территорию PHP и Ruby и забирать себе все больше аудитории.
С PHP происходит примерно тоже самое что с Perl и Ruby, но говорить о его смерти глупо и признак необразованности. Хотя потеря популярности на лицо: о языке все меньше говорят на различных конференциях, в интернете и других массмедиа. Сейчас уже выросло целое поколение программистов, которые не знакомы с PHP, но занимаются веб-разработкой. Несколько лет PHP был хедлайнером среди разработки веб-сайтов, а сейчас многие IT-компании начинают от него отказываться.
Как разрабатывают сайты
Даже если “реально” знаете, все равно прочтите чтобы не терять мысль автора. Так Вы начнете понимать откуда растут ноги у проблем с популярностью PHP, и почему в сторону Node.js идет необоснованная критика.
Немного истории
В году 2000 сайты делались очень просто: HTML, CSS и PHP. JavaScript существовал, но его мало кто использовал. Язык был создан для оживления веб-страниц через создание анимаций и внедрения различных интерактивных элементов. На тот момент мало кто его использовал, потому что язык был противоречивый: от браузера к браузеру одни и те же языковые конструкции работали по разному (или вообще не работали), плюс для анимаций была технология Flash.
Как выглядел Google тогда и сейчас. Никакого JavaScript, только HTML, CSS и Java (вместо PHP). Скучненько, да?
Но все изменили Google, IT-компании и Райан Даль. Во-первых, Google убил Flash. Да, они сделали это только в 2021 году, но процесс был запущен уже в 2017 и все веб-разработчики понимали что пора переходить на JavaScript. Во-вторых, Google приложили руку к созданию браузера Chromium на базе которого, позже, будет работать более 70% всех современных браузеров: Яндекс Браузер, Google Chrome, Edge, Uran, Vivaldi, Opera. Из-за того что все браузеры работают на едином ядре, проблемы с языком JavaScript начали исчезать и появились новые фишки. Ну и в-третьих, родился Node.js. Райан Даль создал Node.js на базе движка JavaScript V8 от компании Google.
Из-за всех вышеперечисленных вещей JavaScript плотно вошел в мир веб-разработки. Благодаря новым возможностям JavaScript, маркетологи и дизайнеры начали эпоху современного веба где интерактив стоит на первом месте. Раньше сайт постоянно “загружался” на каждое действие пользователя будь то заход на другую страницу или отправка формы обратной связи. Сейчас это нонсенс и дурной тон, сегодня в моде отзывчивый интерфейс без лишних загрузок (например Ozon, Netflix).
Пример реактивного интерфейса, при создании использовались аналогичные технологии как на сайте Ozon.
Сегодняшнее время
Современные сайты и веб-приложения состоят из микросервисов и смеси различных технологий. Обычный сайт в 2021 году состоит из JavaScript (всегда, ведь это единственный браузерный язык программирования) и любого другого серверного языка: PHP, C#, Python, Node. js (JavaScript), Java, C++, выбирайте любой.
На сервере Вы можете использовать любой язык программирования, но вот для фронтенда (браузера, то, что видит пользователь) выбор не велик (только JavaScript). Да, технически можно сделать сайт без JavaScript, но тогда даже добавление товара в корзину будет перегружать сайт, поэтому логически можно сказать что без JavaScript сегодня нельзя сделать сайт (если это не визитка одностраничник без административной панели).
Из-за того что JavaScript плотно въелся в современную разработку, многим бекенд (PHP, Java, C#) программистам приходится с ним сталкиваться все чаще и чаще. Как Вы знаете, многие люди не любят инновации, проще ведь сидеть в своей зоне комфорта. Поэтому, вместо того, чтобы учить язык, его просто поливают грязью. Но вот незадача, язык-то с каждым годом становится все популярней, а потом еще и Node.js появился, теперь JavaScript посмел залезть в их “святую святых” – на сервера. Многие оказались не готовы.
Все популярное всегда встречает волну сопротивления, которая рано или поздно изживет себя, это закономерность. Интересный факт, даже ядро популярной CMS WordPress почти на 20% состоит из JavaScript:
Скриншот репозитория WordPress на GitHub.
Чтобы никто не обвинял нас в подмене понятий, сразу сообщим, что это не серверный JavaScript (Node.js), это браузерный код, но через этот пример мы хотим показать насколько JavaScript плотно засел везде где только можно.
Среди некоторых IT-предпринимателей ходит такое мнение, пусть оно и кажется натянутым, но имеет место быть: если в современных реалиях, при создании чего-то сложнее калькулятора, все равно придется писать на JavaScript, почему бизнес должен нанимать программиста, знающего PHP и JavaScript (или даже двух), если можно взять одного знающего только JavaScript? Последний вариант всегда будет дешевле и здесь нет смысла спорить.
И да, бизнес реально создает спрос на такие вещи. Нам, как разработчикам, такое высказывание кажется забавным (это очень доступная концепция, которая легко ложится в голову), но в нем есть доля истины, ведь единая техническая архитектура (в виде общего языка программирования) дает массу плюсов: более простое горизонтальное масштабирование и обслуживание проекта.
PHP VS Node.js
Теперь, когда Вы познакомились со всей экосистемой вокруг данных технологий, переходим к коммерческому сравнению.
CMS
Если не знаете, что такое CMS, прочитайте эту статью. Если лень переходить по ссылке, кратко опишем термин ниже.
CMS – это система управления контентом, дабы любой человек без знаний программирования мог управлять некоторым содержимым сайта: создавать товары, редактировать страницы.
Для PHP существует много разных и готовых CMS: Bitrix, WordPress, OpenCart. Все они помогают сократить расходы при разработке типового решения. Например, если хотите сделать обычный корпоративный сайт – выбираете WordPress, там внутри есть почти все для ведения блога и создания обычных страниц. Если хотите интернет-магазин, то выбирайте между Bitrix и OpenCart в зависимости от размера и Ваших амбиций (Bitrix более типовой, OpenCart гибкий для разработки).
У Node.js нет настолько известных и популярных CMS, на ум приходит лишь парочка: Keystone и Strapi. Keystone больше фреймворк (инструмент), нежели CMS. С помощью Keystone можно создать свою CMS под какую-либо задачу. У нее нет четкой концепции, как OpenCart – интернет-магазин, WordPress – блог. А Strapi – это WordPress в мире Node.js, удобный инструмент для создания информационных ресурсов.
Если у Вас ограниченный бюджет и на руках задача создать максимально типовой проект, то выбор падает на PHP с его популярными инструментами WordPress, Bitrix, OpenCart. Для всех этих CMS существуют готовые темы и плагины, поэтому разработка будет вестись быстро и дешевле чем на Node.js.
Если у Вас уникальный дизайн (значит готовые темы не учитываем) и хочется информационных сайт, то можно повыбирать между WordPress (PHP) и Strapi (Node.js). Окончательный выбор поможет сделать понимание какой сайт Вы хотите: классический или реактивный интерфейс?
Реактивный интерфейс
Реактивный интерфейс – это когда для отрисовки страницы браузер не перегружает сайт полностью, а лишь конкретный компонент. Это современный подход, позволяющий создавать самые быстрые сайты. Пример реактивного сайта мы уже показывали, но если хотите увидеть еще примеры, то ознакомьтесь с Netflix, Ozon, YouTube, Dodo Pizza, VK. Реактивный интерфейс создается только лишь с помощью языка программирования JavaScript.
У данного подхода в разработке есть один подводный камень: сайты, сделанные с помощью JavaScript, плохо индексируются поисковой системой. Но выход есть – достаточно разрабатывать сайт учитывая технологию SSR
Наша популярная статья про SSR для тех, кому будет мало.
SSR, Server Side Rendering, технология, которая позволяет заранее отрисовать сайт на сервере и отдать в браузер пользователя по запросу (как делает это PHP). Это позволяет наладить SEO продвижение и делает и сайт еще быстрее.
Технология SSR работает только в Node.js, поэтому создать реактивный сайт с SSR без Node.js невозможно.
Поэтому, из следующего делаем вывод: если нам требуется реактивный сайт и нужен SSR, то выбор падает на Node. js. Если SSR не важен, но есть ограниченный бюджет, то снова выбираем Node.js (делать все на одной технологии дешевле). Сам по себе SSR не сильно увеличивает стоимость проекта, ибо существует масса готовых решений для этого – Nuxt, Next и все это можно вместе объединить с вышеописанным Strapi CMS.
Если уж сильно хочется реактивный сайт с бэкендом на PHP, и SSR, то предлагаем смотреть в сторону headless CMS (следующий абзац). Главное понимайте, что это вариант дорогой, ибо уже придется кодить как на PHP, так и на Node.js.
Headless CMS
Headless CMS – это обычная CMS, но только у которой нет внешней части сайта, фронтенд разделен от бекенда. Грубо говоря, это лишь административная панель, которая хранит в себе какую-то информацию.
Иными словами, Вы можете развернуть на поддомене свой Bitrix, OpenCart, WordPress сайт. В привычном состоянии работать с ним и обслуживать, но второй сайт (наш реактивный на Node.js) будет “питаться” данными от первого сайта. В итоге, Вы получили модный реактивный сайт с административной панелью от WordPress.
К слову, многие крупные компании таким способом мигрировали на реактивные интерфейсы. Они до сих пор используют свои первые сайты, которые валяются на поддоменах типо api.site.ru или wordpress.site.ru, зайти на них просто так нельзя, но вот общение между Node.js сайтом и старым PHP сайтом реализовано.
Фреймворки и разработка нетипичных решений
Фреймворк – это инструмент для более быстрой разработки чего либо с нуля. Более подробней можно почитать тут.
К разработке на фреймворках прибегают в нескольких случаях: проблема с безопасностью; необходимо контролировать как можно больше протекающих на сайте процессов ради оптимизации; готовые CMS имеют изъяны, которые могут себя неадекватно проявить при высокой нагрузке.
У PHP и Node.js существует огромное количество инструментов. У PHP есть Laravel, у Node.js есть Nuxt и Next, у PHP есть Doctrine, у Node.js есть Sequelize. Этот, для многих непонятный, набор слов находится тут лишь чтобы сказать, что все, что делается на PHP, можно так же сделать и на Node. js.
Вообще, из-за того что JavaScript в целом куда более популярней PHP, за последнии годы вокруг него появилось куча готовых инструментов подходящих для разработки нетипичных решений (от криптовалюты, до мобильных приложений). Но вот инструментов для созданий простых сайтов (аля CMS) до сих пор не так много, тут преимущество больше на стороне PHP. Но если представить (в вакууме), что в инструментах они оба равны, можно было бы сказать “здесь разницы нет”, но вот только она есть, и кроется она в следующем абзаце.
Производительность и работа в highload
В начале статьи мы Вам рассказали полноценную историю двух языков программирования, и все ради этого момента. Почему же Node.js за каких-то 10 лет стала таким популярным инструментом? Вот пока Вы читали, в голове такая мысль не появилась? А все дело в деньгах, ведь Node.js позволяет экономить деньги за счет эффективной обработки пользовательских запросов. Если все происходит намного эффективней, значит нужны сервера поменьше и дата центры скромнее. А значит и затрат на персонал и электричество меньше.
Секрет производительности прост, и он кроется в самом корне языка программирования. Но сначала обсудим как это все работает в PHP. Многие слышали о том, что на PHP можно делать высоконагруженные сервисы. Мол посмотрите на Facebook* и VK, они ведь работают на PHP. Да, они работают на PHP, только вот у них свои собственные версии этого языка.
А вот теперь внимание. Когда человек заходит на сайт, сделанном на PHP, платформа выделяет на пользователя поток. Поток – это условная операция, в которой разбирается запрос, происходит связь с базой данных и всякие страшные вещи с файлами (при условии созданий сессий). Естественно, 4 пользователя – это 4 потока. Если потоков много (много людей на сайте), то ядра сервера не успевают все обрабатывать и переключаться между потоками, что очень плохо влияет на производительность (возникает потоковое голодание).
И все это стандартный PHP, тот самый который стоит у Вас на сервере. Тот самый, на котором программисты будут делать сайт. Ни VK, ни Facebook* не отдадут свои версии PHP и не выложат полную копию своего сервера в открытый доступ для всех желающих. Это их разработка и только для них.
По словами VK, они используют kPHP, его ядро лежит в открытом доступе, и данный язык многим похож на PHP, но все равно отличается от оного из-за части урезанных функций в угоду производительности.
Node.js, в отличии от многих серверных языков, предоставляет сразу (без каких-то настроек) платформе набор потоков, которыми сам и распоряжается. Их всегда фиксированное число, и поэтому процессор не может войти в потоковое голодание как в случае с обычным PHP. Именно по этой причине Netflix, PayPal, Twitter, Uber, LinkedIn, NACA, Trello перешли на Node.js.
Если заинтересовались технической частью, и хотите более детальней ознакомиться c материалом, то вот литература: Libuv – сердце Node.js, Even Loop in Node.js. Весь материал на английском языке.
Справедливости ради (снова повторим) можно попытаться заставить PHP работать как Node. js: для этого существуют определенные расширения, которые устанавливаются на сервере, например, PHP UV, но вот незадача… это не из коробки. А все, что не из коробки, надо устанавливать, а значит, надо кому-то платить. Да и одно дело рыться в ядре PHP или делать сайты на WordPress. Уровень программистов диаметрально противоположный, и для этой задачи нужен неплохо-таки разбирающийся в матчасти технарь (который попросит хорошо ему платить).
Именно поэтому, в нише кастомной разработки выгодней выбирать Node.js. Абсолютно такой же набор инструментов как у PHP, только с более высокой производительностью без танцев с бубном. Поэтому, имея желание сделать мессенджер (для него же нужен сервер), крупный интернет-магазин с большим количеством данных и подключений, или просто API для любого мобильного приложения, то рассмотрите Node.js.
Сложность обслуживания и стоимость программистов
Если брать рынок Восточной Европы и США, то там проще найти в проект программиста на Node.js (или Python), нежели на PHP. В России дела обстоят по другому, из-за того что рынок сайтов для малого бизнеса здесь пока что состоит на 90% из PHP. Хотя, исходя из личного опыта автора, недостатка ни в тех, ни в других тут не наблюдается, если знать где искать.
Неопытному предпринимателю кажется, что найти PHP программиста намного легче, но это потому что производить хантинг нужно в соответствующих местах. Помним, Node.js молодой язык, его учат молодые ребята 20-25 лет, поэтому искать надо в тематических телеграмм каналах или VK. Из-за того, что среди молодых программистов PHP теряет популярность, выросло целое поколение не знающих его, а для уже существующих программистов наступает “золотой век” – ведь цена на их услуги будет расти в будущем.
Сегодня, найти опытного программиста на PHP для решения простых бытовых задач (и за недорого) очень легко, но если мы говорим про нишу кастомной разработки (много с нуля писать), то такой специалист стоит куда больше типичного формошлепа на Битрикс или WordPress. Куда проще найти JavaScript программиста, который привык много писать самостоятельно, и стоить он будет чуть дороже бутерброда. Это все из-за того, что язык нашел свою нишу в среде разработки “с нуля” (потому что он отлично подходит под быстрое прототипирование систем), поэтому за несколько лет внутри его инфраструктуры скопилось огромное количество готового кода именно под эти задачи. А еще, на рынке JavaScript много молодых разработчиков, много желающих поработать, значит, можно демпинговать стоимость их услуг в аутсорсе.
У JavaScript есть интересная штука – NPM. Если кратко, это открытое хранилище кода, куда любой разработчик может отправить свои наработки в виде готового плагина (чем-то похоже на WordPress плагины, но устанавливаются чуть сложней). В данный момент это самое крупное хранилище, которое содержит более 380 тысяч готовых решений. Это в разы больше чем у PHP и Python.
Из всего вышесказанного можно сделать вывод: если нужно много писать кода (кастомная разработка), то лучше смотреть в сторону Node. js. Для малого бизнеса все куда проще, есть PHP с кучей готового функционала под любой тип задачи связанной с CMS.
Итог
Надеемся, сегодня Вы узнали что-то новое для себя. Рекомендуем закрыть статью, а завтра почитать снова на свежую голову, чтобы более хорошо усвоить информацию и сделать необходимые выводы, ибо объем материала получился отнюдь не маленький.
Автор же придерживается следующего мнения: если проект простой, типовой, наподобие обычного корпоративного сайта или локального интернет-магазина, то смотрите в сторону PHP и его популярных инструментов: WordPress, Bitrix, OpenCart. Если Вы собираетесь делать высоконагруженный проект с большим количеством параллельных операций, посещений или хотите сделать API для мобильного приложения, то смотрите сторону Node.js и его популярных инструментов: Express, Sequelize. Ну и если хотите реактивный сайт, то тоже смотрите в сторону Node.js и Strapi CMS.
Статья писалась 9 часов, материал собирался 2 дня. Поэтому, если все понравилось, подумайте добрым словом об авторе, ему будет приятно.
Zsh Уловки, которые взорвут ваш мозг
Лиззи Сигл 2021-02-17
В программировании на основе UNIX мы часто говорим о оболочках, терминалах и интерфейсах командной строки. Bash, вероятно, является наиболее известным, но есть и другие широко используемые варианты, такие как Zsh или оболочка Z. Читайте дальше, чтобы узнать больше о Zsh, а также о некоторых советах и рекомендациях по оптимизации вашей разработки.
Что такое Zsh?
Zsh, также известная как оболочка Z, расширяет функциональность оболочки Bourne Shell (sh), предлагая новые функции и дополнительную поддержку подключаемых модулей и тем. Начиная с MacOS Catalina в 2019 г., Zsh стал логином по умолчанию и интерактивной оболочкой на компьютерах Mac.
Установить Zsh
Вы можете установить Zsh с помощью Homebrew с brew install zsh
.
Пока вы это делаете, вы также можете установить самый популярный плагин Zsh, oh-my-zsh, который поставляется со многими встроенными плагинами и темами, используя этот скрипт установки:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
9 малоизвестных советов и хитростей Zsh
1. Мой товарищ по команде Valériane Venance написал в Твиттере о команде take
, которая создает новый каталог и вносит в него изменения, избавляя таким образом от необходимости вводить две команды mkdir
и cd
. take
также создаст промежуточные каталоги по мере необходимости.
2. Поиск по истории. В терминале нажатие стрелки вверх циклически переключает предыдущие команды, которые вы использовали, начиная с самой последней первой. С zsh , вы можете просмотреть время, когда вы использовали определенную команду, т.е. мкдир
.
Мой замечательный товарищ по команде Matthew Gilliard рассказал мне о ctrl-r ___, который находит время, когда вы в последний раз искали данную фразу. Щелкнув ctrl-r
еще раз, вы найдете второй самый последний, затем третий и т. д.
3. Автоматически cd
. Не нужно набирать cd
для переключения каталогов, просто введите имя каталога.
4. Массовое переименование файлов с zmv
. Чтобы установить zmv, запустите autoload zmv
. Я загрузил много изображений для модели машинного обучения и хотел переименовать их, чтобы они были более последовательными (например, epcot-1.jpg, epcot-2.jpg, epcot-3.jpg… вместо 1.jpg, 2). .jpg, 3.jpg…) Команда для этого будет
zmv '(*).(jpg|jpeg)' 'epcot-$1.$2'
Чтобы проверить, что произойдет перед запуском команды, вы можете добавить -n
вместо запуска
zmv -n '(*).(jpg|jpeg)' 'epcot-$1.$2'
Что означает эта команда? (*).(jpg|jpeg)
находит каждый файл в каталоге, оканчивающемся на .jpg
или .jpeg
. Затем epcot-$1.$2
говорит отредактировать каждое имя файла, добавив epcot-
, за которым следует исходное имя файла (представленное $1
), а затем исходный тип файла (с $2).
5. Выполнение вычислений из командной строки, как калькулятор.
6. Обильный потенциал р входы. Как упоминалось в разделе Установка , oh-my-zsh поставляется с множеством подключаемых модулей. Вы должны включить подключаемые модули npm
и sudo
, добавив эту строку в файл ~.zshrc
: plugins=(npm sudo).
Некоторые выдающиеся плагины включают
-
npm
добавляет автозаполнение к командам npm. -
sudo
добавляет — как вы уже догадались —sudo
в команду даже после того, как вы набрали ее, дважды щелкнувesc
.
-
zsh-autosuggestions
предлагает команды во время ввода в соответствии с вашей историей предыдущих команд и завершений.
-
веб-поиск
позволяет открыть поисковую систему из командной строки: запускgoogle ___
будет искать Google по заданной фразе, т.е. Серена Уильямс, как показано ниже.
-
git
включает множество псевдонимов дляgit
команд, что позволяет вам печатать меньше и экономить время. Зачем набиратьgit add
, если вместо этого можно набратьga
? Другие псевдонимы перечислены здесь.
7. Парковать команду . Ctrl-q
«приостанавливает» команду, которую вы сейчас набираете, и возвращает вас к подсказке, позволяя начать заново и ввести другую команду. Как только вы запустите эту другую команду, исходная команда будет разблокирована и снова заполнит командную строку, чтобы вы могли продолжить – это хорошо, если вы, скажем, забыли выполнить команду перед командой.
8. Легко редактировать команду после того, как вы ввели ее в командной строке. Если вы набрали или вставили длинную команду и решили, что вам нужно отредактировать ее перед запуском, ctrl-x-e
открывает ее в редакторе (обычно vi, но вы можете установить любой текстовый редактор с помощью $EDITOR
переменная среды. )
9. Сочетания клавиш. Введите ctrl l
вместо и снимите
, чтобы очистить терминал.
Что дальше для турбонаддува вашей оболочки
Это только начало — с помощью zsh и oh-my-zsh можно сделать гораздо больше. Ознакомьтесь с этой шпаргалкой oh-my-zsh и этим списком фреймворков, тем и подключаемых модулей ZSH, поддерживаемых инженером Twilio Джо Блоком, и дайте мне знать онлайн, как выглядит ваш терминал!
- Твиттер: @lizziepika
- GitHub: Элизабетсигл
- Электронная почта: [email protected]
1 2 3 4 5
Авторы
- Лиззи Зигл
- Мэтью Гиллиард
Рецензенты
- Дайан Фан
Начало работы с Zsh | Opensource.

Z-shell (или Zsh) — это интерактивная оболочка POSIX, похожая на Bourne, известная обилием инновационных функций. Пользователи Z-Shell часто ссылаются на его многочисленные удобства и отмечают его повышенную эффективность и широкие возможности настройки.
Если вы относительно новичок в Linux или Unix, но достаточно опытны, чтобы открыть терминал и выполнить несколько команд, вы, вероятно, использовали оболочку Bash. Bash, возможно, является окончательной бесплатной программной оболочкой, отчасти из-за ее прогрессивных функций, а отчасти потому, что она поставляется в качестве оболочки по умолчанию в большинстве популярных операционных систем Linux и Unix. Однако, чем больше вы используете оболочку, тем больше вы начинаете находить мелочи, которые могут быть лучше для того, как вы хотите ее использовать. Если есть что-то, чем славится открытый исходный код, так это выбор . Многие люди предпочитают «перейти» с Bash на Z.
Что такое Zsh?
Оболочка — это просто интерфейс к вашей операционной системе. Интерактивная оболочка позволяет вам вводить команды через так называемый стандартный ввод или stdin и получать вывод через стандартный вывод и стандартную ошибку или stdout и stderr . Существует множество оболочек, включая Bash, Csh, Ksh, Tcsh, Dash и Zsh. Каждый из них имеет функции, основанные на том, что, по мнению его программистов, лучше всего подходит для оболочки. Хороши эти функции или плохи, зависит от вас, конечного пользователя.
Zsh имеет такие функции, как интерактивное завершение с помощью табуляции, автоматический поиск файлов, интеграция с регулярными выражениями, расширенное сокращение для определения области действия команды и богатый движок тем. Эти функции включены в знакомую среду оболочки, похожую на Bourne, а это означает, что если вы уже знаете и любите Bash, вы найдете Zsh знакомым, за исключением большего количества функций. Вы можете думать об этом как о Bash++.
Установка Zsh
Установите Zsh с помощью менеджера пакетов.
В Fedora, RHEL и CentOS:
$ sudo dnf install zsh
В Ubuntu и Debian:
$ sudo apt install zsh
В MacOS вы можете установить его с помощью MacPorts:
$ sudo port install zsh9001 90 install zsh
Можно запустить Zsh в Windows, но только поверх Linux или Linux-подобного уровня, такого как подсистема Windows для Linux (WSL) или Cygwin. Эта установка выходит за рамки данной статьи, поэтому обратитесь к документации Microsoft.
Настройка Zsh
Zsh не является эмулятором терминала; это оболочка, которая работает внутри эмулятора терминала. Таким образом, чтобы запустить Zsh, вы должны сначала запустить окно терминала, такое как GNOME Terminal, Konsole, Terminal, iTerm2, rxvt или другой терминал по вашему выбору. Затем вы можете запустить Zsh, набрав:
$ zsh
При первом запуске Zsh вас попросят выбрать некоторые параметры конфигурации. Все это можно изменить позже, поэтому нажмите 1 , чтобы продолжить.
Это функция конфигурации Z Shell для новых пользователей, zsh-newuser-install.
(q) Выйти и ничего не делать.
(0) Выйти, создав файл ~/.zshrc
(1) Продолжить в главное меню.
Существует четыре категории предпочтений, поэтому просто начните сверху.
- Первая категория позволяет вам выбрать, сколько команд будет сохранено в вашем файле истории оболочки. По умолчанию установлено значение 1000 строк. Комплектация
- Zsh — одна из самых захватывающих функций. Для простоты рассмотрите возможность активации его с параметрами по умолчанию, пока вы не привыкнете к тому, как он работает. Нажмите 1 для параметров по умолчанию, 2 для установки параметров вручную.
- Выберите привязку клавиш Emacs или Vi. Bash использует привязки Emacs, так что вы, возможно, уже к этому привыкли.
- Наконец, вы можете узнать (и установить или отключить) некоторые тонкие функции Zsh. Например, вы можете отказаться от использования команды cd , разрешив Zsh инициировать изменение каталога, когда вы указываете неисполняемый путь без команды. Чтобы активировать одну из этих дополнительных опций, введите номер опции и введите с по набор ит. Попробуйте включить все параметры, чтобы получить все возможности Zsh. Вы можете отключить их позже, отредактировав ~/.zshrc .
Для завершения настройки нажмите 0 .
Использование Zsh
Поначалу Zsh очень похож на использование Bash, что безошибочно является одной из его многочисленных возможностей. Существуют серьезные различия, например, между Bash и Tcsh, поэтому возможность переключения между Bash и Zsh — это удобство, благодаря которому Zsh легко попробовать и легко использовать дома, если вам приходится использовать Bash на работе или на вашем сервере.
Изменить каталог с помощью Zsh
Небольшие отличия делают Zsh приятным. Сначала попробуйте изменить каталог на папку «Документы» без команды cd . Это кажется слишком хорошим, чтобы быть правдой; но если вы введете путь к каталогу без дополнительных инструкций, Zsh изменится на этот каталог:
% Documents
% pwd
/home/seth/Documents
Это выдает ошибку в Bash или любой другой нормальной оболочке. Но Зш далеко не нормальный, и это только начало.
Поиск с помощью Zsh
Если вы хотите найти файл с помощью обычной оболочки, вы, вероятно, прибегаете к команде find или locate . По крайней мере, вы могли использовать ls -R для рекурсивного перечисления набора каталогов. Zsh имеет встроенную функцию, позволяющую найти файл в текущем или любом другом подкаталоге.
Например, предположим, что у вас есть два файла с именами foo. txt . Один находится в вашем текущем каталоге, а другой — в подкаталоге с именем 9.0247 фу . В оболочке Bash вы можете перечислить файл в текущем каталоге с помощью:
$ ls
foo.txt
, и вы можете указать другой файл, явно указав путь к подкаталогу:
$ ls foo
foo .txt
Чтобы перечислить оба, вы должны использовать переключатель -R , возможно, в сочетании с grep :
$ ls -R | grep foo.txt
foo.txt
foo.txt
Но в Zsh вы можете использовать ** сокращение:
% ls **/foo.txt
foo.txt
foo.txt
И вы можете использовать этот синтаксис с любой командой, а не только с ls . Представьте себе повышение эффективности при перемещении определенных типов файлов из одного набора каталогов в одно место, объединении фрагментов текста в файл или поиске по журналам.
Использование Zsh Автодополнение с помощью табуляции
Автодополнение с помощью табуляции — это функция, предназначенная для опытных пользователей в Bash и некоторых других оболочках, и она покорила мир Unix, когда стала обычным явлением. Пользователям Unix больше не приходилось прибегать к подстановочным знакам при вводе длинных и утомительных путей (например, /h*/s*h/V*/SCS/sc*/comp*/t*/a*/*9/04/LS*boat*v , что намного проще, чем набирать /home/seth. /Videos/SCS/scenes/composite/takes/approved/109/04/LS_boat-port-cargo-mover.mkv ). Вместо этого они могли просто нажать клавишу Tab, когда ввели достаточное количество уникальной строки. Например, если вы знаете, что на корневом уровне вашей системы есть только один каталог, начинающийся с h , вы можете ввести /h , а затем нажать Tab. Это быстро, это просто, это эффективно. Это также подтверждает, что путь существует; если Tab ничего не завершает, вы знаете, что ищете не в том месте или опечатались в части пути.
Однако, если у вас много каталогов с пятью или более одинаковыми первыми буквами, Tab категорически отказывается завершать. В то время как в большинстве современных терминалов он (по крайней мере) раскрывает файлы, не позволяя ему угадать, что вы имеете в виду, обычно для их открытия требуется два нажатия Tab; поэтому завершение табуляции часто становится таким взаимодействием букв и табуляции на вашей клавиатуре, что вы чувствуете, что готовитесь к сольному концерту на фортепиано.
Zsh решает эту небольшую проблему, циклически перебирая возможные завершения. Если вы наберете ls ~/D и нажмите Tab, Zsh сначала завершит вашу команду с Documents ; если вы снова нажмете Tab, он предложит загрузок и так далее, пока не найдете нужный.
Подстановочные знаки в Zsh
Подстановочные знаки ведут себя в Zsh не так, как привыкли пользователи Bash. Во-первых, их можно модифицировать. Например, если вы хотите отобразить все папки в текущем каталоге, вы можете использовать модифицированный подстановочный знак:
% ls
dir0 dir1 dir2 file0 file1
% ls *(/)
dir0 dir1 dir2
В этом примере (/) определяет результаты подстановочного знака, поэтому Zsh будет отображать только каталоги. Чтобы перечислить только файлы, используйте (.) . Чтобы перечислить символические ссылки, используйте (@) . Чтобы получить список исполняемых файлов, используйте (*) .
% ls ~/bin/*(*)
fop exify tt
Zsh знает не только о типах файлов. Он также может быть указан в соответствии со временем модификации с использованием того же соглашения о модификаторах подстановочных знаков. Например, если вы хотите найти файл, который был изменен в течение последних восьми часов, используйте mh модификатор (для модифицированных и часов ) и отрицательное целое число часов:
% ls ~/Documents/*(mh-8)
cal.org game.org home.org
To найти файл, измененный более (например) двух дней назад, модификаторы меняются на md (для модифицированный и день ) с положительным целым числом:
% ls ~/Documents/*(+2)
holiday.org
С модификаторами и квалификаторами подстановочных знаков можно делать гораздо больше, поэтому читайте справочную страницу Zsh для получения полной информации.
Побочный эффект подстановочных знаков
Чтобы использовать подстановочные знаки так, как вы бы использовали их в Bash, иногда их необходимо экранировать в Zsh. Например, если вы копируете какие-то файлы на свой сервер в Bash, вы можете использовать такой подстановочный знак:
$ scp IMG_*.JPG [email protected]:~/www/ph*/*19/09/ 14
Это работает в Bash, но Zsh возвращает ошибку, потому что он пытается расширить переменные на удаленной стороне перед выполнением команды scp . Чтобы избежать этого, вы должны экранировать удаленные переменные:
% scp IMG_*.JPG [email protected]:~/www/ph\*/\*19/09/14
Именно такие небольшие исключения могут расстроить вас при переходе на новую оболочку . Их не так много при использовании Zsh (вероятно, их больше при переключении обратно на Bash после знакомства с Zsh), но когда они случаются, сохраняйте спокойствие и будьте откровенны. Редко вы ошибетесь, строго придерживаясь POSIX, но если это не удается, найдите проблему, чтобы решить ее, и двигайтесь дальше. Hyperpolyglot.org оказался неоценимым для многих пользователей, использующих одну оболочку на работе и другую дома.
В моей следующей статье о Zsh я покажу вам, как устанавливать темы и плагины, чтобы сделать вашу Z-Shell еще Z-ier. Терминал
. Каковы практические различия между Bash и Zsh?
Во-первых, несколько важных моментов:
- Bash не исчезнет . Если вы уже используете bash, для вас ничего не изменится. Все, что изменилось, это то, что zsh будет оболочкой входа по умолчанию для новых учетных записей, и даже в этом случае вы можете выбрать вместо нее bash.
- Скрипты не затрагиваются . Что изменилось, так это оболочка для интерактивного использования, то есть оболочка в терминалах (а также несколько других вещей, которые используют оболочку входа в систему, например, crontabs). Если у вас есть сценарий в файле с разрешениями на выполнение, начинающийся со строки шебанга, такой как
#!/bin/bash
или#!/bin/sh
или#!/usr/bin/env bash
, он буду продолжать работать точно так же, как и раньше. - Синтаксис Zsh не полностью совместим с bash, но близок к нему. Много кода будет продолжать работать, например, типичные псевдонимы и функции. Основные отличия заключаются в интерактивных функциях настройки.
Теперь, если вы рассматриваете возможность перехода на zsh, что рассматривалось в течение многих лет, вот основные отличия, с которыми вы столкнетесь. Это не исчерпывающий список!
Основные отличия для интерактивного использования
Файлы конфигурации : bash читает (в основном) .bashrc
в интерактивных оболочках без входа в систему (но macOS по умолчанию запускает оболочку входа в терминалы), .profile
или .bash_profile
в оболочках входа и .inputrc
. Zsh читает (в основном) .zshrc
(во всех интерактивных оболочках) и .zprofile
(в оболочках входа). Это означает, что ни одна из ваших настроек bash не будет применяться: вам нужно будет их перенести. Вы не можете просто скопировать файлы, потому что многие вещи потребуют настройки.
Привязки клавиш используют совершенно другой синтаксис. Bash использует .inputrc
и встроенный bind
для привязки клавиш к командам readline. Zsh использует встроенный ключ bindkey
для привязки ключей к виджетам zle. Большинство команд readline имеют эквивалент zsh, но это не всегда идеальная эквивалентность.
Говоря о привязках клавиш, если вы используете Vi(m) в качестве редактора в терминале, но не в качестве режима командной строки в оболочке, вы заметите, что zsh по умолчанию использует режим редактирования vi (т. е. с командным режимом и режимом вставки), если EDITOR
или VISUAL
установлен на vi
или vim
. bindkey -e
переключает в режим emacs (т.е. где вы всегда можете печатать напрямую).
Подсказка : bash устанавливает подсказку (в основном) из PS1
, которая содержит символы обратной косой черты. Zsh устанавливает подсказку в основном из
PS1
, который содержит процент побегов. Хотя концепции схожи, escape-коды совершенно разные. Функциональность команды bash PROMPT_COMMAND
доступна в zsh через функции ловушки precmd
и preexec
. Zsh имеет более удобные механизмы для создания причудливых подсказок, включая механизм темы подсказок.
Основные механизмы командной строки (навигация с Вверх / Вниз , поиск с Ctrl + R , расширение истории с !!
и друзья, вспомнить последний аргумент с Alt + . или $_
) работают одинаково, но есть много различий в деталях, слишком много, чтобы перечислять их здесь. Вы можете скопировать .bash_history
в .zsh_history
, если вы не изменили параметр оболочки, который изменяет формат файла.
Завершение : обе оболочки по умолчанию используют базовый режим завершения, который в основном завершает имена команд и файлов, и переключаются в причудливый режим, включая bash_completion
в bash или запустив compinit
в zsh. Вы обнаружите, что некоторые команды лучше обрабатываются bash, а некоторые — zsh. Zsh обычно более точен, но иногда сдается, когда bash делает что-то неправильное, но разумное. Чтобы указать возможные завершения для команды, zsh имеет три механизма:
- «Старый» механизм завершения с
compctl
, о котором вы можете забыть. - «Новый» механизм заканчивания с
compadd
и множество функций, начинающихся с подчеркивания, и мощный, но сложный механизм настройки пользователя. - Эмуляция для поддержки функций завершения bash, которые можно включить, запустив
bashcompinit
. Эмуляция не идеальна на 100%, но обычно работает.
Многие настройки bash shopt
имеют соответствующие настройки setopt
в zsh.
Zsh по умолчанию не воспринимает #
как начало комментария в командной строке, только в скриптах (включая .zshrc
и т. д.). Чтобы включить интерактивные комментарии, запустите
setopt Interactive_comments
.
Основные отличия для сценариев
(и, конечно, для опытных пользователей в командной строке)
В bash $foo
принимает значение foo
, разбивает его на пробельные символы и для каждой части, разделенной пробелами , если он содержит подстановочные знаки и соответствует существующему файлу, заменяет шаблон списком совпадений. Чтобы просто получить значение foo
, вам нужно "$foo"
. То же самое относится к подстановке команд $(foo)
. В zsh $foo
— это значение foo
, а $(foo)
— это результат foo
за вычетом последней строки новой строки, за двумя исключениями. Если слово становится пустым из-за раскрытия пустых переменных без кавычек, оно удаляется (например, a=; b=; printf "%s\n" один "$a$b" три $a$b пять
печатает один
, пустая строка, три
, пять
). Результат подстановки команды без кавычек разделяется по пробелу, но части не подвергаются сопоставлению с подстановочными знаками.
Массивы Bash индексируются от 0 до (длина-1). Массивы Zsh индексируются от 1 до длины. Вы можете сделать нулевой индекс по умолчанию с помощью setopt ksh_arrays
. Zsh требует меньше фигурных скобок (если не включено ksh_arrays
). Например, предположим, что a=(first second Third "" last)
.
Функциональность | Синтаксис Bash | Идиоматический синтаксис zsh | Расширение |
---|---|---|---|
Первый элемент | ${а[0]} | $a[1] | первый |
Второй элемент | ${а[1]} | $a[2] | второй |
Последний элемент | ${а[${#а[@]}-1]} | $a[-1] | последний |
Длина | ${#a[@]} | $#a | 5 |
Все элементы | "${а[@]}" | "${a[@]}" или "${(@)a}" | первый второй третий (пустое слово) последний |
Все непустые элементы | $a | первый второй третий последний |
Bash имеет дополнительные шаблоны подстановочных знаков , такие как @(foo|bar)
для соответствия foo
или bar
, которые включаются только с помощью shopt -s extglob
. В zsh вы можете включить эти шаблоны с помощью
setopt ksh_glob
, но есть и более простой синтаксис, такой как (foo|bar)
, некоторые из которых требуют setopt extended_glob
(поместите это в свой .zshrc
, и он включен по умолчанию в функциях завершения). Zsh имеет **/
для рекурсивного обхода каталогов (как и современный bash, но не bash 3.2, который поставляется с macOS).
В bash по умолчанию, если шаблон подстановочных знаков не соответствует ни одному файлу, он остается без изменений. В zsh по умолчанию вы получите сообщение об ошибке, что обычно является самым безопасным параметром. Если вы хотите передать команде подстановочный знак, используйте кавычки. Вы можете переключиться на поведение bash с помощью setopt no_nomatch
. Вместо этого вы можете сделать так, чтобы несоответствующие шаблоны подстановочных знаков расширялись до пустого списка с помощью setopt null_glob
.
В bash правая часть конвейера выполняется в подоболочке. В zsh он запускается в родительской оболочке, поэтому вы можете написать что-то вроде somecommand | прочитать вывод
.
Некоторые полезные функции zsh
Вот несколько приятных функций zsh, которых нет в bash (по крайней мере, не без серьезного упора на локоть). Еще раз повторю, что это всего лишь подборка тех, которые я считаю наиболее полезными.
Квалификаторы Glob позволяют сопоставлять файлы на основе метаданных, таких как отметка времени, размер и т. д. Они также позволяют настраивать вывод. Синтаксис довольно загадочный, но очень удобный. Вот несколько примеров:
-
foo*(.)
: только обычные файлы, соответствующиеfoo*
и символические ссылки на обычные файлы, а не каталоги и другие специальные файлы. -
foo*(*.)
: только исполняемые обычные файлы, соответствующиеfoo*
. -
foo*(-.)
: только обычные файлы, соответствующиеfoo*
, а не символические ссылки и другие специальные файлы. -
foo*(-@)
: только оборванные символические ссылки, соответствующиеfoo*
. -
foo*(om)
: файлы, соответствующиеfoo*
, отсортированные по дате последнего изменения, начиная с самого последнего. Обратите внимание, что если вы передадите этоls
, он выполнит собственную сортировку. Это особенно полезно в… -
фу*(ом[1,10])
: 10 самых последних файлов, соответствующихfoo*
, сначала самые последние. -
foo*(Lm+1)
: файлы, соответствующиеfoo*
, размер которых не менее 1 МБ. -
foo*(N)
: то же, что иfoo*
, но если это не соответствует ни одному файлу, создать пустой список независимо от настройки параметраnull_glob
(см.выше).
-
*(D)
: соответствие всем файлам, включая файлы с точками (кроме.
и..
). -
foo/bar/*(:t)
(используя модификатор истории): файлы вfoo/bar
, но только с базовым именем файла. Например. если естьfoo/bar/qux.txt
, он расширяется какqux.txt
. -
foo/bar/*(.:r)
: взять обычные файлы подfoo/bar
и удалить расширение. Например.foo/bar/qux.txt
расширяется какfoo/bar/qux
. -
foo*.odt(e\''REPLY=$REPLY:r.pdf'\')
: взять список файлов, соответствующихfoo*.odt
и замените.odt
на.pdf
(независимо от того, существует ли файл PDF).
Вот несколько полезных шаблонов подстановочных знаков для zsh .
-
foo*.txt~foobar*
: все файлы.txt
, имя которых начинается сfoo
, но неfoobar
. -
image<->.jpg(n)
: все.jpg
файлов с базовым именемimage
, за которым следует номер, например.image3.jpg
иimage22.jpg
, но неimage-backup.jpg
. Квалификатор glob(n)
приводит к тому, что файлы перечислены в порядке номеров, то естьimage9.jpg
предшествуетimage10.jpg
(вы можете сделать это по умолчанию даже без-n
сsetopt numeric_glob_sort
) .
Для массового переименования файлов zsh предоставляет очень удобный инструмент: функцию zmv
. Рекомендовано для вашего .zshrc
:
автозагрузка zmv псевдоним zcp='zmv -C' zln='zmv -L'
Пример:
zmv '(*).jpeg' '$1.jpg' zmv '(*)-backup.(*)' 'резервные копии/$1.$2'
В Bash есть несколько способов применения преобразований при получении значения переменной. У Zsh есть кое-что из того же и многое другое.
Zsh имеет ряд небольших удобных функций для смены каталогов . Включите setopt auto_cd
, чтобы перейти в каталог, когда вы вводите его имя, не вводя cd
(сейчас в bash тоже есть). Вы можете использовать форму с двумя аргументами для cd
, чтобы перейти в каталог, имя которого близко к текущему каталогу. Например, если вы находитесь в /some/where/foo-old/deeply/nested/inside
и хотите перейти в /some/where/foo-new/deeply/nested/inside
, просто введите компакт-диск старый новый
.
Чтобы присвоить значение переменной, вы, конечно, пишете VARIABLE=VALUE
. Для отредактируйте значение переменной в интерактивном режиме, просто запустите vared VARIABLE
.
Последний совет
Zsh поставляется с интерфейсом конфигурации, который поддерживает несколько наиболее распространенных настроек, включая готовые рецепты для таких вещей, как завершение без учета регистра. Чтобы (повторно) запустить этот интерфейс (первая строка не нужна, если вы используете файл конфигурации, который был отредактирован
zsh-newuser-install
):
autoload -U zsh-newuser-install zsh-newuser-установить
По умолчанию, без файла конфигурации, многие полезные функции zsh отключены для обратной совместимости с 19версии 90-х. zsh-newuser-install
предлагает включить некоторые рекомендуемые функции.
В Интернете есть много сред конфигурации zsh (многие из них находятся на Github). Они могут быть удобным способом начать работу с некоторыми мощными функциями. Обратная сторона медали в том, что они часто заставляют вас делать то, что делает автор, поэтому иногда они мешают вам делать то, что вы хотите. Используйте их на свой страх и риск.
В руководстве по zsh содержится много информации, но оно часто написано кратко и трудно для понимания, а также содержит мало примеров. Не стесняйтесь искать объяснения и примеры в Интернете: если вы используете только ту часть zsh, которую легко понять в руководстве, вы многое упустите.