js配置文件不缓存

如果一个项目变更频繁,那么浏览器缓存是一个很大的问题,因为它会缓存静态文件,除了html,除非你设置强制缓存,

就是那种自定义设置缓存时间的方式。

那么一般最好是设置个公共的配置文件,那么公共静态文件需要变更就可以修改一次就可以了,

目前方式把配置文件设置一个时间戳版本号,那么就可以不缓存配置文件了。

;(function(window,undefined){
    var currentScript=document.currentScript;
    /*
        配置项:paths 默认路径,otherPaths  添加路径 version 版本号
    */
    loadJs.defaultConfig={
        paths:{jqery:"jquery.js"},
        otherPaths:{},
        version:""
    };
    function init(){
        if(typeof loadJs.config == "object"){
            for(var attr in loadJs.config){
                loadJs.defaultConfig[attr]=loadJs.config[attr];
            }
        }
        loadJs.config=loadJs.defaultConfig;
    }
    function loadJs(){
        var args=arguments;
        var mainPath=currentScript.getAttribute("data-main");
        if(mainPath.indexOf(".js")==-1){
            mainPath+=".js";
        }
        mainPath+="?v="+Date.now();
        var parent=currentScript.parentNode;
        var oMainsript=document.createElement("script");
        oMainsript.src=mainPath;
        parent.appendChild(oMainsript);
        oMainsript.onload=function(){
            loading.apply(window,args);
        }
    }
    function loading(){
        init();
        var isAll=false,
            args=arguments,
            argsLen=args.length;
        var callback,pathArr=[];
        if(argsLen>1){
            pathArr=args[0];
            callback=args[1];
        }else{
            callback=args[0];
            isAll=true;
        }
        for(var attr in loadJs.config.otherPaths){
            loadJs.config.paths[attr]=loadJs.config.otherPaths[attr];
        }
        if(isAll){
            for(var src in loadJs.config.paths){
                pathArr.push(src);
            }
        }
        loaded(pathArr,callback);
    }
    function loaded(pathArr,callback){
        var len=pathArr.length,count=0;
        var head=document.head;
        var msgArr=[];
        var config=loadJs.config;
        (function itload(i){
            if(pathArr.length==i){
                callback(msgArr);
                return ;
            }
        var oScript=document.createElement("script");
        var path=config.paths[pathArr[i]]+(config.version==""?"":"?v="+config.version);
            oScript.src=path;
            head.insertBefore(oScript,document.head.children[document.head.childElementCount-1]);
            oScript.onload=function(){
                msgArr.push(pathArr[i]+":success");
                count++;
                itload(count);
            }
            oScript.onerror=function(){
                msgArr.push(pathArr[i]+":fail");
                count++;
                itload(count);
            }
        })(count);
    }

    window.loadJs=loadJs;
})(window,undefined);

配置文件  main.js

loadJs.config={
        version:"0.2",
        otherPaths:{touch:"C:\\Users\\Administrator\\Desktop\\testWeb\\touch\\touchjs-master\\touchjs-master\\touch.min.js"}
    };

测试 html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script data-main="main" src="loadJs.js"></script>
    <style>
    #container{
        position: absolute;
        top: 50px;
        left: 100px;
    }
    </style>
</head>
<body>
    <div id="container"></div>

    <script>
        /**
         * 图片拼图
         * @param {id} String [需要一个容器,传进一个id值]
         * @param {rows} Number [传入行数]
         * @param {cols} Number [传入列数]
         * @param {url} String [传入图片路径]
         *
         */

    //可以配置所需加载js ,如:只加载jqery  不配置加载全部js文件
    /*loadJs(["jqery"],function(msgArr){
        console.log(msgArr);
        dynamicImg("container",10,10,"1.jpg");
    });*/
    loadJs(function(msgArr){
        console.log(msgArr);
        dynamicImg("container",10,10,"1.jpg");
    });    

    function dynamicImg(id,rows,cols,url){
        var defaultParam={
                speed:500
            };
        var oImg=document.createElement("img");
        var oContainer=$("#"+id);
        oImg.src=url;
        oImg.onload=function(){
            oContainer.append(oImg);
            $(oImg).css("opacity",0);
            createLi(rows,cols);
            move();
        }
        /*创造div,图片为背景,使用div把一个图片拼成一个完整的图片
        只要不断移动div位置和图片背景的位置,就可以实现
        */
        function createLi(rows,cols){
            oContainer.append("<div class=‘smallImg‘ id=‘smallImg‘>");
            var $smallImg=$("#smallImg");
            var imgh=$(oImg).height(),imgw=$(oImg).width();
            var r=imgh/rows,c=imgw/cols;
            for(var i=0;i<rows;i++){
                for(var j=0;j<cols;j++){
                    var imgDiv=$("<div class=‘imgDiv‘>");
                    $smallImg.append(imgDiv);
                    imgDiv.get(0).cssT=i*r;
                    imgDiv.get(0).cssL=j*c;
                    imgDiv.css({position:"absolute",
                        top:Math.random()*imgh,left:Math.random()*imgw,
                        opacity:0,
                        width:c,height:r,
                        "background-image":"url("+url+")",
                        "background-position":-j*c+"px -"+i*r+"px"
                        });
                }
            }
        }
        /*移动散乱的图片,拼成完整图片*/
        function move(){
            var $imgDiv=$(".imgDiv");
            $imgDiv.each(function(){
                $(this).animate({top:this.cssT,left:this.cssL,opacity:1},(Math.random()+10)*defaultParam.speed);
            });
        }
    }

    </script>
