ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
>要点:重量级是CPU加速的,速度更快,内存更少,设置方式:BrowserType.LIGHTWEIGHT JxBrowser支持两种渲染模式:轻量级和重量级。 默认情况下,启用**重量级渲染模式**,因此当您使用以下代码创建Browser实例时,它会创建一个配置为使用重量级渲染模式的新Browser实例: ``` Browser browser = new Browser(); ``` 要使用指定的呈现模式创建新的Browser实例,请使用以下方法: ``` // Creates Browser instance with enabled lightweight rendering mode Browser browser = new Browser(BrowserType.LIGHTWEIGHT); // Creates Browser instance with enabled heavyweight rendering mode Browser browser = new Browser(BrowserType.HEAVYWEIGHT); ``` 轻量级和重量级渲染模式之间的差异以及有关应在应用程序中使用哪种渲染模式的建议,您可以在下面找到: ## 轻量级(屏幕外) 在轻量级渲染模式下,Chromium引擎使用CPU在屏幕外渲染网页。表示加载的网页的不同部分的图像存储在共享存储器中。JxBrowser从共享内存中读取图像,并使用标准Java Swing / JavaFX 2D Graphics API显示它们。 要与显示的网页进行交互,我们使用Java Events API监听鼠标和键盘事件,将它们转换为适当的Chromium鼠标/键盘事件,并将它们发送到Chromium引擎。通过这种方法,我们可以获得纯粹的轻量级解 如果您需要一个真正的轻量级Swing / JavaFX组件,允许在Java应用程序中显示现代HTML5 / JavaScript / CSS网页,那么这种渲染模式非常有用。您可以使这个轻量级组件半透明,在其上显示其他组件,将其放入JLayeredPane或JInternalFrame,获取有关鼠标和键盘事件的通知等。 ### 无头的环境 如果您需要在无头Linux环境中使用JxBrowser,我们建议您使用轻量级渲染模式。 主要原因有两个: 1. 通过xvfb在无头环境中运行的重量级(GPU加速)渲染模式是无用的,因为xvfb中的GPU加速被禁用。 1. 在这种环境中经常使用JxBrowser功能,该功能允许获取加载的网页的屏幕截图。该功能仅在轻量级渲染模式下可用。 ### 限制 * 加载的网页上的大量动画会导致高CPU和内存使用率。这是因为Chromium引擎需要渲染大量图像并将其保存到已分配的共享内存中。 * 在轻量级模式下,只能显示支持无窗口模式的Chromium插件。由于渲染是在屏幕外完成的,因此Flash播放器或其他插件也必须支持无窗口(离屏)渲染。如果插件不支持屏幕外渲染,则不会以轻量级模式显示。 * 鼠标/键盘/触摸事件是Java端的进程并转发到Chromium引擎。目前Java并不提供全功能的触摸事件支持,因此在轻量级渲染模式下,JxBrowser不支持某些触摸手势。拖放功能也有同样的限制。在轻量级渲染模式下,使用Java API处理拖放操作,因此它与Google Chro中的操作完全不同。拖放苏 pports只有预定义的味道。 ## 重量级(GPU加速) 在重量级渲染模式(JxBrowser中的默认模式)中,我们将一个本机窗口嵌入到Java应用程序窗口中,并配置Chromium引擎以使用GPU将内容渲染到此本机窗口中。 用户与显示的网页的交互由Chromium引擎完成。Chromium使用特定于平台的本机功能接收和处理鼠标/键盘/触摸事件。与轻量级渲染模式相比,它提供了对鼠标/键盘/触摸事件的更好支持,其中JxBrowser必须处理Java事件并将它们转发到Chromium引擎。 与轻量级渲染模式相比,重量级(GPU加速)渲染模式的工作速度要快得多。渲染效果与Google Chrome中的渲染效果相同。您可以使用60fps显示全屏视频或HTML5动画。与轻量级渲染模式相比,CPU和内存使用量要小得多,因为网页的内容是通过GPU渲染的。 因此,如果渲染性能对您的应用程序非常重要,那么我们建议您使用默认的重量级渲染模式。 ### 限制 #### 轻量级和重量级混合 Java Swing / JavaFX工具包允许基于轻量级组件构建UI。当我们将原生窗口嵌入到Java框架中时,它会导致混合重量级和轻量级组件的众所周知的问题。不建议您将重量级的BrowserView组件放入JLayeredPane或JInternalFrame,或者将其与轻量级组件混合使用(例如,尝试在重量级BrowserView上显示轻量级组件)。 #### JavaFX应用程序中的分层窗口 使用StageStyle.TRANSPARENT 样式配置阶段会将WS_EX_LAYERED窗口样式标志添加到JavaFX窗口。该标志用于创建分层窗口。分层窗口代表一个离屏窗口,可以在屏幕外绘制内容。如果我们将另一个窗口(当在JxBrowser中使用重量级渲染模式时发生)嵌入到分层窗口中,则由于窗口类型冲突,其内容将不会被绘制。 JavaFX中的浏览器处理 在JavaFX中的错误线程中销毁Browser实例可能会导致本机端出现死锁。必须根据操作系统将浏览器实例放置在不同的线程上。在Linux和macOS中,必须在UI线程上调用Browser.dispose()方法,而在Windows 浏览器上必须在非UI线程上进行处理。例如: mac,linux ``` Platform.runLater(new Runnable() { @Override public void run() { browser.dispose(); } }); ``` windows ``` new Thread(new Runnable() { @Override public void run() { browser.dispose(); } }).start(); ```