Ich habe ein Problem mit PhantomJS mit Web-Server-Modul in einer Multi-Thread-Art, mit gleichzeitiger Anfragen.
Ich benutze PhantomJS 2.0, um Highstock-Graphen auf der Serverseite mit Java zu erstellen, wie erklärt here (und den Code here). Es funktioniert gut, und beim Testen von Graphen verschiedener Größen, habe ich Ergebnisse, die ziemlich konsistent sind, etwa 0,4 Sekunden, um ein Diagramm zu erstellen.PhantomJS mit integriertem Webserver verwendet nur eine CPU
Der Code, mit dem ich verlinkt habe, wurde ursprünglich vom Highcharts-Team veröffentlicht und wird auch in ihrem Exportserver unter http://export.highcharts.com/ verwendet. Um gleichzeitige Anfragen zu unterstützen, führt es einen Pool von erzeugten PhantomJS-Prozessen, und im Prinzip ist sein Modell eine phantomjs-Instanz pro gleichzeitige Anfrage.
Ich habe gesehen, dass das Webserver-Modul bis zu 10 gleichzeitige Anfragen unterstützt (hier erklärt), also dachte ich, ich könnte darauf tippen, um eine geringere Anzahl von PhantomJS-Prozessen in meinem Pool zu halten. Als ich jedoch versuchte, mehr Threads zu verwenden, erlebte ich eine lineare Verlangsamung, als ob PhantomJS nur eine CPU verwendete. Diese Verlangsamung wird wie folgt angezeigt (für eine einzelne PhantomJS-Instanz):
1 Client-Thread, durchschnittliche Anforderungszeit 0,44 Sekunden.
2 Client-Threads, durchschnittliche Anfragezeit 0,76 Sekunden.
4 Client-Threads, durchschnittliche Anfragezeit 1,5 Sekunden.
Ist dies eine bekannte Einschränkung von PhantomJS? Gibt es einen Weg dahin?
(Frage gepostet auch here)
Sie haben einige * hier * Links vergessen. –
Die interessantere Frage könnte sein, warum sich die Zeit nicht verdoppelte, indem man von 1 zu 2 Clients ging und warum sie sich verdoppelte, indem sie von 2 zu 4 Clients ging. –
Es hat sich fast verdoppelt, ich denke, Sie können es auf die Fehlermarge in den Messungen zurückführen. – Yoni