JavaScript中延迟加载属性模式是如何实现和应用的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1825个文字,预计阅读时间需要8分钟。
在传统上,开发人员在使用JavaScript等语言时,可能需要在实例中创建必要的属性。对于在构建函数中随机可用的小块数据,这并非问题。但关键在于,如果实例可用之前需要计算某些数据,则并非问题。
传统上,开发人员在 JavaScript 类中为实例中可能需要的任何数据创建属性。对于在构造函数中随时可用的小块数据来说,这不是问题。但是,如果在实例中可用之前需要计算某些数据,您可能不想预先支付该费用。例如,考虑这个类:
class MyClass { constructor() { this.data = someExpensiveComputation(); } }
在这里,data属性是作为执行一些昂贵计算的结果而创建的。如果您不确定是否会使用该属性,则预先执行该计算可能效率不高。幸运的是,有几种方法可以将这些操作推迟到以后。
按需属性模式
优化执行昂贵操作的最简单方法是等到需要数据后再进行计算。例如,您可以使用带有 getter 的访问器属性来按需进行计算,如下所示:
class MyClass { get data() { return someExpensiveComputation(); } }
在这种情况下,直到有人第一次读取该data属性时,您的昂贵计算才会发生,这是一种改进。但是,每次data读取属性时都会执行相同的昂贵计算,这比之前的示例更糟糕,其中至少只执行了一次计算。这不是一个好的解决方案,但您可以在此基础上创建一个更好的解决方案。
本文共计1825个文字,预计阅读时间需要8分钟。
在传统上,开发人员在使用JavaScript等语言时,可能需要在实例中创建必要的属性。对于在构建函数中随机可用的小块数据,这并非问题。但关键在于,如果实例可用之前需要计算某些数据,则并非问题。
传统上,开发人员在 JavaScript 类中为实例中可能需要的任何数据创建属性。对于在构造函数中随时可用的小块数据来说,这不是问题。但是,如果在实例中可用之前需要计算某些数据,您可能不想预先支付该费用。例如,考虑这个类:
class MyClass { constructor() { this.data = someExpensiveComputation(); } }
在这里,data属性是作为执行一些昂贵计算的结果而创建的。如果您不确定是否会使用该属性,则预先执行该计算可能效率不高。幸运的是,有几种方法可以将这些操作推迟到以后。
按需属性模式
优化执行昂贵操作的最简单方法是等到需要数据后再进行计算。例如,您可以使用带有 getter 的访问器属性来按需进行计算,如下所示:
class MyClass { get data() { return someExpensiveComputation(); } }
在这种情况下,直到有人第一次读取该data属性时,您的昂贵计算才会发生,这是一种改进。但是,每次data读取属性时都会执行相同的昂贵计算,这比之前的示例更糟糕,其中至少只执行了一次计算。这不是一个好的解决方案,但您可以在此基础上创建一个更好的解决方案。

