# 避免不必要的更新检查

> 原文： [https://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/avoidingUnnecessaryUpdateChecks.html](https://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/avoidingUnnecessaryUpdateChecks.html)

富 Internet 应用程序（RIA）在本地缓存以缩短启动时间。但是，在启动 RIA 之前，启动软件会检查以确保 RIA 的 Java 网络启动协议（JNLP）文件中引用的每个 JAR 文件都是最新的。换句话说，启动软件确保您运行的是最新版本的 RIA，而不是较旧的缓存副本。这些更新检查可能需要几百毫秒，具体取决于 JAR 文件的数量和网络速度。使用本主题中描述的技术可以避免不必要的更新检查并增强 RIA 的启动时间。

* * *

**Note:** 

这里使用术语“启动软件”来统称 Java 插件软件和 Java Web Start 软件。 Java Plug-in 软件在 Java Web Start 软件启动 Java Web Start 应用程序时启动 applet。

* * *

## 利用版本下载协议

您可以利用 _ 版本下载协议 _ 来消除不必要的版本检查。请参阅以下步骤以启用此协议。

1.  重命名 JAR 文件以包含具有以下命名约定的版本号后缀：

    ```
     &lt; JAR 文件名&gt;  __V &lt;版本号&gt;  .jar 
    ```

    例如，将`DynamicTreeDemo.jar`重命名为`DynamicTreeDemo__V1.0.jar`。
2.  In the JNLP file, specify a version for every JAR file, and set the `jnlp.versionEnabled` property to `true`.

    ```
    &lt;resources&gt;
        &lt;!-- Application Resources --&gt;
        &lt;j2se version="1.6+"
            href="http://java.sun.com/products/autodl/j2se"
                max-heap-size="128m" /&gt;
        &lt;jar href="DynamicTreeDemo.jar"
            main="true" version="1.0"/&gt;   
        &lt;jar href="SomeOther.jar" version="2.0"/&gt;
        &lt;property name="jnlp.versionEnabled"
            value="true"/&gt;
        &lt;!-- ... --&gt;
    &lt;/resources&gt;

    ```

    启用`jnlp.versionEnabled`属性后，启动软件仅执行 _ 一次 _ 更新检查，以确保 JNLP 文件是最新的。该软件将 JNLP 文件中指定的版本号与相应的 JAR 文件版本（根据步骤 1 中提到的命名约定）进行比较，并仅更新过时的 JAR 文件。此方法很有效，因为只有 JNLP 文件的更新检查通过网络进行。所有其他版本检查都在本地进行

    如果找不到具有正确版本号的文件，则启动软件会尝试加载默认 JAR 文件（例如，`DynamicTreeDemo.jar`）。

## 在后台执行更新检查

如果用户立即运行最新版本的 RIA 并不重要，则可以指定所有更新检查应在后台进行。在这种情况下，启动软件会启动本地缓存的副本以供立即使用，并在后台下载更新版本的 RIA。更新版本的 RIA 将在用户下次尝试使用您的 RIA 时启动。要启用后台更新检查，请将以下行添加到 JNLP 文件中：

```
<update check='background'/>

```

以下代码段显示了启用了后台更新检查的示例 JNLP 文件：

```
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>Applet Takes Params</title>
        <vendor>Dynamic Team</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+" href=
            "http://java.sun.com/products/autodl/j2se"/>
        <jar href="applet_AppletWithParameters.jar"
            main="true" />
    </resources>
    <applet-desc 
         name="Applet Takes Params"
         main-class="AppletTakesParams"
         width="800"
         height="50">
             <param name="paramStr" value="someString"/>
             <param name="paramInt" value="22"/>
     </applet-desc>
     <update check="background"/>
</jnlp>

```