Введение:В этой статье давайте познакомимсяNode.js,Узнайте, чего это может нам помочь.
Автор: Ши Вэньцян
Источник: Big Data DT (ID: hzdashuju)
В эволюции языка JavaScript, пытающегося избавиться от ярлыка «игрушечного языка», Node.js определенно может оставить след.Node.jsЭто не сторонняя библиотека инструментов, используемая для реализации определенных функций.,Это рабочая среда программ JavaScript.
До появления Node.js,использоватьJavaScriptСкрипты, написанные на этом языке, должны быть включены в веб-страницу.<script>Его можно выполнить только после того, как метка заключена в кавычки.,Из-за этого программы, написанные фронтенд-разработчиками, выглядят как аксессуары к интерфейсу, как бы вы на них ни смотрели.。Появление Node.js разрушает эти оковы.,Предоставляемая им среда выполнения позволяет запускать программы JavaScript на настольных компьютерах, терминалах командной строки, мобильных телефонах, планшетах и даже встроенных системах.,Это не только значительно обогащает сценарии применения JavaScript.,Это также заложило основу для последующего развития интерфейсной разработки и появления модели архитектуры среднего уровня.
Более десяти лет технологических ожиданий и эволюции сделали Node.js уже не новой технологией, расширяющей возможности чтения, а навыком, которым должны овладеть фронтенд-разработчики. Поговорка «фронтенд без понимания Node неполна». тоже Это уже не шутка.
Появление Node.js позволяет разработчикам внешнего интерфейса завершать разработку клиентов и серверов, не переключая языки. Людям, которые его знают, он часто нравится, а люди, которые его не знают, часто рассматривают его как развлечение для разработчиков интерфейса. думая, что Java может делать все, что может Node.js, и что он более зрелый. Так что же может Node.js и для чего он подходит?
01 Что такое Node.js
Node.js — это среда выполнения JavaScript, основанная на движке Chrome V8. Node.js использует управляемую событиями неблокирующую модель ввода-вывода, которая является легкой и эффективной. Ее нижний уровень написан на C/C++. Это официальное описание Node.js. Для разработчиков интерфейса, если вы хотите понять, что в нем содержится «движка», «рабочей среды», «управляемой событиями» и «неблокирующей модели ввода-вывода». значит, и задача непростая.
ТакNode.jsчто именно?Сначала поясним на примере аналогии.например,Кто-то отправил вам документ с расширением docx.,ты хочешь увидеть, что в нем,Итак, я открыл блокнот,Перетащите документ в окно блокнота,Потом я увидел много бреда. Это связано с тем, что программа «Блокнот» не распознает документы в этом формате.,Вам нужно сначала установить егоMicrosoft Office 2007 или более поздней версии программного обеспечения, а затем откройте его с помощью программы Word, чтобы увидеть правильно декодированное содержимое.
Если файл docx в примере рассматривать как программу, то Word — это его среда выполнения, точно так же, как связь между программой JavaScript и браузером. Если вы поняли структуру современного браузера, вы знаете, что он содержит движок JavaScript.
Раньше, если вы хотели просмотреть содержимое файла docx, вам почти приходилось полагаться на Microsoft. Office, а позже и Kingsoft, также выпустили офисный программный инструмент WPS. Office,Он также может интерпретировать и запускать файлы docx.,Таким образом, файл docx имеет несколько работоспособных сред.,То же самое относится и к Node.js для языка JavaScript.
Чтобы более интуитивно понять концепцию среды выполнения, вы можете попробовать интересный эксперимент: самостоятельно создать простой язык программирования, указать некоторый простой синтаксис, а затем использовать JavaScript для написания кода, который сможет интерпретировать этот синтаксис.
Например, напишите несколько простых программ на своем родном языке и, наконец, запустите программу JavaScript через Node.js и используйте в программе интерфейс чтения и записи файлов (File API), предоставляемый Node.js, для чтения файлов, которые вы написали в программе. свою собственную программу на языке программирования, чтобы проверить, можно ли ее правильно интерпретировать и выполнить. Как только вы поймете, как JavaScript интерпретирует и выполняет ваш собственный язык программирования, вы, естественно, поймете, что C/C++ делает со сценариями JavaScript в среде выполнения Node.js.
Конечно, процесс интерпретации реального кода гораздо сложнее, и многие ключевые идеи и технологии также применяются к дизайну фронтальной структуры.
По сравнению с техническими моментами идеи разработки дизайнеров Node.js, возможно, заслуживают изучения, чего не хватает большинству начинающих разработчиков.Node.jsПервоначальная цель разработки — более удобная реализация высокопроизводительногоWebсервер,Но когда оно наконец выйдет,Он не претендует на звание «технологии для реализации высокопроизводительных веб-серверов».,Вместо этого он предоставляет разработчикам инструмент,Одной из возможностей этого инструмента является реализация высокопроизводительных веб-серверов.
Этот идеологический разрыв особенно очевиден между младшими и старшими разработчиками: младшие разработчики склонны разрабатывать в процессно-ориентированном стиле под конкретные нужды бизнеса, что делает программы, которые они пишут, практически невозможными гибко реагировать на любые изменения требований, когда опытные разработчики сталкиваются с требованиями; , они обычно проектируют класс или абстрагируют инструментальный метод, не имеющий ничего общего с бизнес-логикой, а затем вызывают этот метод в своих собственных программах.
Если вы хотите стать отличным программистом, вы должны постоянно развивать свои способности разрабатывать программы, а не просто выполнять работу по переводу на уровне языка.
02 Что может Node.js
Среди множества функций Node.js наиболее важными для разработчиков интерфейсов являются возможность создавать веб-серверы, а также читать и записывать локальные файлы.
1. Создайте высокопроизводительный веб-сервер
Многие новички в Node.js должны были видеть классический пример создания веб-сервера менее чем за 10 строк кода. Хотя для фронтенд-разработчиков,Им все еще необходимо изучить базовые знания веб-сервера.,Только так нам будет легче осуществлять разработку на стороне сервера.,Но по сравнению с настройкой Apache или Nginx для достижения той же функциональности,Стоимость такого обучения уже очень низкая,В конце концов, фронтенд-разработчики могут создавать приложения, используя наиболее знакомый им язык JavaScript.
С другой стороны, в Node.js код может взаимодействовать с различными базами данных, а это означает, что фронтенд-инженеры могут напрямую использовать язык JavaScript для написания кода, взаимодействующего с базой данных (хотя в больших приложениях это не рекомендуется). При написании кода бизнес-логики нет очевидной разницы между Node.js и другими серверными языками. Таким образом, фронтенд-разработчики могут овладеть навыками полнофункциональной разработки, не переключая языки разработки.
Поскольку нижний уровень Node.js использует асинхронный неблокирующий механизм ввода-вывода, он больше подходит для сценариев с интенсивным вводом-выводом и небольшим объемом бизнес-логики и потребления вычислений. Хотя интерпретируемый язык сценариев сам по себе не подходит для выполнения вычислительных задач, нижний уровень Node.js написан кодом C/C++ и предоставляет интерфейс для уровня кода JavaScript для взаимодействия с кодом C/C++ при ресурсоемких вычислениях. задачи, Node.js необходимо использовать только в качестве сценария запуска для вызова базовой программы C/C++ для выполнения задач, требующих больших вычислительных ресурсов.
Задачи, выполняемые сервером, можно условно разделить наЧитать и писать интенсивные заданияиВычисление интенсивных задач。дляЧитать и писать интенсивные заданияс точки зрения,ЦП тратит больше времени на ожидание чтения и записи диска.,Скорость использования не высока,Сетевая связь, передача информации, а также чтение и запись на диск на веб-сервере — все это операции чтения и записи.,Он предъявляет более высокие требования к скорости отклика диска и эффективности передачи.
В сравнении,Вычисление интенсивных задачверноCPUТребования к вычислительной мощности выше,Но нагрузка на производительность, вызванная чтением и записью диска, очень мала.,Обычно нет необходимости взаимодействовать с интерфейсом ввода-вывода в процессе расчета.,Может выполняться напрямую и эффективно в памяти.,Процесс расчета таких задач обычно сложен.,Например, необходимо реализовать некоторые алгоритмы шифрования или матричные вычисления.
Факторы, которые необходимо учитывать при выборе серверной технологии для крупномасштабных архитектур, более сложны. Node.js не был готов выполнить эту задачу, когда он был первоначально разработан, сказал даже Райан Дал, отец Node.js. что при работе с крупномасштабными серверными приложениями при разработке опыт разработки Node.js не так хорош, как у языка Go.
но,В настоящее время в мире существует более 600 языков программирования.,Ни один язык не может решить все проблемы,Язык — это всего лишь средство для переноса и передачи идей программирования.,Как выбрать подходящую технологию для вашего целевого сценария,Возможно, разработчикам стоитсосредоточиться на вопрос.
Когда у вас появятся определенные накопления в области front-end, многие пожилые люди порекомендуют вам продолжить изучение более полных и сложных языков, таких как Java или C++. Цель этого — не только расширить границы ваших возможностей, но и улучшить их. также надеяться, что вы сможете вырваться из ограничений языка программирования, изучить и понять идеи, лежащие в основе языка программирования.
2. Функции чтения и записи локальных файлов.
На самом деле существует множество проблем, которые необходимо решить в нижней части функции чтения и записи файлов. Если в файле много содержимого и процесс чтения его в память занимает много времени, что делать? Стоит ли дождаться завершения операции чтения или сначала выполнить другие задачи? Если ресурс, запрошенный клиентом, представляет собой фильм высокой четкости и размер файла превышает общий объем памяти, доступной программе, файл точно не будет прочитан?
Модуль fs Node.js предоставляет как синхронные, так и асинхронные методы практически для каждого интерфейса файловых операций.,Он также поддерживает более детальный контроль над процессом чтения и записи в потоковом режиме.,Вы даже можете отслеживать изменения в указанных файлах или папках. Тот факт, что файл доступен для чтения и записи, означает, что разработчик может поручить программе анализировать содержимое файла в другой программе.,и проверьте и исправьте их,Его даже можно скомпилировать на другой язык.,Это краеугольный камень передовых инженерных возможностей.
03 Найм инженера полного стека JavaScript
Node.js предоставляет разработчикам внешнего интерфейса возможности разработки на стороне сервера благодаря возможности создавать высокопроизводительные веб-серверы и взаимодействовать с базами данных. Еще несколько лет назад разработчики могли использовать MEAN (MongoDB + Express + Angular.js + Node.js), чистый стек технологий JavaScript, для завершения разработки бизнес-логики с замкнутым циклом, и многие интерфейсные инженеры также называли себя Full-Stack инженеры.
Нельзя отрицать, что такой набор технологий действительно может позволить многим малым и средним командам продвигать продукты от творческой стадии до онлайн-версии с меньшими затратами рабочей силы и времени.,Но это также делает разработчиков JavaScript самыми известными инженерами полного стека в отрасли.,Потому что реализации бизнес-логики недостаточно для поддержки Full-Stack-инженеров в серверной разработке.
При разработке на уровне предприятия инженеры Java по-прежнему являются основной силой внутренней разработки.
Поскольку сама Java имеет строгую типизацию и полные объектно-ориентированные функции.,Таким образом, общее качество кодирования и осведомленность о программировании у серверных инженеров выше, чем у интерфейсных инженеров.,В сочетании с поддержкой стека технологий Angular, который очень похож на опыт разработки на Java (сам Angular — это технология, разработанная и поддерживаемая Java-инженерами Google).,Внутренние инженеры могут легко писать код, который так же стандартизирован и удобен в сопровождении, как и интерфейсные разработчики, что значительно повышает конкурентоспособность инженеров полного стека Java.
Если бы не порог, сформированный инженерной конфигурацией и практическим опытом CSS, фронтенд-инженерам было бы трудно отразить свою собственную ценность при столкновении с back-end фулл-стек-инженерами. Однако инженеры, имеющие опыт фронтенд-разработки, не так гладко используют стек технологий Node.js для разработки на стороне сервера. Самые популярные платформы Express и Koa предоставляют только платформы и базовое промежуточное программное обеспечение. , вам все равно потребуется большое количество промежуточного программного обеспечения, которое необходимо внедрить или разработать самостоятельно.
В это время разница между разработчиками станет очень очевидной. Даже если они вообще не понимают Node.js, серверные разработчики знают, что им следует уделять внимание ведению журналов, отслеживанию ошибок, управлению сеансами, проверке безопасности, мониторингу производительности. Модули или промежуточное программное обеспечение для объектно-реляционного сопоставления (ORM), подключения к базе данных и других функций. Однако обычные разработчики внешнего интерфейса часто используют операторы «try...catch...» для захвата времени выполнения в дополнение к добавлению, удалению, изменению и использованию. проверка бизнес-логики Неправильного сознания не существует.
Разработчикам внешнего интерфейса легко учитывать только нормальную ситуацию с бизнес-логикой. Пока основной процесс может работать нормально, они чувствуют, что все в порядке. Однако в реальном процессе разработки часто возникают граничные условия. которые не покрыты и требуют больше энергии.
Приравнивание серверной разработки к написанию кода бизнес-логики,Это все равно, что приравнивать фронтенд-разработку к написанию статического кода страницы.。Если вы действительно хотите быть полным инженером, вам нужно использовать скромное сердце, чтобы узнать эти странные знания.,Процесс обучения может быть трудным,Но результаты, которые вы узнаете, вам обязательно принесут пользу.
Об авторе: Ши Вэньцян, старший технический эксперт по интерфейсу, нынешний инженер по интерфейсу команды ByteDance Xingfuli, заслуженный инженер-программист аэрокосмической школы Сианьского университета Цзяотун, эксперт по облачным удовольствиям Huawei, когда-то находился под влиянием Google GDG (Сообщество разработчиков Google) приглашает к обмену технологиями. Он имеет богатый практический опыт и хорошо разбирается в крупномасштабном проектировании архитектуры интерфейсных систем, оптимизации производительности и построении инженерных систем.
Эта статья взята из «Руководства по международной разработке интерфейсов: анализ принципов библиотеки инструментов JavaScript и практическая практика» и опубликована с разрешения издателя. (ISBN: 978-7-111-70804-9)