Javascript模块模式内存占用和性能

前端之家收集整理的这篇文章主要介绍了Javascript模块模式内存占用和性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用Javascript模块模式来尝试实现类似C#枚举的功能.我有两种方式,我目前正在考虑实现此功能,但我不明白一种方式与另一种方式的所有好处或优点.

这是实现1:

var MyApp = (function (app) {

    // Private Variable
    var enums = {
        ActionStatus: {
            New: 1,Open: 2,Closed: 3
        }
    };

    // Public Method
    app.getEnum = function (path) {
        var value = enums;            
        var properties = path.split('.');
        for (var i = 0,len = properties.length; i < len; ++i) {
            value = value[properties[i]];
        }
        return value;
    };

    return app;

})(MyApp || {});

// Example usage
var status = MyApp.getEnum("ActionStatus.Open");

现在实施2:

var MyApp = (function (app) {

    // Public Property
    app.Enums = {
        ActionStatus: {
            New: 1,Closed: 3
        }
    };

    return app;

})(MyApp || {});

// Example usage
var status = MyApp.Enums.ActionStatus.Open;

主要区别在于使用“私有”变量与“公共”属性来存储枚举.我认为实现1有点慢,但我不确定将枚举保持为“私有”会减少内存使用量.谁能解释两者(如果有的话)内存占用和性能的差异?任何其他建议/意见表示赞赏.

最佳答案

…but I was not sure if keeping the enums as “private” reduced the memory usage

相反,如果有的话:您仍然必须拥有枚举对象,并且您必须具有访问它的功能.

在速度方面,我不担心.添加函数调用不会产生任何真正的区别(当我担心使用新的forEach等时,我甚至在IE6上使用其速度非常慢的JS引擎,这无关紧要).

在几年内,你可能能够拥有两个世界中最好的:由于ECMAScript5的Object.defineProperties功能,它们是只读的枚举:

var Enums = Object.defineProperties({},{
    ActionStatus: {
        value: Object.defineProperties({},{
            New:    {value: 1},Open:   {value: 2},Closed: {value: 3}
        })
    }
});

// Usage
var n = Enums.ActionStatus.New; // 1

默认情况下,使用defineProperties创建的属性是只读的.

实际上,如果你添加一个ES5“shim”来创建Object.defineProperties,而这些浏览器还没有它本地存在,你基本上可以拥有它. “shimmed”版本将创建读写属性,因为只有本机支持的版本才能真正创建只读属性,但您现在可以编写代码并知道它可以在现代浏览器中正常工作(大约一半)所有网络冲浪者目前都拥有它们,同时仍在工作,只是缺乏稳健性,而不是现代化的.

当然,EMCAScript6可能会更进一步,但这仍然是未来的事情.

原文链接:https://www.f2er.com/js/429536.html

猜你在找的JavaScript相关文章