2

最近我收到了一个带有网页的包裹。我看到里面(除了普通的 html 和 js 文件)有一些 JS 文件。它看起来像这样:

4A3674A3247236B3C8294D2378462378.cache.js
FE728493278423748230C48234782347.cache.js
compilation-mappings.txt

在 .js 文件中,我看到了被混淆或缩小的 Javascript。里面compilation-mappings.txtcache.js引用。这些文件是由某种 WEB IDE 生成的吗?不幸的是,我没有机会了解这个 wep 页面是如何开发的。

4

2 回答 2

6

这是一个用 Java 编码并使用GWT 项目工具编译为 JS 的 Web 项目。

GWT 编译器完成了在手动编写 JS 时必须手动完成的许多工作,以及在普通 JS 项目中几乎不可能完成的其他一些任务:混淆、压缩、删除死亡代码、每个浏览器的不同优化、重命名脚本,代码拆分等。

您的应用程序中的内容是此编译的结果:

  1. 首先,您应该有一个唯一的index.html文件,因为 GWT 用于生成 RIA(富 Internet 应用程序),也称为 SPI(单页接口)。

  2. 唯一的 html 文件应该引用一个名为application_name.nocache.js. 注意.nocache。部分,这意味着 Web 服务器应该设置适当的标头,这样它就不会被代理或浏览器缓存。这个文件非常小,因为它只有代码来识别浏览器并请求下一个 javascript 文件。

  3. 这第一个脚本知道哪些NNNN.cache.js必须加载每个浏览器。NNNN 前缀是编译应用时生成的唯一编号,每个浏览器都不同。GWT 支持 6 种不同的浏览器平台,所以通常你会有 6 个这样的文件。请注意 .cache。名称的一部分,这意味着该文件可以被永久缓存。它们是大文件,因为包含应用程序的所有代码。

因此,您的应用程序的正常工作流程是浏览器请求index.html可以缓存的文件。该文件具有脚本标记,用于获取applicaton.nocache.js应始终向服务器请求的小型启动脚本。它只是为您的浏览器加载最新排列的代码,这些排列NNNN.cache.js将永远下载并缓存在您的浏览器中。

你在这里有更多关于这些东西的信息

这个命名约定的目标是,当用户下次访问应用程序时,它将缓存index.htmlNNNN.cache.js文件,只询问application.nocache.js非常小的文件。它保证用户始终加载应用程序的最新版本,浏览器将只下载一次应用程序的代码,代理或缓存设备在发布新版本时不会破坏您的应用程序等。

话虽如此,由于大的混淆,几乎不可能弄清楚代码检查 javascript 的内容。您需要原始 .java 文件来理解代码或进行修改。

于 2013-09-14T08:49:35.693 回答
2

我不能肯定地说,但通常会在 javascript 文件的名称上附加一个字符串,以便在部署新版本时客户端不会使用旧版本的缓存版本。

(即,如果你有 myScript.js 并更改它,浏览器会说“我已经有 myScript.js,我不需要它。如果它从 myScript1234.js 变为 myScript1235.js,浏览器会去获取它)

正在使用的框架可能会生成这些文件作为其处理客户端缓存问题的方案的一部分。虽然不知道他们使用什么框架的更多细节,但无法确定。

于 2013-09-13T20:30:04.030 回答