SeaJS 里版本号和时间戳管理的最佳实践

标签: Programming | 发表时间:2011-08-01 10:44 | 作者:lifesinger 别致
出处:http://lifesinger.wordpress.com

用 seajs 组织项目,上线后,经常需要更新特定文件或所有文件的时间戳,以清空浏览器缓存。最简单的方式是:

define(function(require, exports) {
  var a = require('path/to/a.js?20110801');
});

这种方式很简单直观,弊端也很明显:文件一多,时间戳会分散在各个文件,维护起来不方便。

第二种方式是利用 alias:

seajs.config({
  alias: {
    'jquery': 'jquery/1.6.2/jquery',
    'backbone': 'backbone/0.5.1/backbone',
    'a': 'a.js?20110801',
    'b': 'b.js?20110801'
  }
});

这种方式用来维护 jquery 等类库模块的版本号是非常方便的。但用来加时间戳,文件一多时,依旧不方便。

第三种方式是利用 map:

seajs.config({
  'map': [
    [ /^(.*\.(?:css|js))(.*)$/i, '$1?20110801' ]
  ]
});

这种方式,用来批量更新时间戳是最方便的。

最佳实践

假设文件存放路径如下:


http://example.com/libs/seajs/1.0.0/sea.js

http://example.com/libs/jquery/1.6.2/jquery.js

http://example.com/libs/backbone/0.5.1/backbone.js

http://example.com/app/xxx/a.js

http://example.com/app/xxx/b.js

http://example.com/app/xxx/c.css

为了方便版本和时间戳管理,建议配置如下:

config.js:

seajs.config({
  alias: {
    'jquery': 'jquery/1.6.2/jquery',
    'backbone': 'backbone/0.5.1/backbone'
  },
  map: [
    [ /^(.*\/app\/xxx\/.*\.(?:css|js))(?:.*)$/i, '$1?20110802' ]
  ]
});

这样配置好后,在具体模块代码里,就不再需要考虑时间戳了:

define(function(require, exports) {
  var $ = require('jquery');
  var BB = require('backbone');

  var a = require('./a');
  var b = require('./b');
  require('./c.css');

  // ...
});

相关 [seajs 版本 时间戳] 推荐:

SeaJS 里版本号和时间戳管理的最佳实践

- 别致 - 岁月如歌
用 seajs 组织项目,上线后,经常需要更新特定文件或所有文件的时间戳,以清空浏览器缓存. 这种方式很简单直观,弊端也很明显:文件一多,时间戳会分散在各个文件,维护起来不方便. 第二种方式是利用 alias:. 这种方式用来维护 jquery 等类库模块的版本号是非常方便的. 但用来加时间戳,文件一多时,依旧不方便.

SeaJS 和 RequireJS 的异同

- Pjan - 岁月如歌
相同点是:要解决的问题相同,都是浏览器端的模块化开发,目标一致. RequireJS 遵循的是 Modules/AMD 规范. SeaJS 遵循的是 Mdoules/Wrappings 规范的 define 形式. AMD 规范在 CommonJS 社区争议很大,规范里太多 RequireJS 的影子.

在SeaJS中实现html模板文件的加载(Temod介绍)

- LiuWeifeng - 博客园-EricZhang's Technology Blog
在几天前的一篇文章中,我介绍了JavaScript的模块化加载框架SeaJS. 目前SeaJS支持js和css的模块化加载. 在实际应用中,可能会遇到需要加载html页面模板文件的场景,例如我接触的某些应用使用Template Toolkit(以下简称TT)写页面模板,然后由js载入TT模板后渲染输出,在这种纯JavaScript渲染的Web架构中,需要将tt文件(或其它格式html模板文件)作为模块载入.

使用SeaJS实现模块化JavaScript开发

- jk - CNode社区
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制. 与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载. SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaScript文件及对象依赖处理中解放出来,可以专注于代码本身的逻辑.

【转载】使用SeaJS实现模块化JavaScript开发

- - HTML5研究小组
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制. 与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按…. SeaJS是一个遵循 CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.

LABjs、RequireJS、SeaJS 哪个最好用?为什么?

- - 知乎每日精选
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行. LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化. RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更简单自然.

让protobuf生成器支持时间戳检查

- Ease - C++博客-首页原创精华区
使用protobuf的生成器可以对proto文件进行解析后生成指定的目标语言代码.随着项目的不断扩大, 协议修改变的非常频繁, 因此每次重编变的异常耗时. 模仿C/C++编译器的时间戳检查生成机制,我给protobuf生成器添加了时间戳检查功能. 此功能不是必须的, 可以通过命令行指定—timestampfile FILE 来指定要生成的proto文件对应的时间戳.

js时间戳怎么转成日期格式

- - CSDN博客推荐文章
js时间戳怎么转成日期格式. 这个在主群里有朋友§☆釺哖蟲...o问js时间戳怎么转成日期格式 ,他的问题是这样的. /Date(1354116249000)/ 这样的格式怎么转成时间格式. 这是从C#的Datatime格式通过Json传到Js里面的,. js需要把时间戳转为为普通格式,一般的情况下可能用不到的,.

ORACLE----TimeStamp(时间戳)字段自动更新

- -
之前对id的自增长进行了设置,原以为时间戳的更新也类似,使用序列之类的,但最终发现跟序列没半毛钱关系. 触发器是肯定要用的,但编写脚本也是需要的. 图2中,我们要选择事件(即例子中的INSERT,UPDATE),触发时间(即INSERT,UPDATE事件的前或后,例子中是before),列(例子中为MODIFIED_DATE,为TimeStamp类型),新旧值(为系统默认值OLD和NEW).

高并发下高效获取时间戳

- - 掘金 架构
Java获取当前时间戳一般是通过System.currentTimeMillis()来获取. 这是一个native方法,用于获取当前时间与1970年1月1日0点之间的差,虽然返回值的时间单位是毫秒,但该值的粒度取决于基础操作系统. 看下HotSpot源码的hotspot/src/os/linux/vm/os_linux.cpp文件中,有一个javaTimeMillis()方法,这就是System.currentTimeMillis()的native实现.