起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22311|回复: 15

X5 缓存机制和资源版本号维护

  [复制链接]

31

主题

1856

帖子

3070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3070
发表于 2013-1-17 10:13:41 | 显示全部楼层 |阅读模式
页面url概述
X5系统中,一个页面一般对应的是.w文件,所以在功能菜单配置中,切换到源代码方式,就会看到每个项里面有一个url属性,它对应的就是.w。例如:“任务中心”url是/SA/task/taskCenter/mainActivity.w,假设部署时候UIServer的应用名为x5(X5发布时候这个是默认名字,可以在tomcat的server.xml查看),本地服务端口为8080,那访问“任务中心”应该是http://127.0.0.1:8080/x5/SA/task/taskCenter/mainActivity.w, 当然,默认这样访问是访问不了了,平台还会做授权的认证,正常登录x5并在打开“任务中心”功能,通过右键属性查看功能的url是http://127.0.0.1:8080/x5/SA/task/workTask/mainActivity.w?log=1&bsessionid=DE2BC579A0A8A44F5B64897B5BD7D936&language=zh_CN&process=/SA/task/workTask/workTaskProcess&activity=mainActivity,?后面的是门户统一管理的,用于授权相关的认证。

.cache机制
虽然url中显示的是xxx.w,但请求服务器时,服务器并不是直接访问.w,而访问的是.w同级对应的.cache。.cache下文件:
*.view_zh_cn:    是最终运行的文件,对应于最终页面上的那个html(当然会动态加入部分信息),zh_cn是资源语言,如果有不同语言,这里后缀会不同,X5默认是中文,为方便,后续.view_zh_cn来表示该缓存文件
*.js:                    .w对应的js,与view_zh_cn配套使用,用于界面初始化
*.xforms_zh_cn:是中间文件,用 c/c++对应,.w就是源代码,view_zh_cn是 exe,而xforms_zh_cn就是obj文件
*.report:            如果使用了报表,cache下面还会有 report名字的文件,它是报表定义文件

.release机制
5.2.5 版本开始,每个.w对应一个.release,.release是一种中间格式,它的推出主要是为了应用厂商保护自己的源代码。当把一个应用发布给客户的时候,可以仅提供.release,而不用提供.w。.w和.release的使用原则是,如果有.w,则.w有效,否则使用.release。
    注意:.release等价于.w,和下面介绍的资源版本号无关

浏览器缓存原理
浏览器在访问网页时,是基于url进行缓存(缓存是指静态资源,例如js、css、gif等,所以.w那个url访问是每次都请求的),如果url相同,那下次访问时直接会从本地缓存中读取。对于js、css和gif等静态资源,正常使用不可避免需要有替换的情况,但如果仅仅替换,那浏览器访问是不会自动更新文件,除非自己手工清除浏览器缓存或者把浏览器设置为不缓存模式。为了解决资源更新问题,X5引入了资源版本机制。

资源版本机制
.w在生成的.view_zh_cn,会有对其它资源的引用,例如js、css等。例如“任务中心”的.w中引用了/UI/SA/task/js/common.js这个js,他是按照相对路径来写的,最终访问将是http://127.0.0.1:8080/x5/UI/SA/task/js/common.js,这个可以直接用浏览器访问,它会提示下载,但如果就直接写为相对路径,假设common.js做了修改,而本地又缓存过这个js文件,那文件将得不到更新,可能会造成页面错误。X5通过把url增加一个资源版本号来解决静态资源变更问题,上面那个url在生成.view_zh_cn后,会把url改为/x5/$v2172/UI/SA/task/js/common.js,在UI前面多了一个$v2172,这个就是资源版本号,2172这个是X5的build号,每次X5平台在内部编译时会递增,这个号在 UIServer\WEB-INF\justep.xml中有记录,这样每次发布的版本这个标识是不同的,也就是访问的url也会不同,同样,用http://127.0.0.1:8080/x5/$v2172/UI/SA/task/js/common.js在浏览器中输入地址,浏览器也会提示下载,$v2172这个被UIServer做了处理,他等价于之前的http://127.0.0.1:8080/x5/UI/SA/task/js/common.js,其实,只要是http://127.0.0.1:8080/x5/xxx/UI/SA/task/js/common.js都可以访问,$v2172可以换为任何url识别的字符,$v2172的目的就是让url变化,从而达到更新本地资源的目的。

