Entrega de imagens
Como Image Processor escolhe o formato entregue, mantém uma entrada de cache por transformação e onde ele para, sem armazenamento e sem uploads.
Uma imagem construída sob demanda ainda precisa chegar ao browser em um formato que ele lê, e ser construída uma vez, e não para cada leitor. Em uma aplicação, Image Processor constrói uma imagem derivada a partir da imagem de origem que está no servidor de origem. Como uma requisição se torna uma imagem derivada, com o diagrama dessa cadeia, está em Como Applications funciona.
As seções cobrem como o formato entregue é escolhido, como o cache diferencia uma imagem derivada de outra e onde Image Processor para.
Negociação de formato
O formato entregue nem sempre é o formato da imagem de origem. Dois mecanismos o alteram, e eles se comportam de forma diferente.
O primeiro é explícito. Um filtro filters:format() na string ims pede um formato de saída nomeado. Converter para WEBP também exige que a requisição carregue Accept: image/webp, e o behavior Add Request Header adiciona esse header quando o browser não o envia.
O segundo é automático e não precisa de nenhum parâmetro ims. Image Processor detecta se o browser aceita WEBP e converte a imagem quando aceita. Uma imagem BMP é convertida para JPEG ou WEBP dependendo do mesmo suporte. Por exemplo, uma requisição cujo header Accept lista image/webp, sem query string, pode receber image/webp para uma imagem de origem armazenada como PNG.
Os bytes na origem e os bytes transmitidos são, portanto, duas medidas diferentes, e a resposta informa isso. Uma resposta processada carrega x-ims: Enabled, e x-original-image-size carrega o tamanho da imagem de origem antes da transformação. Um leitor que nunca escreve um filtro ainda pode receber um formato diferente do que está na origem. Leia esses headers antes de comparar uma resposta com o arquivo na origem. Para os headers, consulte Configurações do Image Processor.
Uma entrada de cache por transformação
Uma imagem derivada só vale a pena ser construída uma vez. A prática para o cache setting que serve imagens é listar ims no seu controle de query string: Cache vary by Query String, com o Behavior Allowlist e ims em Fields. Cada string ims distinta tem então uma cache key própria. Esse controle pertence à seção Application Accelerator de um cache setting, cache_vary_by_querystring em modules.application_accelerator. Variar o cache por ims exige, portanto, Application Accelerator, enquanto processar uma imagem não exige.
Um cache setting criado com essa allowlist é lido de volta com este objeto modules:
Uma imagem derivada convertida para outro formato também carrega o formato depois do separador @@, como em httpsstatic.example.com/static/images/image_1.jpg?ims=880x@@webp.
Essa key tem um custo, e o custo é a cardinalidade. Cada string ims distinta é um objeto armazenado distinto. Uma página que pede larguras arbitrárias armazena um objeto por largura, enquanto uma página que pede quatro larguras fixas armazena quatro. Escolher um conjunto pequeno de tamanhos é, portanto, tanto uma decisão de cache quanto uma decisão de layout.
Também é uma decisão de cobrança. Uma imagem servida a partir do cache sem processamento não conta para o medidor mensal de Images, então uma imagem derivada bem armazenada em cache custa uma imagem processada, não importa quantos leitores a recebam. Para o que cada plano inclui, consulte Limites de Applications.
Onde Image Processor para
Image Processor lê uma imagem de origem e retorna uma derivada. Ele não armazena imagens e não aceita uploads: a imagem de origem permanece onde já está, e nenhuma imagem derivada se torna um ativo da conta. Um workflow que precisa manter um arquivo transformado precisa salvar a resposta por conta própria.
O que a string ims pode expressar e o tamanho da imagem limitam a transformação. As operações que a string aceita estão em Parâmetros de URL do Image Processor, e o tamanho e as dimensões máximas estão em Limites de Applications.
Um limite merece ser nomeado, porque duas superfícies compartilham um nome. WASM Image Processor é uma biblioteca WebAssembly que processa imagens dentro de uma função em Functions. É uma superfície diferente, com uma interface diferente, e nada nesta página a configura.