2016-07-08 2 views
5

Meine Website ist in PHP geschrieben. Node.js ist auch für socket.io eingerichtet. Ich habe über das serverseitige Rendering mit Reactjs nachgedacht, damit ich die Ansichten wiederverwenden kann. v8js Erweiterung verwenden planen, aber dann stieß ich auf this article reden über zwei mögliche Lösungen:Ist node.js mit reactjs als php template rendering service eine gute Idee?

1.Verwenden v8js Erweiterung und Reagieren-PHP-V8Js

2.Send Daten von PHP node.js Ansichten zu machen , Beispiel:

node.js

require("babel/register"); 
var React = require('react'); 
var express = require('express'); 
var path = require('path'); 
var bodyParser = require('body-parser'); 

var app = express(); 
app.use(bodyParser.json()); 
app.use('/', function(req, res) { 
    try { 
     var view = path.resolve('./views/' + req.query.module); 
     var component = require(view); 
     var props = req.body || null; 
     res.status(200).send(
      React.renderToString(
       React.createElement(component, props) 
      ) 
     ); 
    } catch (err) { 
     res.status(500).send(err.message); 
    } 
}); 

php

use GuzzleHttp\Client; 

$app->get('/{name:.*?}', function($name) use ($app) { 
    $client = new Client(['base_url' => 'http://localhost:3000']); 
    $response = $client->post('/', [ 
     'json' => ['name' => ucfirst($name ?: 'World')], 
     'query' => ['module' => 'hello'], 
    ]); 
    $contents = $response->getBody()->getContents(); 

    return response($contents, 200); 
}); 

Der Autor sagt, dass er die zweite Methode vorziehen würde, weil die erste:

Sofern Sie bequem Installation sind (und Aktualisierung) libv8 und die V8Js PECL-Erweiterung auf Produktionsmaschinen, das ist keine Option . Persönlich würde ich diesen Weg nicht gehen. Das Installieren der Abhängigkeiten ist umständlich, Abhängigkeitsverwaltung ist schwierig, und gibt es nicht viele Ressourcen, die Sie entlang des Weges führen. In , müssen Sie die Tatsache berücksichtigen, dass Ihre Javascript Builds nicht mit Reagieren gebündelt werden soll, wenn Sie diese wiederverwenden möchten.

Können Sie mir sagen, was er meint mit "Javascript baut nicht in der Lage zu bündeln mit reagieren"? Ich habe darüber nachgedacht, v8js + React-PHP-V8Js zu verwenden, also möchte ich einige der Nachteile davon verstehen. Würden Sie die zweite Methode (node.js als Vorlage-Rendering-Dienst) bevorzugen? Ich habe node.js bereits ausgeführt, also scheint das ein guter Vorschlag zu sein.

Antwort

2

Dies ist eine Meinungsfrage, so dass jede Antwort, die Sie erhalten, eine Meinung sein wird.

Ich werde Nein sagen, es ist keine gute Idee, und meine Argumentation zu erklären.

Jedes Softwareprojekt hat eine Komplexität, die grob anhand der Anzahl der verwendeten Schlagworte gemessen werden kann. Das heißt, "eine hochverfügbare, mehrsprachige React-Website, die von AWS Lambda-Services unterstützt wird" klingt von Natur aus haarig. Jedes Schlagwort multipliziert die Bemühungen der Schlagworte zuvor. Sie schlagen vor, "eine Site mit PHP zu erstellen, die ReactJS für serverseitiges Rendering mit einem zugrunde liegenden V8JS-Rendering-Knoten verwendet ..." und Ihnen die Komplexität ausgeht, bevor Sie die Problemdomäne erreichen.

Sie werden Probleme mit React haben, die ein völlig anderes Rendering-Modell haben. Sie werden Caching-Probleme auftreten. Sie werden sysadmin Probleme treffen.

Tun Sie es nicht.

1

Ich denke, die zweite Option "Template Engine als Service ausführen" ist eine bessere Option, da es weniger Komplexität und weniger Abhängigkeiten hat.

Ich denke Server Side-Rendering ist eine interessante Idee, und es hat viele große Vorteile.

  1. Die Leistung des Servers ist berechenbarer als die vielen unterschiedlichen Gerätekonfigurationen Ihrer Benutzer. Hier wird also ein wenig darüber nachgedacht, was die Zielgruppe für Ihre App ist. (wenn viele Benutzer mit beschissener Handy dann extra Punkt für serverseitiges Rendering)

  2. Der Anstieg der wahrgenommenen Leistung. Benutzer vermeiden die leere Seite und das Laden von Spinner. (Wahrgenommene Leistung - weil der Benutzer immer noch auf das Anhängen von Event-Handlern warten muss)

  3. Sie machen Ihr Web für Crawler verfügbar, die normalerweise weniger JavaScript-fähig sind.

  4. Ich denke, korrekt ausgeführt serverseitigen Rendering könnte weniger Komplexität und weniger Wartungsaufwand bieten. Aber das ist mehr Vorteile für größere Teams. Für einen einzelnen Entwickler, der den Code so strukturiert und abstrahiert, dass er funktioniert, dauert es oft länger als die Trennung von Sichten für den Client und den Server.

kurz So würde ich es nicht tun, bevor Tonnen Forschung in sie und mein Rat ist, „die Dinge einfach halten“ setzen. Für jede Freude muss ein Preis bezahlt werden.

Einige Probleme zu überwinden:

Vorlagen richtig Server-Seite zu übertragen, und Client-Seite müßte Zugang zu dem gleichen Anwendungszustand haben. (überprüfen Redux https://github.com/reactjs/redux)

Echte Web-Anwendungen müssen oft mit dem Server interagieren und Daten von ihm laden. Wie geht das mit dem aktuellen Setup?

Sie haben möglicherweise asynchrone Aktionen in Ihren Ansichten und das serverseitige Rendern ist synchron.

Zusätzliche Sicherheit Auswirkungen.

1

Die zweite Option ist eine bessere Idee meiner Meinung nach auf lange Sicht im Vergleich zu den ersten in einem eher kurzfristigen Projekt zu tun, eine höhere Anzahl von Variablen und mehr Handhabung benötigt, um die Variablen verarbeiten und die Handhabung von JavaScript. Sie werden viel weniger Wartung haben und es wird einfacher sein, Fehler zu lösen, die bei Verwendung der zweiten Option auftreten könnten. Auch einfacher zu integrieren meiner Meinung nach, wenn es nur PHP auf PHP ist, anstatt JavaScript mit diesen Antworten umzugehen.

Verwandte Themen