spills ist español ejemplos ein data beacons beacon balizas php javascript image performance analytics

php - español - was ist ein web beacon



La forma más eficiente de mostrar un GIF 1x1(píxel de seguimiento, baliza web) (4)

Con Laravel:

$pixel = "/x47/x49/x46/x38/x39/x61/x1/x0/x1/x0/x80/x0/x0/xff/xff/xff/x0/x0/x0/x21/xf9/x4/x1/x0/x0/x0/x0/x2c/x0/x0/x0/x0/x1/x0/x1/x0/x0/x2/x2/x44/x1/x0/x3b"; return response($pixel,200,[ ''Content-Type'' => ''image/gif'', ''Content-Length'' => strlen($pixel), ]);

Si alguien quiere eso por alguna razón.

Alternativamente, si no te gustan las cadenas hexadecimales largas (ish) en tu código:

base64_decode(''R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw'')

Estoy creando un servicio de análisis básico, basado en la teoría de cómo funciona Google Analytics, pero en lugar de solicitar una imagen real, dirijo la solicitud de imagen a un script que acepta los datos y luego genera una imagen. Dado que los navegadores solicitarán esta imagen en cada carga, cada milisegundo cuenta.

Estoy buscando la forma más eficiente para que un archivo genere un archivo gif desde un script PHP. Hasta ahora, he establecido 3 métodos principales.

¿Hay alguna forma más eficiente de generar un archivo GIF 1x1 desde un script PHP? Si no, ¿cuál de estos es el más eficiente y escalable?

Tres métodos identificados

Bibliotecas de construcción de imágenes PHP

$im = imagecreatetruecolor(1, 1); imagefilledrectangle($im, 0, 0, 0, 0, 0xFb6b6F); header(''Content-Type: image/gif''); imagegif($im); imagedestroy($im);

file_get_contents la imagen fuera del servidor y la imprime

$im = file_get_contents(''raw.gif''); header(''Content-Type: image/gif''); echo $im;

base64_decode la imagen

header(''Content-Type: image/gif''); echo base64_decode("R0lGODdhAQABAIAAAPxqbAAAACwAAAAAAQABAAACAkQBADs=");

(Mi intuición fue que la base64 sería más rápida, pero no tengo idea de cuán intensiva es la función de recursos; y que file_get_contents probablemente se escalaría menos, ya que agrega otra acción del sistema de archivos).

Para referencia, el GIF que estoy usando está aquí: http://i.stack.imgur.com/LQ1CR.gif

EDITAR

Entonces, la razón por la que sirvo esta imagen es que mi biblioteca de análisis construye una cadena de consulta y la adjunta a esta solicitud de imagen. En lugar de analizar los registros, estoy enrutando la solicitud a un script PHP que procesa los datos y responde con una imagen, para que el navegador del usuario final no se bloquee o arroje un error. Mi pregunta es, ¿cómo puedo servir mejor esa imagen dentro de los límites de un script?


En lugar de generar / generar una imagen de forma dinámica, ¿por qué no simplemente redirigir a una imagen estática?

<?php // process query param stuff header(''Location: pixel.gif''); exit(); ?>


tal vez

header(''Content-Type: image/gif''); //equivalent to readfile(''pixel.gif'') echo "/x47/x49/x46/x38/x37/x61/x1/x0/x1/x0/x80/x0/x0/xfc/x6a/x6c/x0/x0/x0/x2c/x0/x0/x0/x0/x1/x0/x1/x0/x0/x2/x2/x44/x1/x0/x3b";

Eso generará una cadena binaria idéntica al contenido del archivo binario de un gif transparente de 1x1. Afirmo que esto es eficiente por el hecho de que no hace ningún IO lento, como leer un archivo, ni llamo a ninguna función.

Si desea crear su propia versión de la cadena hexadecimal anterior, tal vez para poder cambiar el color, puede usar esto para generar el código php para la declaración de eco.

printf(''echo "%s";'', preg_replace_callback(''/./s'', function ($matches) { return ''/x'' . dechex(ord($matches[0])); }, file_get_contents(''https://upload.wikimedia.org/wikipedia/en/d/d0/Clear.gif'')));


header(''Content-Type: image/gif''); header("Content-Length: " . filesize("image.gif")); $f = fopen(''image.gif'', ''rb''); fpassthru($f); fclose($f);

Probablemente sería más rápido para la imagen del disco, pero (especialmente si está utilizando el almacenamiento en caché de bytecode) para una imagen pequeña conocida de antemano, la forma de la base64 será la más rápida, creo. El envío Content-Length puede ser una buena idea, ya que en la mayoría de los casos la imagen pequeña del navegador no esperará nada después de recibir los bytes, por lo que si bien el servidor tardará tanto tiempo, la experiencia de uso será mucho mejor.

Otra forma sería dejar que Apache / lighttpd / nginx sirva la imagen, registre el acceso y analícelo fuera de línea.