Publicado em 14 de agosto de 2020

JxBrowser 7.10

Nesta pequena atualização, melhoramos o desempenho de renderização no modo de renderização fora de tela para Swing, JavaFX e SWT, restauramos a funcionalidade que permite desativar o tráfego interno do Chromium, que foi temporariamente abandonado na versão 7.0, e melhoramos a estabilidade da biblioteca.

Desempenho de renderização

O modo de renderização fora de tela foi reimplementado para melhorar o seu desempenho de renderização em todas as plataformas suportadas e kits de ferramentas de IU.

Os resultados dos testes de desempenho de renderização nas diferentes plataformas num vídeo HTML5 em Frame por segundo ( FPS) são os seguintes:

Windows

  • Intel Core i7 7700k 4,2 GHz com GPU GTX 1070
  • Dimensão do vídeo: 1920x1080

Swing

Windows Swing FPS

JavaFX

Windows JavaFX FPS

SWT

Windows SWT FPS

macOS

  • MacBook Pro 15”, Intel Core i7 2,9GHz com GPU Radeon Pro 650 4GB
  • Dimensão do vídeo: 2880x1800

Swing

macOS Swing FPS

JavaFX

macOS JavaFX FPS

SWT

macOS SWT FPS

Linux

  • AMD FX-8300 3,3 GHz com GPU Radeon RX 480
  • Dimensão do vídeo: 1920x1080

Swing

Linux Swing FPS

JavaFX

Linux JavaFX FPS

SWT

Linux SWT FPS

Para o kit de ferramentas SWT UI no Linux, ainda não realizamos qualquer otimização no modo de renderização fora de tela.

Tráfego do chromium

As funcionalidades do Chromium, como o Google Cloud Messaging, o Translate Ranker, o Extensions Updater, o Safe Browsing, o SpellChecker, o Widevine, etc., fazem requests aos serviços Web externos da Google, como https://ssl.gstatic.com, https://clients4.google.com, etc.

Se os serviços Web não estiverem acessíveis ou se você não desejar este tráfego adicional, você pode utilizar a seguinte API:

Engine engine = Engine.newInstance(
        EngineOptions.newBuilder(renderingMode)
                .disableChromiumTraffic()
                .build());

Esta opção permite desativar apenas as funcionalidades do Chromium que não estão acessíveis através da API do JxBrowser. Por exemplo, as funcionalidades SpellChecker e Widevine podem ser acessadas através da API JxBrowser, portanto, a opção não desativa o tráfego causado por estas funcionalidades.

Elemento DOM focado

A API DOM foi expandida com o método Document.focusedElement() que permite obter o elemento HTML atualmente focado na página web:

document.focusedElement().ifPresent(element -> {
    ...
});

Melhorias

  • A funcionalidade de verificação ortográfica foi restaurada.
  • A implementação do com.teamdev.jxbrowser.view.swt.callback.DefaultStartDownloadCallback agora avisa quando o arquivo alvo existe e será substituído.
  • O método DevTools.remoteDebuggingUrl() agora retorna URL que pode ser usado sem conexão com a Internet.

Ordem das mensagens IPC

Nas versões anteriores a ordem das mensagens IPC pode ser alterada quando é invocada uma chamada de retorno síncrona. Por exemplo, o envio de eventos de teclado através do método Browser.dispatch() pode levar a um problema com as letras misturadas aleatoriamente num campo de texto numa página Web.

Explicação: Quando uma synchronous callback é invocada, iniciamos um ciclo aninhado que processa as mensagens recebidas. O problema é que existe uma janela entre o momento em que entramos no método que invoca a chamada de retorno e o momento em que iniciamos efetivamente o ciclo aninhado. Como resultado, podemos ter uma situação quando algumas das mensagens recebidas são colocadas na fila de threads do Chromium e essas mensagens serão processadas após o retorno do método.Ao mesmo tempo, as mensagens que chegam quando o ciclo aninhado é iniciado serão processadas antes do método retornar, o que altera a ordem pela qual as mensagens foram enviadas.

Nesta versão, melhoramos a lógica interna do IPC para nos livrarmos de tais situações. Esta melhoria introduz um requisito importante sobre a forma como se deve processar o código dentro de um retorno de chamada síncrono. Se você executar alguma lógica que faz chamadas síncronas para a biblioteca em uma thread separada dentro de um retorno de chamada síncrona e bloqueia o retorno de chamada aguardando até que a lógica tenha sido executada, você pode obter um deadlock:

// Registrar uma chamada de retorno síncrona.
browser.set(SomeSyncCallback.class, params -> {
    // Invocar alguma lógica numa thread separada e bloquear a execução da thread atual
    // até a lógica ter sido executada.
    invokeInSeparateThreadAndWait(() -> {
        // Invocar um método síncrono.
        browser.someSyncMethod(); // <-- Deadlock: este método nunca irá retornar.
    });
    return Response.proceed();
});

Para se livrar do impasse, utilize a seguinte abordagem:

// Registrar uma chamada de retorno síncrona.
browser.set(SomeSyncCallback.class, params -> {
    // Invocar um método síncrono.
    browser.someSyncMethod();
    return Response.proceed();
});

Problemas corrigidos

  • Dimensionamento inesperado de conteúdo ao redimensionar o BrowserView no modo de renderização acelerada por hardware no macOS.
  • A NavigationException: Falha ao carregar o recurso: ABORTED erro em chamadas subsequentes Navigation.loadUrlAndWait().
  • O mouse fica preso na panorâmica ao sair e voltar ao BrowserView no modo de renderização acelerada por hardware no Windows.
  • O JavaFX BrowserView não é mostrado depois de ocultar o Stage no modo de renderização fora de tela.
  • Crash ou congelamento ao fechar o Engine.
  • Falha ao exibir o BrowserView no modo de renderização acelerada por hardware no Windows.
  • A biblioteca fica frequentemente presa em IpcLibrary.sendData().
  • As classes do kit de ferramentas Swing, JavaFX e SWT UI estão localizadas em jxbrowser.jar quando deveriam estar em JARs separados.
  • A funcionalidade de restauração do foco não funcionando corretamente no SWT BrowserView.
  • O método Node.xPath() gerando índices Node incorretos.
  • A inicialização do Engine travou ao chamar o comando ldd para verificar as bibliotecas de sistema ausentes no Linux.
  • Deadlock no acesso a um armazenamento de cookies não vazio.
  • A página de boas-vindas do Chromium no Windows Server 2012.
  • A ordem incorreta ao enviar eventos de teclado utilizando o método Browser.dispatch().

Baixe o JxBrowser 7.10

Por favor, compartilhe seu e-mail conosco, e nós lhe enviaremos instruções para download.

Enviando...
Por favor, verifique sua caixa de entrada.

Não foi possível enviar o e-mail. Por favor, use o link direto para baixar o JxBrowser.

Se você é um cliente registrado, não precisa fazer nada para usar esta atualização.

Se você deseja avaliar o produto, precisa de uma licença de avaliação.

Obtenha Teste Gratuito de 30 dias
Go Top