2013-10-01 3 views
17

Ich muss Tabellenwerte von ca. 200x50 (Zeilen, Spalten) von jQuery zu PHP posten. Zwei Optionen:POST Tausende von Vars gegen eine lange JSON-String: Was ist vorzuziehen?

1) Senden Sie es als Array mit 10.000 Vars (Erhöhung der php.ini max_input_vars).

2) Serialisieren Sie das Array zu einer JSON-Zeichenfolge, POST als Zeichenfolge und dekodieren Sie in PHP auf der Serverseite.

Was ist vorzuziehen? Irgendwelche möglichen Probleme mit der Option 1?

Dank


PS. Das Update. Nach dem Testen beider Tränke auf einem großen Eingabe-Tabellen bis zu 250x50 Zellen, sieht es als die erste Option ist viel schneller: 1-2 Sekunden vs ~ 17-20sec für die JSON-Zeichenfolge.

Der Flaschenhals ist die Datenübertragungszeit zum Server als Objekt-zu-JSON und zurück Transaktionen sind fast sofort (ein paar Millisekunden).

+0

ich auf jeden Fall mit der Option # 2 gehen würde. Eine JSON-POST-Nutzlast würde gut funktionieren und würde keine Server-Konfigurationsmanipulation erfordern. – Phil

+5

Warum versuchst du beides nicht und sagst uns, welches besser für dich ist? – Mark

+0

Wenn Sie sich wiederholende Parameternamen haben, werden diese einen großen Teil der zu übertragenden Daten ausmachen. Also würde ich versuchen, diese so kurz wie möglich zu halten oder sie sogar so weit wie möglich davon fernzuhalten (verwende Arrays in JSON, nicht Objekte, bei denen die Schlüssel für jedes Element wiederholt werden müssen). – CBroe

Antwort

0

Ich sende PUT Anfragen an unseren Server mit binären Daten im Körper, wahrscheinlich vergleichbar mit 10k Textaufzeichnungen und die Übertragung ist sehr schnell. Ich würde mich wahrscheinlich fragen, was dort vor sich ging, ob dich etwas in den Übertragungszeiten von einem gegen einen anderen irreführen könnte. Zum Beispiel könnten die Post-Vars die "Übertragung" als unterschiedliche Phasen der Anfrage betrachten. Oder vielleicht, wenn Sie der json-Struktur eine Menge überflüssiges Gepäck mit Zeilen-/Spaltennamen oder etwas hinzugefügt haben?

Wenn sich das als wahr herausstellte und jede Methode eine gleichwertige Leistung hat - würde ich persönlich mit strukturiertem JSON in den Körper gehen, weil es sauberer und leichter zu sehen/zu debuggen ist als eine Reihe von codierten Postvariablennamen.

Auch - ich habe keine Ahnung, was Ihre App tut, so dass Ihre Vorgehensweise völlig angemessen sein kann. Aber ich könnte herausfinden, ob es möglich ist, Daten nach Bedarf zu senden, anstatt eine ganze Tabelle auf einmal zu senden. (Ich ärgere mich, wenn Leute meine Frage nicht beantworten und versuchen, mir eine alternative Methode zu geben, Dinge zu tun, also nimm das letzte bisschen mit einem Körnchen Salz! Aber es scheint ungewöhnlich, dass ein Mensch 10k Datensätze berührt hätte - erfordert sie alle an den Server zur gleichen Zeit gesendet werden)

0

Sie haben bereits Ihre eigene Frage beantwortet. Es gibt einen vernünftigen Kompromiss zwischen Leistung und Qualität des Codes, der bei der Entwicklung der Software verwendet werden sollte.

So Json wird auf beiden Seiten (Javascript und PHP) unterstützt und bietet eine bessere Struktur in Ihrem Code.

0

Ich denke, es gibt viele Faktoren. In welcher Umgebung arbeiten Sie, Server und Client sind sie auf dem gleichen PC? Müssen Sie dies jeden Tag oder jede Stunde tun?

Sind andere Projekte auf demselben Server, damit sie langsamer reagieren können? In ein oder zwei Monaten werden Sie mehr als 10K vars haben?

Wenn Sie die Daten wie in der ersten Option veröffentlichen, da Javascript schneller ist als PHP, können Sie einige Daten verlieren.

Wenn Sie es asynchron tun können, suchen Sie nach RabitMQ es ist ein Messaging Server, die Mitarbeiter, wenn der Server bereit ist (tut es auch schnell!)

0

Serialisieren Sie es zu einem JSON-String, aber verwenden Sie json_encode() und json_decode(), da es viel schneller ist. Setzen Sie die Variablen in ein Objekt und serialisieren Sie sie anschließend.

Auch sollte Javascript mehr Arbeit machen, da es der Client wäre, der es tun würde, der den Server unter solch starker Last nicht stellen würde.

0

Ich würde eine Variante der Option # 1 vorschlagen. Es ist bekannt, dass JSON-Codierer und Decodierer fehlerhaft sind und plattformübergreifende Probleme haben, aber das Posten von Tausenden von Variablen könnte ein Problem sein. Stattdessen können Sie alle Post-Variablen als eine einzige Anwendung/x-www-form-urlencoded Post-Variable übergeben und sie dann in PHP mit parse_str() dekodieren.

Javascript:

data = "data="+escape("v[0][0]="+escape(v[0][0])); 

PHP:

parse_str($_POST['data'],$data); 
Verwandte Themen