Heim > Web-Frontend > js-Tutorial > Hauptteil

Kenntnisse über Front-End- und Back-End-Trennung und praktische Nodejs-Middle-Tier-Dienste

一个新手
Freigeben: 2017-10-25 13:01:53
Original
2810 Leute haben es durchsucht

1. Hintergrund

Fortsetzung von oben, kurze Diskussion der Trennung und Praxis von Front-End und Back-End (1) Wir verwenden einen Scheinserver, um unseren eigenen Front-End-Datensimulationsdienst aufzubauen Im Entwicklungsprozess von Front-End und Back-End müssen wir lediglich Schnittstellenspezifikationen definieren, damit einander ihre jeweiligen Entwicklungsaufgaben ausführen kann. Führen Sie während des gemeinsamen Debuggens einfach ein Daten-Joint-Debugging gemäß den zuvor definierten Entwicklungsspezifikationen durch. Die Funktionen des Frontends und Backends sind klarer:

后端 前端
提供数据 接收数据,返回数据
处理业务逻辑 处理渲染逻辑
Server-side MVC架构 Client-side MV* 架构
代码跑在服务器上 代码跑在浏览器上

Die Trennung hier ist sauber und die Arbeitsteilung ist klar, aber... wir können das Problem leicht finden:

  1. Client-seitiges Model It ist die Verarbeitung des serverseitigen Modells

  2. Clientseitige Ansicht und Serverseite sind verschiedene Ebenen von Dingen

  3. Clientseitiger Controller und Der Controller auf der Sever-Seite verfügt über eine eigene

  4. Route auf der Client-Seite, aber die Serverseite verfügt möglicherweise nicht

darüber Das heißt, die Server- und Client-Schichten überschneiden sich und jeder macht sein eigenes Ding, was es schwierig macht, die spezifischen Aufgaben zu vereinheitlichen. Und es kann mit einigen Leistungsproblemen einhergehen. Die spezifischste Manifestation ist unsere häufig verwendete SPA-Anwendung:

  1. Rendering, die Werte werden alle auf dem Client durchgeführt, es gibt Leistungsprobleme

  2. erforderlich. Warten Sie, bis Ressourcen verfügbar sind, bevor Sie fortfahren. Es erscheint ein kurzer weißer Bildschirm und ein Blinken.

  3. Das Erlebnis auf Mobilgeräten mit niedriger Geschwindigkeit ist äußerst schlecht

  4. Das Rendern erfolgt ausschließlich auf der Clientseite, Vorlagen können nicht wiederverwendet werden und die SEO-Implementierung ist mühsam.
  5. Dann wird die Menge unseres Codes immer größer und Wir müssen immer mehr Formulare überprüfen. Manchmal muss die Front-End-Übermittlung das Formular einmal überprüfen.
Der Server muss überprüft werden, um die Datenzuverlässigkeit zu gewährleisten. Das Front-End-Routing ist möglicherweise nicht auf dem Server vorhanden ... und so weiter, eine Reihe von Wiederverwendbarkeitsproblemen. Daher erfordert unsere bisherige Rekonstruktion möglicherweise tieferes Nachdenken.


2. Beginnen Sie mit dem Refactoring

Bevor wir mit dem Refactoring beginnen, müssen wir die Front-End- und Back-End-Grenzen aufteilen, das heißt, was zur Front-End-Kategorie gehört und was gehört zur Back-End-Kategorie. Die traditionellste Front-End- und Back-End-Aufteilung könnte so aussehen:

Kenntnisse über Front-End- und Back-End-Trennung und praktische Nodejs-Middle-Tier-DiensteDann stellt sich die Frage: Ist die Verkabelung unserer Front-End- und Back-End-Abteilung nach Aufgabenbereichen aufgeteilt? Seit nodejs können wir den Umfang von Front-End und Back-End in Bezug auf Jobfunktionen neu definieren:

Kenntnisse über Front-End- und Back-End-Trennung und praktische Nodejs-Middle-Tier-DiensteWie Sie sehen können, gibt es solche Hier gibt es mehr Front-Ends als vor NodeJS, das heißt, wir haben einen NodeJS-Dienst als mittlere Schicht zwischen Front- und Back-End erstellt!

