Límite de caracteres de una variable de cadena de javascript

4 minutos de lectura

avatar de usuario
Rohith

¿Puede la cadena de JavaScript almacenar 100K caracteres? Escribí un script donde una cadena de PHP se pasa a una variable en JavaScript. Funciona bien cuando se corta a casi diez mil caracteres, pero rompe el script cuando intenta pasar la cadena completa cuya longitud es un poco mayor a 100K. Sin embargo, no se encontraron errores. ¿Hay alguna solución para esto en cuanto a alguna forma de aumentar el límite de caracteres de la variable JavaScript? Solo soy un principiante. Agradecería si alguien pudiera encontrar una solución para esto.

  • ¿Qué quieres decir con “romper el guión”?

    – Xymostech

    4 de diciembre de 2012 a las 6:51

  • Consulte stackoverflow.com/questions/5926263/… para obtener información relevante. Supongo que el límite está en PHP, no en JS.

    – jfriend00

    4 de diciembre de 2012 a las 6:52

  • Abre la consola JS y prueba esto por ti mismo. str = ""; for(var i = 0; i < 100000; i++) { str = str + "x"; } luego escribe str y pulsa enter. Mira qué pasa.

    -Richard Rout

    4 de diciembre de 2012 a las 6:57

  • mi navegador falla..

    – Señor Verleg

    19 de enero de 2016 a las 15:21

El estándar ECMAScript ECMA-262 (6ª edición, junio de 2015) dice

6.1.4 El tipo de cadena

El tipo String es el conjunto de todas las secuencias ordenadas de cero o más valores enteros sin signo de 16 bits (“elementos”) hasta una longitud máxima de 253-1 elementos.

Así que no planee usar más de 9,007,199,254,740,991 o alrededor de 9 cuatrillones de caracteres. Por supuesto, debe estar preparado para los sistemas que no pueden asignar fragmentos de memoria de 18 PB, ya que esto no es necesario para cumplir con las implementaciones de ECMAScript.

avatar de usuario
Jack G.

Creo que la pregunta es sobre el límite práctico, no el límite de especificaciones. Y, no, no siempre es la cantidad de RAM que tienes. Tengo una PC x86_64 de 24 GB con Linux Mint con x86_64 Firefox y x86_64 Chrome, y los límites con los que me encontré fueron:

  • Límite de 1.073.741.822 en Firefox 84
  • Límite de 536.870.888 en Chrome 87

Más alto y Firefox lanza un Uncaught RangeError: repeat count must be less than infinity and not overflow maximum string sizemientras que Chrome lanza Uncaught RangeError: Invalid string length. Use el siguiente fragmento para ejecutar una búsqueda binaria de la longitud máxima de la cadena en su navegador:

for (var startPow2 = 1; startPow2 < 9007199254740992; startPow2 *= 2)
    try {" ".repeat(startPow2);} catch(e) {
        break;
    }

var floor = Math.floor, mask = floor(startPow2 / 2);
while (startPow2 = floor(startPow2 / 2))
    try {
        " ".repeat(mask + startPow2);
        mask += startPow2; // the previous statement succeeded
    } catch(e) {}

console.log("The max string length for this browser is " + mask);

  • Creo que esta es una respuesta fantástica y creo que es un crimen que mi respuesta (por sólida que sea) tenga 25 veces más votos. ¡Votad por esto, gente!

    – Charles

    12 de julio de 2021 a las 20:05

No hay límite teórico para JS o PHP en el tamaño de sus cadenas.

Creo que hay algunas situaciones posibles.

En primer lugar, compruebe que no está enviando su cadena a través de HTTP GET. Hay un tamaño máximo para GET y creo que depende de su servidor web.

En segundo lugar, si usa POST, verifique post_max_size en php.ini y vea si es más pequeño que el tamaño de cadena que le está enviando, así como su archivo .htaccess para ver si php_value post_max_size no es demasiado pequeño.

En tercer lugar, verifique que en php.ini su memory_limit no restrinja el tamaño de la memoria que puede usar su script.

espero que esto ayude.

  • Gracias por su respuesta. Escribí el javascript en la misma página de php y estoy asignando la variable de php a una variable de javascript en la misma página. Si hago eco de la variable, puedo ver el resultado, pero una vez asignado a js, no se ejecuta nada debajo de eso.

    – Rohith

    4 de diciembre de 2012 a las 23:12

  • solo un tiro, pero ¿regeneraste comillas simples o comillas dobles que pueden causar que tu js se rompa? ¿Escapaste de ellos antes de pasar a js? ¿Hay algún error en la consola de javascript?

    – Aarón Lee

    5 de diciembre de 2012 a las 8:03


  • No hay ningún error en la consola de javascript. Tampoco se regeneran comillas simples y dobles.

    – Rohith

    6 de diciembre de 2012 a las 0:35

  • Incluso intenté asignar el valor de php directamente a js, ya que hice eco del resultado de php y lo copié en el script en lugar de pasarlo dinámicamente. Todavía no funcionó. Es extraño que no muestre ningún error.

    – Rohith

    6 de diciembre de 2012 a las 1:57

  • Lo siento, se supone que no debo hacerlo según las normas de mi empresa. De todos modos puedo darte una mejor idea. Estoy obteniendo datos de la base de datos mysql y almacenándolos como una cadena. Se concatena y se vuelve muy grande dependiendo de la cantidad de datos obtenidos. Esta cadena se pasa a la variable javascript para generar un gráfico usando jqplot. Todo funciona bien a menos que la cadena tenga alrededor de 100 mil caracteres. Cadena de longitud de casi 50.000 funciona bien. Pensé que la función jqplot se rompería, pero no se ejecuta nada debajo de la línea donde se pasa la variable.

    – Rohith

    6 de diciembre de 2012 a las 3:34

¿Ha sido útil esta solución?