资源版本号设置
1. UIServer\WEB-INF\justep.xml中的version,这个不用修改,每次版本发布会递增,用于维护平台自身的资源版本
    注意:X5.2.1.2000 版本以及之前版本只有提供这种模式,如果资源有变更,需要修改这里的资源版本号
2. 自己应用目录下 config\application.xml中的version,应用资源改变了,需要维护这个版本
    注意:X5.2.1.2000 版本以及之前版本没有提供这种方式,请用1

优先原则:如果应用中没有application.xml文件,将使用justep.xml中的设置

.cache生成
1.  studio启动tomcat的化,资源版本号会默认为一个guid,并且每次访问.w,.release和.cache都会重新生成,可以理解为.cache失效,也就是没有缓存机制,因为浏览器每次都会下载资源
2.  在外面启动的应用服务(tomcat等),这个是生产环境实际部署的情况,当访问.w时,如果.w有对应的.cache,将直接访问.cache,否则会先生成.cache,这时读取的资源版本号会以设置的为准
3.  企业版的compileUI.bat编译时,也会生成.release和.cache,资源版本号也是以设置为准
     注意:开发版的工具不会生成.cache,仅仅会编译src和dsrc;x5.2.1.2000 版本以及之前版本,企业版也不会生成.cache

项目实施
由上知道了X5的缓存机制,那比较容易清楚,如果改了js、css、gif等静态资源,那需要维护资源版本并让.cache新生成

197

主题

824

帖子

1889

积分

金牌会员

Rank: 6Rank: 6

积分
1889
QQ
发表于 2013-1-17 22:37:24 | 显示全部楼层
很好很强大
QQ:574178224

997

主题

4326

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10696
QQ
发表于 2013-1-17 23:06:44 | 显示全部楼层
不错
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案

0

主题

2

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2013-1-18 13:32:57 | 显示全部楼层

开发版?企业版?
开发工具不是免费的么?只是发布成品项目需要授权而已啊

31

主题

1856

帖子

3070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3070
 楼主| 发表于 2013-1-21 10:00:58 | 显示全部楼层
tt@xx2k.com 发表于 2013-1-18 13:32
开发版?企业版?
开发工具不是免费的么?只是发布成品项目需要授权而已啊 ...

开发版,企业版都适用。
但这里主要是针对企业版而言,毕竟开发时更多的不是要运行效率,而是希望修改能够即使体现(大多数情况都是在studio里面运行tomcat),

5

主题

17

帖子

29

积分

新手上路

Rank: 1

积分
29
发表于 2013-3-5 17:12:26 | 显示全部楼层
不错,挺好;期待小企业版本的诞生

58

主题

142

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
发表于 2013-4-11 21:43:27 | 显示全部楼层
今天还纳闷$v是啥东西,现在明白了。

0

主题

1

帖子

29

积分

禁止访问

积分
29
QQ
发表于 2013-6-30 12:48:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

12

主题

62

帖子

1405

积分

金牌会员

Rank: 6Rank: 6

积分
1405
发表于 2014-1-6 18:36:38 | 显示全部楼层
>2. 自己应用目录下 config\application.xml中的version,应用资源改变了,需要维护这个版本

这个貌似最好在模型编译以及源码编译时自动改变一下比较好,手工来改有点土呀

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
发表于 2014-1-22 18:34:06 | 显示全部楼层
如果改了js、css、gif等静态资源,那需要维护资源版本并让.cache新生成
能不能说的更具体点,维护资源版本就是要手动修改吗?比如把
<?xml version="1.0" encoding="UTF-8"?>
-<app> <version>1.0</version> </app>
里面的1.0改成1.1?
还有就是让企业版的.cache新生成如何操作?只需重新启动tomcat服务就可以了吗?
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-3-29 14:46 , Processed in 0.076515 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表