Warum wählen wir NodeJS als mittlere Ebene? Da wir die mittlere Ebene in die Front-End-Kategorie eingeordnet haben, ist nodejs für Front-end-Freunde immer noch js, sodass es aus grammatikalischer Sicht kein Problem sein sollte, es zusammenzufalten. Zweitens sind auch die Entwicklungstransferkosten gering und es besteht keine Notwendigkeit, die Logik und Syntax der Sprache hin und her zu wechseln:


    Das Front-End ist mit der Sprache vertraut. und die Lernkosten sind niedrig
  1. Beide sind JS und können im Front- und Backend wiederverwendet werden
  2. Geeignet für: ereignisgesteuert , nicht blockierende E/A
  3. Geeignet für IO-intensive Unternehmen
  4. Die Ausführungsgeschwindigkeit ist auch nicht schlecht
  5. Okay, nachdem ich so viele Dinge im Voraus gesagt habe, was kann uns diese mittlere Schicht bringen? Sie müssen wissen, dass die Entwicklungskosten für die Einführung von NodeJS ebenfalls sehr hoch sind. Erstens handelt es sich um eine zusätzliche Schicht von Diensten, ganz zu schweigen davon, dass allein die Übertragungszeit eine zusätzliche Schicht an Übertragungszeit darstellt. Lassen Sie uns als Nächstes untersuchen, welche Anwendungsszenarien uns NodeJS mehr Vorteile als Nachteile bringen können.

3. Beginnen Sie die Reise der mittleren Ebene

Nach der Einführung von nodejs teilen wir die Front-End- und Back-End-Funktionen neu auf:

Kenntnisse über Front-End- und Back-End-Trennung und praktische Nodejs-Middle-Tier-Dienste Dies ist die Hauptidee der Middle-Layer-Nodejs:

1. Reparatur der Schnittstellendatenzuverlässigkeit

Manchmal Der Server sendet an uns zurück. Die Daten entsprechen möglicherweise nicht der vom Front-End gewünschten Struktur. Alle verwendeten Anzeigedaten werden vom Back-End über eine asynchrone Schnittstelle (AJAX/JSONP) bereitgestellt und vom Front-End nur angezeigt. Allerdings stellt das Backend häufig Backend-Datenlogik bereit, und das Frontend muss diese Datenlogik auch verarbeiten. Wenn ich beispielsweise eine Funktion entwickle, stoße ich manchmal auf dieses Problem:

Kenntnisse über Front-End- und Back-End-Trennung und praktische Nodejs-Middle-Tier-Dienste

Kenntnisse über Front-End- und Back-End-Trennung und praktische Nodejs-Middle-Tier-DiensteEin bestimmtes vom Server zurückgegebenes Feld ist null oder die vom Server zurückgegebene Datenstruktur ist zu tief. Das Front-End muss kontinuierlich solchen Code schreiben, um festzustellen, ob die Datenstruktur wirklich das Richtige und nicht null oder undefiniert zurückgibt:

In diesem Fall sollte unser Front-End das Format der Daten nicht wiederholt überprüfen, und dies sollte nicht das sein, was browserseitige JS tun müssen. Wir können eine Schnittstellenweiterleitung in der mittleren Schicht durchführen und während des Weiterleitungsprozesses eine Datenverarbeitung durchführen. Sie müssen sich keine Sorgen um die Datenrückgabe machen:
if (params.items && params.items.type && ...) {
   // todo
}
Nach dem Login kopieren
router.get('/buyer/product/detail', (req, res, next) => {
  httpRequest.get('/buyer/product/detail', (data) => {
    // todo 处理数据
    res.send(data);
  })
})
Nach dem Login kopieren

2. 页面性能优化 和 SEO

有点时候我们做单页面应用,经常会碰到首屏加载性能问题,这个时候如果我们接了中间层nodejs的话,那么我们可以把首屏渲染的任务交给nodejs去做,次屏的渲染依然走之前的浏览器渲染。(前端换页,浏览器端渲染,直接输入网址,服务器渲染)服务端渲染对页面进行拼接直出html字符串,可以大幅提高首屏渲染的时间,减少用户的等待时间。这种形式应用最广的比如 Vue 的服务端渲染,里面也有相关的介绍。
其次对于单页面的SEO优化也是很好地处理方式,由于目前的ajax并不被搜索百度等搜索引擎支持,所以如果想要得到爬虫的支持,那么服务端渲染也是一种解决方法。(PS:如果觉得服务端渲染太麻烦,我这里还有一篇介绍处理SEO的另一种思路处理 Vue 单页面 Meta SEO的另一种思路可以参考)

3. 淘宝常见的需求解决方案

需求:在淘宝,单日四亿PV,页面数据来自各个不同接口,为了不影响体验,先产生页面框架后,在发起多个异步请求取数据更新页面,这些多出来的请求带来的影响不小,尤其在无线端。

解决方案:在NodeJS端使用 Bigpiper 技术,合并请求,降低负担,分批输出,不影响体验。同时可以拆分大接口为独立小接口,并发请求。串行 => 并行,大幅缩短请求时间。


Das obige ist der detaillierte Inhalt vonKenntnisse über Front-End- und Back-End-Trennung und praktische Nodejs-Middle-Tier-Dienste. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage