前几天,跟踪产品的运行状况时,发现每次登录时,都要下载几十KB的数据,查了一下,发现是DWR的engine.js。
查了一下DWR的相关文档,其官方文档提供了对engine.js进行缓存的方法,步骤如下:
1、解压dwr.jar中的org/directwebremoting/engine.js到目录中;
2、将其中226行到242行之外的所有内容剪切到新的文件:sengine.js;
3、保存engine.js,并替换dwr.jar包中的org/directwebremoting/engine.js文件;
4、将sengine.js同其他的js一起压缩使用。
在测试系统上升级后,发现更新的内容是变小了,不到1KB,但是发现第二次下载是内容不全,而生产系统上每次下载的内容都是全的,很奇怪。
后来使用HttpWatch对http Header进行分析,发现生产系统上对此文件的修改时间标示不同。通过研究DWR的源码,发现其对engine.js的修改标示使用了类的加载时间,也就是说,http header中的修改时间是由类的加载时间决定,生产系统中采用了集群部署,共有三四台应用层,由于每台应用层启动的时间有差异,导致每台应用层上engine.js的修改时间不相同,最终导致同一用户每次登录时调度到不同的服务器上时都必须重新下载此文件。
最终还是按照官方的文档进行了升级,但engine.js还是每次会重新下载,只不过内容变小了