You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Ожидается: `boolean | 'once'` (`'once'` поддерживается только с версии 2.3.1+)
133
134
134
-
По умолчанию, рендерер сборки будет создавать новый контекст V8 для каждого рендеринга и повторно исполнять всю сборку. Это имеет некоторые преимущества — например, не нужно беспокоиться о проблеме «синглетона с состоянием», о которой упоминали ранее. Однако этот режим требует значительных затрат производительности, поскольку повторное выполнение сборки обходится дорого, особенно когда приложение становится большим.
135
+
По умолчанию, рендерер сборки будет создавать новый контекст V8 для каждого рендеринга и повторно исполнять всю сборку. Это имеет некоторые преимущества — например, код приложения изолирован от процесса сервера и не нужно беспокоиться [о проблеме «синглетона с состоянием»](./structure.md#avoid-stateful-singletons), о которой упоминали ранее в руководстве. Однако этот режим требует значительных затрат производительности, поскольку повторное выполнение сборки обходится дорого, особенно когда приложение становится большим.
135
136
136
-
По умолчанию эта опция имеет значение `true` для обеспечения обратной совместимости, но рекомендуется использовать `runInNewContext: false` всегда, когда это возможно.
137
+
По умолчанию эта опция имеет значение `true` для обеспечения обратной совместимости, но рекомендуется использовать `runInNewContext: false` или `runInNewContext: 'once'` всегда, когда это возможно.
138
+
139
+
> В версии 2.3.0 у этой опции есть ошибка, когда при `runInNewContext: false` сборка всё ещё исполнялась в отдельном глобальном контексте. Информация далее предполагает использование версии 2.3.1+.
140
+
141
+
С опцией `runInNewContext: false`, код сборки будет выполняться в том же контексте `global`, что и серверный процесс, поэтому нужно быть осторожным с кодом, который изменяет `global` в вашем приложении.
142
+
143
+
С опцией `runInNewContext: 'once'` (добавлено в версии 2.3.1+), сборка выполняется в отдельном контексте `global`, но только один раз при запуске. Это обеспечивает лучшую изоляцию кода приложения поскольку предотвращает случайно загрязнение объекта `global` серверного процесса. Предостережения заключаются в следующем:
144
+
145
+
1. Зависимости, которые изменяют `global` (например, полифиллы) не должны быть объявлены внешними зависимостями в этом режиме;
146
+
2. Значения, возвращаемые при выполнении сборки будут использовать разные глобальные конструкторы, например, ошибка внутри сборки не будет экземпляром `Error` в серверном процессе.
137
147
138
148
См. также: [Структура исходного кода](./structure.md)
Обратите внимание, что в параметре `externals` мы указываем белый список CSS файлов. Это связано с тем, что CSS, импортированный из зависимостей всё равно должен быть обработан Webpack. Если вы импортируете любые другие типы файлов, которые также полагаются на Webpack (например, `*.vue`, `*.sass`), вы должны их также добавить в белый список.
66
66
67
-
Другим типом модулей для добавления в белый список являются полифиллы, которые изменяют `global`, например `babel-polyfill`. Это связано с тем, что **код внутри серверной сборки имеет свой собственный объект `global`**. Поскольку это не будет нужно на сервере при использовании Node 7.6+, на самом деле проще просто импортировать его в клиентской точке входа.
67
+
Если вы используете `runInNewContext: 'once'` или `runInNewContext: true`, вам также требуется добавить в белый список являются полифиллы, которые изменяют `global`, например `babel-polyfill`. Это связано с тем, что при использовании режима нового контекста,**код внутри серверной сборки имеет свой собственный объект `global`**. Поскольку это не будет нужно на сервере при использовании Node 7.6+, на самом деле проще просто импортировать его в клиентской точке входа.
Когда `renderToString` вызывается в рендерере, он автоматически выполнит функцию, экспортируемую сборкой для создания экземпляра приложения (передавая `context` в качестве аргумента), а затем рендерит его.
51
51
52
-
---
53
-
54
-
### Опция `runInNewContext`
55
-
56
-
По умолчанию, для каждого рендера сборки будет создаваться новый контекст V8 и повторно исполняться вся сборка. Это имеет некоторые преимущества — например, нам не нужно будет беспокоиться о проблеме «синглетонов с состоянием», о которой упоминалось ранее. Однако, этот режим требует значительных затрат производительности, поскольку повторное выполнение всей сборки стоит дорого, особенно когда приложение становится большим.
57
-
58
-
В `vue-server-renderer >= 2.3.0`, эта опция по-прежнему установлена по умолчанию в `true` для обеспечения обратной совместимости, но рекомендуется использовать `runInNewContext: false` всегда, когда это возможно.
59
-
60
-
Обратите внимание, что при использовании `runInNewContext: false`, сборка всё ещё **выполняется в отдельном контексте `global`**, но только один раз. Это предотвращает случайное загрязнение объекта `global` серверного процесса. Отличие от поведения по умолчанию заключается в том, что он не создаёт **новых** контекстов для каждого вызова рендера.
52
+
Обратите внимание, что рекомендуется установить опцию `runInNewContext` в значение `false` или `'once'`. См. [справочник API](./api.md#runinnewcontext) для подробностей.
0 commit comments