2016-04-06 7 views
0

Ich schreibe eine serverseitige Anwendung mit JavaScript (Express). Also muss ich einen großen Strom von Zeichen validieren (Basis 64 String). Ich weiß irgendwie, was ich tun möchte und wie, aber ich habe eine Frage der Leistung.Was passiert mit dem JavaScript-Stack, wenn eine Variable an eine Funktion übergeben wird?

Beachten Sie, dass die hochgeladene Zeichenfolge wirklich groß ist (bis zu 5 MB). Ich habe bereits einige Funktionen geschrieben, die die Validierung durchführen sollten, aber ich bin mir nicht bewusst, was hinter der Haube passiert.

function validate(str) { 
    .... 
    return bool; 
} 
var b64_string = '......'; // <- string can be 5 megabytes 
if(validate(b64_string) { 
    doSomething(b64_string); 
} 

Wenn dieses C ist ein Stapel würde für Validieren (str) Funktion zugeordnet wird, und würde es für gebenen Variablen 5 MB Speicher sein.

Aber was passiert in JavaScript-Engine? Gibt es eine Möglichkeit, den Zeiger so zu senden, dass der Speicherverbrauch nicht zu groß wird? T

Vielen Dank im Voraus!

+0

Ich frage mich, warum die nach unten Abstimmung ohne Erklärung ¯ \ _ (ツ) _/¯ – Rouz

Antwort

2

Objekte in Javascript werden als Referenz übergeben.

Ich glaube, ganze Zahlen und Strings (etc) sind nicht, so seien Sie vorsichtig mit diesem Punkt.

Sie können Ihre Zeichenfolge zu einem Objekt-Hash-Verweis hinzufügen, den Sie dann als Referenz in der Kette übergeben können.


zum Beispiel:

var hashRef = {}; 
hashRef.b64_string = '......'; // <- string can be 5 megabytes 
function validate(hashRef) { 
    .... 
    return bool; 
} 
if(validate(hashRef)) { 
    doSomething(hashRef); 
} 
+0

schön. Ich werde das überprüfen. Da meine Funktionen sowohl validieren als auch modifizieren, habe ich über die Verwendung von Schließungen nachgedacht - aber ich habe meine Validierung auf ein Modul getrennt, so dass es ein Schmerz ist ... Danke, trotzdem werde ich versuchen (und werde nicht vergessen, deine Antwort +1 zu geben) – Rouz

+0

Nein Problem @Rouz glücklich zu helfen^_^ – Neal

+0

"Ich glaube, ganze Zahlen und Strings (etc) sind nicht, so seien Sie vorsichtig von diesem Punkt". Strings werden bei den meisten Motoren intern als Referenz übergeben. – Ginden