单独缓存组合的javascript文件

时间:2014-05-22 13:37:44

标签: javascript http caching cross-browser browser-cache

是否可以单独缓存JavaScript文件,即使它们被合并为一个JavaScript文件?

我需要这个,因为我希望同时缓存下载的内容组合通过互联网发送的数据。

浏览器特定的解决方案也将非常受欢迎!

2 个答案:

答案 0 :(得分:2)

是的,Angular实际上做了类似的事情。诀窍是缓存在不同的级别而不是HTTP协议级别。您可以自己缓存到localStorage或indexeddb。

创建一个缓存对象,每当你添加一个文件时,把它放在那里

// a.js, this file generated by a readFile call in nodejs or whatever
// build process you want to have
var cache = cache || {}; // might also want to use an array here to preserve order
cache["a.js"] = "your real a.js file as code";

一个文件请求可以简单地为要缓存的每个文件重复包含这四行,版本控制也可能适用于此。

接下来,在您的身体部分的末尾,您可以放置​​

// let's say you need in this particular page a.js b.js
eval(cache["a.js"]); // write a helper function for this, remember
eval(cache["b.js"]); // cache is for example localStorage with a prefix
eval(cache["c.js"]);

答案 1 :(得分:0)

看看gulp。和gulp-concat具体。

此代码读取我的所有.js源文件:

  // Make sources.  Uglify, Concat, and add hash if necessary
  // Determine output file.  Only used if config.concat === true
  var destJs = 'app' + (config.minify?'.min':'') + '.js';
  var appJs = gulp.src([config.dashboard.js, '!/src/dashboard/vendor/'])
  .pipe(plugins.plumber())
  .pipe(plugins.ngAnnotate())
  .pipe(plugins.angularFilesort())
  .pipe(plugins.if(config.minify, plugins.uglify()))
  .pipe(plugins.if(config.concat, plugins.concat(destJs)))
  .pipe(plugins.if(config.hash, plugins.hash()))
  .pipe(gulp.dest(config.dashboard.dest + '/js'))
  • plugins.ngAnnotate()注释角度的依赖注入
  • plugins.angularFilesort()按依赖项
  • 对它们进行排序
  • plugins.if()使用plugins.uglify()
  • 有条件地uglifies它们
  • plugins.if()使用plugins.concat()
  • 有条件地将它们连接起来
  • plugins.if()使用plugins.hash()有条件地对它们进行哈希处理以进行缓存清除。
  • 然后将所有文件(或仅一个)写入我的项目build/js文件夹。

var plugins = require('gulp-load-plugins')();加载了插件。

这里有很多,但一旦你进入它,它真的很简单。 方式比咕噜更容易,或者根据我的经验制作。

对于你的问题,你可以在pipe()的多个地方gulp.dest()。在缩小/连接之前和之后。