Skip to content

Torna carregamento de imagens "lazy" por padrão (conversor customizado asciidoctor) - #28

Closed
arturo32 wants to merge 1 commit into
pythonfluente:mainfrom
arturo32:addLazyLoadingImagesConverter
Closed

arturo32 wants to merge 1 commit into
pythonfluente:mainfrom
arturo32:addLazyLoadingImagesConverter

Conversation

@arturo32

@arturo32 arturo32 commented Apr 22, 2023 •

Copy link
Copy Markdown
Contributor

Relacionado a issue #1:
Sobrescreve os conversores convert_image e convert_inline_image do asciidoctor com base nesse PR do asciidoctor e nas recomendações de um dos desenvolvedores do asciidoctor nessa discussão .

O PR citado adiciona praticamente 5 linhas nos conversores de imagens do asciidoctor, adicionando o atributo loading aos macros image e inline-image do asciidoctor e o atributo global image-loading. Este último é o usado no arquivo livro.adoc.

Copiei o código do PR e coloquei dentro de um conversor customizado do asciidoctor em ruby.

O conversor customizado é adicionado no comando de geração do arquivo HTML em build.sh.

Para que o lazy loading funcione é necessário que as imagens tenham suas origens definidas por links/caminhos. Logo o atributo global :data:uri: teve que ser removido do arquivo livro.adoc.

Vale notar que eu não tive experiência com a linguagem ruby anteriormente. Aprendi o básico da linguagem no rápido tutorial oficial da linguagem e em outras fontes.

Isso é feito sobrescrevendo os conversores de imagens do asciidoctor e adicionando
o atributo "loading" que, quando não informado, possui o valor "lazy" por padrão.
Comment on lines +9 to +14
# https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/loading
loading_attr_value = (node.attr 'loading') || (node.document.attr 'image-loading')
if loading_attr_value && loading_attr_value != 'eager' && loading_attr_value != 'lazy'
logger.warn 'valid values for attribute "loading" are "eager" and "lazy". found: ' + loading_attr_value
end
loading_attr = loading_attr_value ? %( loading="#{loading_attr_value}") : ''

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pedaço de código que é diferente do código fonte da função convert_image do asciidoctor.

Comment on lines +71 to +76
# https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/loading
loading_attr_value = (node.attr 'loading') || (node.document.attr 'image-loading')
if loading_attr_value && loading_attr_value != 'eager' && loading_attr_value != 'lazy'
logger.warn 'valid values for attribute "loading" are "eager" and "lazy". found: ' + loading_attr_value
end
attrs = %(#{attrs} loading="#{loading_attr_value}") if loading_attr_value

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pedaço de código que é diferente do código fonte da função convert_inline_image do asciidoctor.

@ramalho

ramalho commented May 19, 2025

Copy link
Copy Markdown
Contributor

Caro @arturo32: muito grato por essas contribuições. Depois que pedi ajuda com essa questão de carregamento "lazy" das imagens, decidi que ter as imagens embutidas no HTML é a melhor solução, para que as pessoas possam baixar somente um arquivo .html com todo o conteúdo do livro. Novamente, agradeço pela sua contribuição!

@ramalho ramalho closed this May 19, 2025
@arturo32

Copy link
Copy Markdown
Contributor Author

@ramalho Só deixando claro que essa solução, assim como as outras duas relacionadas a issue #1, não alteram o link de qualquer imagem, ou a presença de qualquer tag no documento. A única alteração que os 3 PRs fazem, em fluxos diferentes, é adicionar o atributo loading="lazy" nas tags de imagens (<img>). O navegador fica com o trabalho de fazer as requisições da imagens a medida que elas entram no campo de visão (viewport) do usuário por meio do scroll.

O atributo loading também não altera o comportamento ao salvar uma página. Por exemplo, se você salvar https://unsplash.com/pt-br/s/fotografias/teste sem navegar até o fim da página, as imagens, que possuem o atributo loading="lazy", vão estar presentes no arquivo .html final, embutidas em formato "blob" assim como tags de imagens sem o atributo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants