Недавно полученные знания о разделении интерфейсов и серверов

Java Java EE

предисловие

Только лысая голова может стать сильнее.

Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…

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

(Я официально не писал внешний интерфейс, поэтому, если со статьей что-то не так, я надеюсь, что вы можете сообщить об этом в области комментариев~)

I. Предыстория

Я всегда знал, что моя текущая система отделена от передней и задней части, и мой интерфейс будет возвращать только JSON, но меня никогда не заботило, как внешний интерфейс обрабатывает мои данные JSON (и как он работает и работает)

Однажды, когда я проверял интерфейс, я привыкF12, я хочу напрямую увидеть, какие данные JSON возвращаются этим запросом. Но на первый взгляд в сети возвращается html формат:

请求的信息

Итак, мне очень любопытно, просто посмотрите на этот интерфейс, который я себе представлял. Итак, я пошел искать свой интерфейс.Давайте посмотрим на JSON (я также отлаживаю его, смотрю, действительно ли он запрашивает этот интерфейс):

接口信息

Результат:Мой интерфейс возвращает данные JSON, а ответ браузера возвращает формат HTML..

Итак, я пошел к своим фронтенд-приятелям и спросил, как это произошло. Он ответил мне: «Когда вы видите страницу, возвращенную в браузере, это должно быть сделано вашим сервером».

Я сказал: «Нет, мой интерфейс Java возвращает данные JSON, вы выполняли какую-то обработку с узлом посередине?» (Я слышал о Node.js раньше, но только слышал о нем)

Он сказал: «Node.js также является вашим бэкендом».

Я слышу это, да? Разве Node.js не относится к интерфейсу?

2. Первое знакомство с Node.js

Прежде чем столкнуться с этим инцидентом, я действительно прочитал пост на Zhihu, название темы такое《毕设答辩,老师说node不可能写后台怎么办?》

Заинтересованные друзья могут пойти разбираться, большая часть контента довольно проста для понимания:

я скачиваюNode.jsЯ нашел это очень краткое введениелаконичный:

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.


Node.js® — этоХромированный двигатель V8среда выполнения JavaScript.

Затем нажмите на движок Chrome V8 и взгляните на введение:

V8 — это высокопроизводительный движок JavaScript и WebAssembly от Google с открытым исходным кодом, написанный на C++, который используется, в частности, в Chrome и Node.js.


V8 — это высокопроизводительный движок JavaScript и WebAssembly от Google с открытым исходным кодом, написанный на C++. Он используется в Chrome, Node.js и т. д.

Прочитав вступление, я был ошарашен, что это за хрень? Позволь мне объяснить

2.1 Что такое двигатель V8?

Как мы все знаем, JavaScriptаналитическийЯзык, код JavaScript, который мы пишем, будет анализироваться движком JavaScript, а V8 — это своего рода движок JavaScript.

  • В традиционном смысле мы думаем, что синтаксический анализатор разрешается один за другим (побочное выполнение при синтаксическом анализе), но для увеличения скорости синтаксического анализа JavaScript (эквивалентно улучшению пользовательского опыта) при синтаксическом анализе делается точка «руки ."
  • двигатель V8: В целях повышения производительности парсинга были внедрены некоторые "бэкендовые" технологии (но он изначально был написан на C++). Сначала он преобразует исходный код JavaScript в абстрактное синтаксическое дерево, а затем генерирует байт-код из абстрактного синтаксического дерева. Если обнаружится, что функция вызывается несколько раз или тело цикла (горячий код) вызывается несколько раз, эта часть кода будет удалена.Оптимизация компиляции. Скажем прямо: дагорячий кодкомпилировать,Прямой парсинг негорячего кода.

示意图

Описание: Движок V8 — разновидность движка JavaScript, написанный на C++ и обладающий хорошей производительностью.

Использованная литература:

2.2 Назад к Node.js

Из соображений безопасности браузеры не предоставляют среду ввода-вывода для JavaScript.и задний язык определенно способен к сети связи, чтение файлов и запись (IO).

Позже люди НиубиПереместите движок V8 на сервер, на базе двигателя V8Добавлена ​​сетевая связь, ввод-вывод, HTTP и другие серверные функции.. Возьми имя:Node.js

  • например, черезlibuvбиблиотека для чтения файлов и установления соединений TCP/UDP. пройти черезxxxБиблиотеки для разбора HTTP-запросов и ответов... Эти библиотеки написаны на C/C++.

搬运

так,Node.jsОн работает на стороне сервера, но базовым языком является JavaScript.

3. Начало работы с разделением клиентской и серверной части

