gpt4 book ai didi

javascript - JavaScript "Factory Design Pattern"中的性能优化

转载 作者:行者123 更新时间:2023-11-30 14:23:22 25 4
gpt4 key购买 nike

我想在我的应用程序中使用工厂设计模式,并在开发过程中利用它的一些优点,例如可读性、灵 active 、可扩展性、封装和正确绑定(bind)“this”运算符。当我的应用程序在加载时生成 html 代码我的网页,创建对象的性能和内存使用对我来说很重要。请看下面的例子;

// Factory Design with Delegation
const car = function( color )
{
const CarPrototype = function( color )
{
const carPrototype = {};

carPrototype.color = color;
// Private function
function internal()
{
console.log( "internal" );
// ...
}

// Public function
carPrototype.gas = function()
{
internal();
// ...
}

carPrototype.brake = function()
{
// ...
}

return carPrototype;
}
return Object.create( CarPrototype( color ) );
}

// Traditional constructor function
const Car = function( color )
{
this.color = color;
// ...
}

Car.prototype.internal = function()
{
console.log( "internal" );
// ...
}

Car.prototype.gas = function()
{
this.internal();
// ...
}

Car.prototype.brake = function()
{
// ...
}


function myFunction()
{

const mazdaF = car( "red" );

const mazdaT = new Car( "red" );

console.log( mazdaF, mazdaT );

}
<html>
<head></head>
<body onload="myFunction()">
</body>
</html>

运行上述代码的结果如下所示。

enter image description here

另外,性能测试结果在这里显示Performance result .

我想知道我是否为我的案例使用了正确的模式。万一,我应该怎么做才能提高性能?

更新:

现在我对上面的工厂模式有点困惑。我想当我使用 Object.create( CarPrototype( color ) ) 时,我正在创建一个全新的汽车对象并返回一个对象,该对象的原型(prototype)链接到该汽车对象。因此,如果我创建 1000 个汽车对象,我将拥有 1000 个汽车原型(prototype),而不是一个具有 1000 个委托(delegate)链接的原型(prototype)。我对吗?如果这是真的,谁能告诉我如何更正它?

最佳答案

JSPerf 是 being buggy所以我不能真正测试你的,但是......我会说这更具可读性和更可维护性,同时速度很快(使用 ES6 类):

const Car = (function() {
const internal = Symbol("internal");

class Car {
constructor(color) {
this.color = color;
}

[internal]() {
console.log("internal");
// ...
}

gas() {
this[internal]();
// ...
}

break() {
// ...
}
}

return Car;
})();

let car = new Car("red");
car.gas();
console.log(car);

由于您可以使用 Object.getOwnPropertySymbols 访问模拟私有(private)方法的符号,但并非偶然,符号方式对我来说“足够好”(如,我拥有的任何 secret 我都不会传输给客户端,私有(private)方法纯粹是为了让程序员了解什么是公共(public) API 什么不是。如果这对你来说还不够好,那么这就是性能,尽管你失去了 internal 作为一个正确的方法:

const Car = (function() {
function internal(car) {
console.log("internal");
}

class Car {
constructor(color) {
this.color = color;
}

gas() {
internal(this);
// ...
}

break() {
// ...
}
}

return Car;
})();

let car = new Car("red");
car.gas();
console.log(car);

外部 IIFE 正在模拟一个模块(参见 JavaScript module pattern with example);如果您使用适当的模块,则不需要它。

关于javascript - JavaScript "Factory Design Pattern"中的性能优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52358302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com