最近我收到了一个包含网页的软件包。我看到里面(在普通的html和js文件旁边)有一些JS文件。它看起来像这样:
4A3674A3247236B3C8294D2378462378.cache.js
FE728493278423748230C48234782347.cache.js
compilation-mappings.txt
在.js文件中我看到Javascript被混淆或缩小。在compilation-mappings.txt
内cache.js
被引用。这些文件是由某种WEB IDE生成的吗?不幸的是,我没有机会获得有关这个wep页面是如何开发的信息。
答案 0 :(得分:5)
这是一个用Java编码的Web项目,使用GWT project工具编译为JS。
GWT编译器完成了手工编写JS时需要手动执行的大量工作,以及在普通JS项目中几乎不可能执行的其他一些任务:混淆,压缩,死代码删除,每个浏览器的不同优化,重命名脚本,代码拆分等。
您的应用程序中包含的内容是此编译的结果:
首先,您应该拥有一个唯一的index.html
文件,因为GWT用于生成RIA(富Internet应用程序),也称为SPI(单页面界面)。
唯一的html文件应该引用名为application_name.nocache.js
的javascript文件。注意.nocache。部分,这意味着Web服务器应该设置适当的标头,因为它不是由代理或浏览器缓存的。这个文件非常小,因为它只是有代码来识别浏览器并要求下一个javascript文件。
第一个脚本知道哪个NNNN.cache.js
必须加载每个浏览器。 NNNN前缀是在编译应用程序时生成的唯一编号,并且每个浏览器都是不同的。 GWT支持6种不同的浏览器平台,所以通常你会有6个这样的文件。注意.cache。名称的一部分,意味着这些文件可以永久缓存。它们是大文件,因为它们包含您应用程序的所有代码。
因此,您的应用的正常工作流程是浏览器要求可以缓存的index.html
文件。此文件具有脚本标记,用于获取应始终向服务器请求的小型启动脚本applicaton.nocache.js
。它只包含用于加载浏览器NNNN.cache.js
的最新排列的代码,该浏览器将永久保存在您的浏览器中。
您有关于这些内容的更多信息here
此命名约定的目标是,下次用户转到应用时,它将在index.html
和NNNN.cache.js
个文件的缓存中,仅询问application.nocache.js
哪个真的很小。它保证用户始终加载最新版本的应用程序,浏览器只会在应用程序代码下载,代理或缓存设备在发布新版本时不会破坏您的应用程序等。
说,由于大的混淆,几乎不可能弄清楚代码检查javascript的东西是什么。您需要原始的.java文件来理解代码或进行修改。
答案 1 :(得分:2)
我不能肯定地说,但是通常会将一个字符串附加到javascript文件的名称,以便在部署新版本时,客户端将不会使用旧版本的缓存版本。
(即,如果你有myScript.js并更改它,浏览器会说“我已经有myScript.js,我不需要它。如果它从myScript1234.js变为myScript1235.js,浏览器将会去拿它)
有可能使用的框架生成这些文件作为其处理客户端缓存问题的方案的一部分。虽然不知道他们使用什么框架的更多细节,但没有办法确定。