2012-11-12 67 views
0

我想減少我的網站上我的JavaScript的開銷,我使用這個插件: https://github.com/carhartl/jquery-cookie剝離下來jQuery的Cookie的腳本

這是代碼:

/*! 
* jQuery Cookie Plugin v1.3 
* https://github.com/carhartl/jquery-cookie 
* 
* Copyright 2011, Klaus Hartl 
* Dual licensed under the MIT or GPL Version 2 licenses. 
* http://www.opensource.org/licenses/mit-license.php 
* http://www.opensource.org/licenses/GPL-2.0 
*/ 
(function ($, document, undefined) { 

    var pluses = /\+/g; 

    function raw(s) { 
     return s; 
    } 

    function decoded(s) { 
     return decodeURIComponent(s.replace(pluses, ' ')); 
    } 

    var config = $.cookie = function (key, value, options) { 

     // write 
     if (value !== undefined) { 
      options = $.extend({}, config.defaults, options); 

      if (value === null) { 
       options.expires = -1; 
      } 

      if (typeof options.expires === 'number') { 
       var days = options.expires, t = options.expires = new Date(); 
       t.setDate(t.getDate() + days); 
      } 

      value = config.json ? JSON.stringify(value) : String(value); 

      return (document.cookie = [ 
       encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), 
       options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 
       options.path ? '; path=' + options.path : '', 
       options.domain ? '; domain=' + options.domain : '', 
       options.secure ? '; secure' : '' 
      ].join('')); 
     } 

     // read 
     var decode = config.raw ? raw : decoded; 
     var cookies = document.cookie.split('; '); 
     for (var i = 0, l = cookies.length; i < l; i++) { 
      var parts = cookies[i].split('='); 
      if (decode(parts.shift()) === key) { 
       var cookie = decode(parts.join('=')); 
       return config.json ? JSON.parse(cookie) : cookie; 
      } 
     } 

     return null; 
    }; 

    config.defaults = {}; 

    $.removeCookie = function (key, options) { 
     if ($.cookie(key) !== null) { 
      $.cookie(key, null, options); 
      return true; 
     } 
     return false; 
    }; 

})(jQuery, document); 

這是我提的嘗試它通過刪除「寫入」代碼而被刪除

(function ($, document, undefined) { 

    var pluses = /\+/g; 

function raw(s) { 
    return s; 
} 

function decoded(s) { 
    return decodeURIComponent(s.replace(pluses, ' ')); 
} 

var config = $.cookie = function (key, value, options) { 

    // read 
    var decode = config.raw ? raw : decoded; 
    var cookies = document.cookie.split('; '); 
    for (var i = 0, l = cookies.length; i < l; i++) { 
     var parts = cookies[i].split('='); 
     if (decode(parts.shift()) === key) { 
      var cookie = decode(parts.join('=')); 
      return config.json ? JSON.parse(cookie) : cookie; 
     } 
    } 

    return null; 
}; 

config.defaults = {}; 

$.removeCookie = function (key, options) { 
    if ($.cookie(key) !== null) { 
     $.cookie(key, null, options); 
     return true; 
    } 
    return false; 
}; 

})(jQuery, document); 

如果我想用它只是爲了讀取cookie,而不是用於刪除,寫入和註釋丁,有沒有更多的我可以去掉的重量。

+0

剝離插件可能會造成嚴重的影響,因爲它們的內部函數調用可能會被破壞。而且對於任何版本升級,您最終都會一次又一次地執行相同的剝離操作。相反,只需簡化js/css並減小文件.. –

+0

也許http://codereview.stackexchange.com/是這個問題的更好的場所。 – Candide

+0

那麼如果你不需要'removeCookie',那麼顯然你可以刪除整個塊。它看起來好像主函數不再需要'value'或'options'參數。 –

回答

2

那麼,使用jQuery插件只是爲了讀取一個cookie是一種愚蠢的,雖然我已經做了同樣的事情與同一個插件!

What is the shortest function for reading a cookie by name in JavaScript?

有一些短的代碼,你可以使用。

所有這些的核心都是document.cookie - 它有點糟糕,它們只是一個字符串,而不是一個好的數組已經存在 - 但是你去了。

1

有很多。您可以刪除removeCookie()初學者。此外,您會看到$.cookie()方法需要valueoptions。如果您只是閱讀cookies,那麼這些都是不必要的。你也可以去掉與它們相關的代碼。我猜測,你可以得到它歸結爲這樣的事:

/*! 
* jQuery Cookie Plugin v1.3 
* https://github.com/carhartl/jquery-cookie 
* 
* Copyright 2011, Klaus Hartl 
* Dual licensed under the MIT or GPL Version 2 licenses. 
* http://www.opensource.org/licenses/mit-license.php 
* http://www.opensource.org/licenses/GPL-2.0 
*/ 
(function ($, document, undefined) { 

    var pluses = /\+/g; 

    function raw(s) { 
     return s; 
    } 

    function decoded(s) { 
     return decodeURIComponent(s.replace(pluses, ' ')); 
    } 

    var config = $.cookie = function (key, value, options) { 
     // read 
     var decode = config.raw ? raw : decoded; 
     var cookies = document.cookie.split('; '); 
     for (var i = 0, l = cookies.length; i < l; i++) { 
      var parts = cookies[i].split('='); 
      if (decode(parts.shift()) === key) { 
       var cookie = decode(parts.join('=')); 
       return config.json ? JSON.parse(cookie) : cookie; 
      } 
     } 

     return null; 
    }; 

    config.defaults = {}; 

})(jQuery, document); 

根據你的使用情況,您可以刪除所有相關configdecoderawjson的代碼,只需設置它默認返回你想要的格式。