Skip to content

Commit 8768138

Browse files
CyberAPNataliaTepluhina
authored andcommitted
Add an example on why singletones are bad (#1298)
Co-authored-by: Natalia Tepluhina <tarya.se@gmail.com>
1 parent 33cf5b0 commit 8768138

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

src/guide/ssr/structure.md

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,32 @@
44

55
クライアントのみのコードを書くとき、コードは毎回新しいコンテキストで評価されると考えることができます。しかし、 Node.js サーバは長時間実行されるプロセスです。コードがプロセスにはじめて要求されるとき、コードは一度評価されメモリ内にとどまります。つまり、シングルトンのオブジェクトを作成すると、すべての受信リクエストの間で共有されることになり、リクエスト間での状態の汚染リスクがあるということです。
66

7-
よって、 **リクエストごとに新しいルート Vue インスタンスを作成する** 必要があります。そのためには、リクエストごとに新しいアプリケーションのインスタンスを作成する、繰り返し実行可能なファクトリ関数を書く必要があります。したがって、サーバコードは次のようになります:
7+
```js
8+
// bad
9+
import app from './app.js'
10+
11+
server.get('*', async (req, res) => {
12+
// アプリケーションは全ユーザで共有されます
13+
const result = await renderToString(app)
14+
// ...
15+
})
16+
```
17+
18+
```js
19+
// good
20+
function createApp() {
21+
return createSSRApp(/* ... */)
22+
}
23+
24+
server.get('*', async (req, res) => {
25+
// ユーザごとにアプリケーションを持ちます
26+
const app = createApp()
27+
const result = await renderToString(app)
28+
// ...
29+
})
30+
```
31+
32+
したがって、 **リクエストごとに新しいルート Vue インスタンスを作成する** 必要があります。そのためには、リクエストごとに新しいアプリケーションのインスタンスを作成する、繰り返し実行可能なファクトリ関数を書く必要があります:
833

934
```js
1035
// server.js

0 commit comments

Comments
 (0)