1
4
这真的很简单。
在节点内部。js中,它使用线程池来实现磁盘I/O的某些部分。类似的概念。
最好的方法是选择与用法匹配的实例化模型。在上述选项1中,对象可能会在整个应用程序周期内存储,而根本不会进行GCed。在选项2和3中,将为每个请求创建和GCed对象。您不应该担心创建和使用对象,然后让它GC。这就是语言设计用于不具有持久状态并且应该保持更长时间的事物的方式。 如果对象中没有特定于请求的状态,并且如果有多个请求处理程序试图同时使用该对象,则对象本身的状态不会出现问题,那么您实际上只是拥有一个全局服务,任何想要使用它的请求处理程序都可以使用它。这取决于您是否将其实现为您创建的对象,存储实例,然后在该实例上调用传统方法,或者将其实现为自身实例化的单例,您只需在其上调用函数或静态方法。这只是编码风格的差异,而不是功能上的差异。
通常,您需要尽可能多的封装和局部状态。无需将特定于请求的内容放入共享全局。为特定请求计算或计算的内容属于请求处理程序逻辑的内部。因此,只需遵循上述四个问题来确定对象是属于本地请求处理程序还是在更高范围内共享。如果你能通过保持事物的局部性来实现你的目标,那通常会更干净、更安全、更灵活。
GC负责为您清理。你可以信赖。只要您不在具有持久作用域的变量中持久存储对对象的引用,垃圾收集就会很好地为您解决问题。这就是设计语言的目的。你不应该害怕。如果您来自C或C++之类的非GC语言,那么您可能考虑过了。GC是你的朋友。非常、非常、非常偶尔地,您可能需要进行一些性能调整,以更清楚地了解您要求GC做多少事情,但在您实际发现需要以这种方式进行特殊优化之前,您几乎不应该担心这件事。 避免请求处理程序之间竞争条件的最简单方法是在请求处理程序之间不共享任何状态。如果您需要处理给定请求的所有内容都是在本地创建和使用的,并且从未提供给任何其他请求处理程序,那么您将绝对避免多个请求处理程序之间的任何竞争或共享条件。一般来说,从那里开始,因为这是最简单和最安全的。然后,如果您发现有一些事情需要进行性能优化,那么您可能需要探索某些类型的对象的共享或缓存,您必须小心这样做,以避免引入共享问题。但是,您很少会在设计开始时尝试这样做,因为大多数时候不需要额外的复杂性。 |
2
0
由于上述原因,截至#3,没有真正的赞成/反对列表。如果您可以避免路由处理程序中的实例化,那么请避免它! |
Softly · 单选按钮未按预期取值 1 年前 |
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
assembler · Nextjs没有处理发布请求 1 年前 |
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
Toniq · javascript为php保存多维数组 1 年前 |