简体   繁体   English

JavaScript插件设置优化

[英]JavaScript Plugin Settings Optimizations

I've finished a JavaScript plugin and am now focused on optimization, but am running into a file size problem. 我已经完成了一个JavaScript插件,现在专注于优化,但是遇到了文件大小问题。 I've gone through and trimmed everything down (variable names, references, etc) several times and have optimized all of my methods. 我已经遍历了数次并将所有内容(变量名,引用等)修剪掉,并优化了所有方法。

The weight is all in the user settings. 重量全部在用户设置中。 This plugin is meant for heavy user customization through settings only... so includes many settings. 该插件仅用于通过设置进行大量用户自定义...因此包含许多设置。 Additionally, "skins" are available and are just variations of the default settings object, like this: 此外,“皮肤”是可用的,并且只是默认设置对象的变体,如下所示:

//SETUP MAIN PLUGIN DEFAULTS OBJECT
var default:{ 'setting1' : value1, 'setting2' : value2 },

// INIT METHOD
init:function(options){
   var defaults=Plugin.defaults;
        //SETUP SKINS SETTINGS OBJECTS
    switch(options.skin){
           case 2: 
               var defaults={ 'setting1' : value1, 'setting2' : value2};
           break;
           //ETC...
        };
Boxaroo.settings=$.extend({},defaults,options||{});
}

Basically, the user can pass in a skin number as their first setting - which loads a specific set of plugin defaults - which can them be overridden with additional settings passed in after their skin number setting. 基本上,用户可以将外观编号作为其第一个设置传递-加载一组特定的插件默认设置-可以将其替换为在其外观编号设置后传入的其他设置。

Everything works perfectly, but it means I need to repeat user setting names for every case/skin... Since there are 6 skins, 'setting1' will be repeated 6 times (although the value may be different). 一切正常,但是这意味着我需要为每种情况/皮肤重复用户设置名称...由于有6种皮肤,因此“ setting1”将重复6次(尽管值可能有所不同)。 I'm curious if there is any way to condense declaring these 6 objects? 我很好奇是否有任何方法可以压缩声明这6个对象?

Not sure to fully understand but why don't you declare default once change value afer like that : 不确定是否完全理解,但是为什么每次更改值后都不声明默认值:

var defaults=Plugin.defaults;
switch(options.skin){
       case 2: 
           defaults.setting1 = value1;
           ...
       break;
       //ETC...
    };

Or use jQuery extend again : 或再次使用jQuery扩展:

var defaults=Plugin.defaults;
switch(options.skin){
       case 2: 
           $.extend(defaults, {setting1 : value1, ...};
       break;
       //ETC...
    };

you can use an Object Constructor 您可以使用对象构造器

function Skin(data) {//use array to keep code short
    this.setting1 = data[0];
    this.setting2 = data[1];
};    
//SETUP MAIN PLUGIN DEFAULTS OBJECT
var default:new Skin([value1,value2]),//if skin object is equal to default

// INIT METHOD
init:function(options){
var defaults=Plugin.defaults;
    //SETUP SKINS SETTINGS OBJECTS
switch(options.skin){
       case 2: 
           var defaults=new Skin([value1,value2]);
       break;
       //ETC...
    };
Boxaroo.settings=$.extend({},defaults,options||{});
}    

or you can use an array of skins to remove the switch case if you don't need to do anything else when you change the skin 或者,如果您在更换皮肤时不需要执行任何其他操作,则可以使用一系列皮肤来移除开关盒

function Skin(data) {
    this.setting1 = data[0];
    this.setting2 = data[1];
};  
//SETUP MAIN PLUGIN DEFAULTS OBJECT
var default:new Skin([value1,value2]),
var skins:[
        new Skin(["setting1 skin1","setting2 skin1"]),
        new Skin(["setting1 skin2","setting2 skin2"]),
        new Skin(["setting1 skin3","setting2 skin3"])
      ],
// INIT METHOD
init:function(options){
   var defaults=Plugin.defaults;
    //SETUP SKINS SETTINGS OBJECTS
    var defaults=skins[options.skin];
Boxaroo.settings=$.extend({},defaults,options||{});
}    

http://jsfiddle.net/7ffg5/ http://jsfiddle.net/7ffg5/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM