Skip to content

Commit b7fc492

Browse files
authored
Merge pull request #7 from Alex-Sokolov/master
Доработки к 2.3.1
2 parents 90e8ff6 + 58dee17 commit b7fc492

File tree

3 files changed

+14
-12
lines changed

3 files changed

+14
-12
lines changed

ru/api.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,20 @@ const renderer = createBundleRenderer(serverBundle, { ... })
130130

131131
- 2.3.0+
132132
- используется только в `createBundleRenderer`
133+
- Ожидается: `boolean | 'once'` (`'once'` поддерживается только с версии 2.3.1+)
133134

134-
По умолчанию, рендерер сборки будет создавать новый контекст V8 для каждого рендеринга и повторно исполнять всю сборку. Это имеет некоторые преимущества — например, не нужно беспокоиться о проблеме «синглетона с состоянием», о которой упоминали ранее. Однако этот режим требует значительных затрат производительности, поскольку повторное выполнение сборки обходится дорого, особенно когда приложение становится большим.
135+
По умолчанию, рендерер сборки будет создавать новый контекст V8 для каждого рендеринга и повторно исполнять всю сборку. Это имеет некоторые преимущества — например, код приложения изолирован от процесса сервера и не нужно беспокоиться [о проблеме «синглетона с состоянием»](./structure.md#avoid-stateful-singletons), о которой упоминали ранее в руководстве. Однако этот режим требует значительных затрат производительности, поскольку повторное выполнение сборки обходится дорого, особенно когда приложение становится большим.
135136

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` в серверном процессе.
137147

138148
См. также: [Структура исходного кода](./structure.md)
139149

ru/build-config.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ const renderer = createBundleRenderer('/path/to/vue-ssr-server-bundle.json', {
6464

6565
Обратите внимание, что в параметре `externals` мы указываем белый список CSS файлов. Это связано с тем, что CSS, импортированный из зависимостей всё равно должен быть обработан Webpack. Если вы импортируете любые другие типы файлов, которые также полагаются на Webpack (например, `*.vue`, `*.sass`), вы должны их также добавить в белый список.
6666

67-
Другим типом модулей для добавления в белый список являются полифиллы, которые изменяют `global`, например `babel-polyfill`. Это связано с тем, что **код внутри серверной сборки имеет свой собственный объект `global`**. Поскольку это не будет нужно на сервере при использовании Node 7.6+, на самом деле проще просто импортировать его в клиентской точке входа.
67+
Если вы используете `runInNewContext: 'once'` или `runInNewContext: true`, вам также требуется добавить в белый список являются полифиллы, которые изменяют `global`, например `babel-polyfill`. Это связано с тем, что при использовании режима нового контекста, **код внутри серверной сборки имеет свой собственный объект `global`**. Поскольку это не будет нужно на сервере при использовании Node 7.6+, на самом деле проще просто импортировать его в клиентской точке входа.
6868

6969
## Конфигурация клиентской части
7070

ru/bundle-renderer.md

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,4 @@ server.get('*', (req, res) => {
4949

5050
Когда `renderToString` вызывается в рендерере, он автоматически выполнит функцию, экспортируемую сборкой для создания экземпляра приложения (передавая `context` в качестве аргумента), а затем рендерит его.
5151

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

Comments
 (0)