Проанализируйте свой собственный путь изучения JavaWeb:

  • Когда я впервые узнал о сервлете, я написал что-нибудь в объекте ответа.HTMLКод выводится в браузер, чтобы увидеть эффект
  • Позже, изучение JSP, просто используйте сервлет для управления, JSP - это вид.
    • JSP по сути является сервлетом, но выглядит какHTMLФайл после компиляции все равно станет классом HttpJspPage (этот класс является подклассом HttpServlet).
  • Позже я изучил технологию AJAX и обнаружил, что мы можем полностью взаимодействовать через AJAX. AJAX запрашивает сервлет, сервлет возвращает данные JSON, а AJAX получает данные, возвращенные сервлетом, для разбора и обработки. Здесь вообще не нужен JSP (чистый HTML+AJAX), который является своего рода разделением фронтенда и бекенда.
    • Опыт разработки: если вы полностью используете HTML+AJAX, вы обнаружите, что вам нужно написать много кода JavaScript, и эти коды JavaScript нелегко использовать повторно.
    • С точки зрения развертывания, он по-прежнему развертывается с Java (в рамках ресурсов), а внешний интерфейс не развертывается отдельно.
  • Позже я изучил некоторые часто используемые шаблонизаторы (такие как freemarker), которые на самом деле мало чем отличаются от JSP, но по производительности намного лучше, чем JSP.
  • ...пролил слезы невежества

Разделение передней и задней части, которое я изучил до сих пор, в первую очередьРазвертывание отделено(По крайней мере, не в комплекте с Java для развертывания):

前端和Java部署机器分离

Интерфейс Java просто возвращает данные JSON:

Java接口都只返回JSON格式的数据

Об этих основных интерфейсных фреймворках:angular/vue/reactЯ не писал ничего из этого, так что не будет много BB.Что я всегда хотел знать, так это: какая связь между передней рамой рамы и узлом. Я спросил фронтенд-друга, и его ответ был примерно таким:

Фронтенд теперь про инжиниринг, а инжиниринг использует только node (то есть будут использоваться те, которые будут запакованы и скомпилированы, если проект действительно запустится, такого нет)

------------- Следующий цитируемый отрывок:

Webpack, Less, Sass, Gulp, Bower и плагины для этих инструментов разработаны на Node ---@zhihuchenlong

Например: в процессе разработки пакеты, от которых должен зависеть внешний интерфейс JavaScript, также очень сложны.Как и в случае с Java, у нас есть Maven, а внешний интерфейс теперь имеетnpm(управление пакетами)

  • в то время как npm сопровождаетсяNode.jsустановлены вместе. Таким образом, интерфейс (vue/angular/react) неотделим от среды разработки.Node.jsиз(Скомпилировать, упаковать и т.д.)

Ссылки (зачем использовать npm):

3.1 Способ 1 (Nginx+сервер)

Хорошо, теперь предположим, что мы закончили развиваться с передним концом (Vue / Angular / React), а среда разработки будетJavaScriptПосле компиляции/упаковки мы можем получитьчистый статическийдокумент. Мы можем напрямую размещать чистые статические файлы в Nginx (CDN) и других местах [при условии, что они могут отвечать на HTTP-запросы].

Если запрос на вызов внутренней службы, он будет перенаправлен на внутренний сервер через Nginx и возвращен в браузер через Nginx после завершения ответа.

3.2 Способ 2 (присоединиться к Node.js)

Добавить на основе предыдущегоNode.js, почемуNode.js, важной причиной является:Ускорьте отрисовку первого экрана и решите проблемы с SEO

ПрисоединяйсяNode.js, процесс запроса в это время должен быть таким:

架构图

Запрос, инициированный браузером, проходит через Nginx клиентской машины.распределение.

Запрос URL равномерно распределяется на сервер узла, а на сервере узла данные шаблонов страницы запрашиваются с заднего сервера через службу RPC в соответствии с типом запроса, а затем страница собрана и отображается;

Запрос API напрямую перенаправляется на внутренний сервер для завершения ответа.

Наконец

Хорошо, теперь вопрос: как вы думаете,Node.jsЭто относится к бэкэнду или к фронтэнду?

Не можешь посмотреть? Я рекомендую некоторые статьи и материалы, которые я считаю хорошими:

рад вывестигалантерейные товарыОбщедоступный номер технологии Java:Java3y. В публичном аккаунтеБолее 200 оригинальных статейТехнические статьи, обширные видеоресурсы, красивые карты мозга,Следуйте, чтобы получить его!

转发到朋友圈是对我最大的支持!

Я думаю, что моя статья хорошо написана, нажмитеотличный!