</body>
</html>

思路来自requireJs

如果有更多的需求可以直接使用reqireJs  它更加稳定

时间: 2024-08-11 07:38:42

js配置文件不缓存的相关文章

vue-cli脚手架build目录中的webpack.prod.conf.js配置文件

// 下面是引入nodejs的路径模块 var path = require('path') // 下面是utils工具配置文件,主要用来处理css类文件的loader var utils = require('./utils') // 下面引入webpack,来使用webpack内置插件 var webpack = require('webpack') // 下面是config目录下的index.js配置文件,主要用来定义了生产和开发环境的相关基础配置 var config = require

【php】基于Redis的js、css缓存类

<?php /* *基于Redis的js.css缓存类(有效解决tp等框架访问public出现的各种问题) *Written by Radish 2015.8.16 */ define('REDIS_HOST', '127.0.0.1'); define('REDIS_PORT', 6379); // class im { function __construct() { $this->redis = new Redis(); $this->redis->connect(REDIS

关于更新发布CSS和JS文件的缓存问题

在Web应用程序大行天下的今天,我们程序员的工作大都基于B/S架构,B/S架构的优势就在于可以及时(甚至随时)更新页面以及后台逻辑,而不用通知客户去手动更新客户端.在这种环境下,是不是B/S架构的软件就真的没有升级的问题了呢? 现如今,浏览器大战下,各个浏览器也是拼了命的提高性能,升级JS解析引擎,更好的处理浏览器的页面缓存,让用户的浏览体验更快,占用更小的PC资源.那么,问题就出现在JS和CSS缓存,甚至页面缓存上.至于浏览器对页面的缓存,我们一般通过在服务端发送页面的时候设置页面的生存期,一

js操作serviceWorker缓存静态文件

js操作serviceWorker缓存静态文件 serviceWorker的作用就是用来做离线应用的,在手机端程序中用的较多 先看下效果 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,

ESLint {} 内部强制有空格 .eslintrc.js 配置文件 &#39;object-curly-spacing&#39;: [&quot;error&quot;, &quot;always&quot;],

module.exports = { root: true, 'extends': [ 'plugin:vue/essential', '@vue/standard' ], rules: { 'object-curly-spacing': ["error", "always"], // allow async-await 'generator-star-spacing': 'off', // allow debugger during development 'no

vue-cli脚手架build目录中的webpack.base.conf.js配置文件

此文章用来解释vue-cli脚手架build目录中的webpack.base.conf.js配置文件 此配置文件是vue开发环境的wepack相关配置文件,主要用来处理各种文件的配置 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单独的注释模块,请自行查看 上代码 // 引入nodejs路径模块 var path = require('path') // 引入utils工具模块,具体查看我的博客关于utils的解释,utils主要用来处理css-loader和vue-st

webpack.config.js配置文件

1.基本配置 webpack在执行时,除在命令行传入参数,还可以通过指定的配置文件来执行.默认会搜索当前目录下webpack.config.js.这个文件是一个node.js模块,返回一个json格式的配置对象,或者通过--config选项来指定配置文件. //创建webpack.config.js var webpack = require('webpack'); module.exports = { entry:'./entry.js', //入口文件 output:{ //node.js中

webpack前端构建工具学习总结(三)之webpack.config.js配置文件

Webpack 在执行的时候,除了在命令行传入参数,还可以通过指定的配置文件来执行.默认情况下,会搜索当前目录的 webpack.config.js 文件,这个文件是一个 node.js 模块,返回一个 json 格式的配置信息对象,或者通过 --config 选项来指定配置文件. webpack文档:https://webpack.github.io/docs/ 1.新建一个文件夹src存放打包前的源文件,dist文件夹存放打包后的文件,新建一个webpack.config.js为webpac

r.js 配置文件 example.build.js 不完整注释

对这个 r.js 下的 build 配置文件作说明: /* * This is an example build file that demonstrates how to use the build system for * require.js. * * THIS BUILD FILE WILL NOT WORK. It is referencing paths that probably * do not exist on your machine. Just use it as a gu