wip(ssr): reduce reactivity overhead during ssr
This commit is contained in:
@@ -56,6 +56,10 @@ export function computed<T>(
|
||||
// expose effect so computed can be stopped
|
||||
effect: runner,
|
||||
get value() {
|
||||
if (__SSR__) {
|
||||
return getter()
|
||||
}
|
||||
|
||||
if (dirty) {
|
||||
value = runner()
|
||||
dirty = false
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { isObject, toRawType } from '@vue/shared'
|
||||
import { isObject, toRawType, EMPTY_OBJ } from '@vue/shared'
|
||||
import {
|
||||
mutableHandlers,
|
||||
readonlyHandlers,
|
||||
@@ -117,9 +117,15 @@ function createReactiveObject(
|
||||
if (!canObserve(target)) {
|
||||
return target
|
||||
}
|
||||
const handlers = collectionTypes.has(target.constructor)
|
||||
? collectionHandlers
|
||||
: baseHandlers
|
||||
const handlers = __SSR__
|
||||
? // disable reactivity in SSR.
|
||||
// NOTE: a potential caveat here is isReactive check may return different
|
||||
// values on nested values on client/server. This should be very rare but
|
||||
// we should keep an eye on this.
|
||||
EMPTY_OBJ
|
||||
: collectionTypes.has(target.constructor)
|
||||
? collectionHandlers
|
||||
: baseHandlers
|
||||
observed = new Proxy(target, handlers)
|
||||
toProxy.set(target, observed)
|
||||
toRaw.set(observed, target)
|
||||
|
||||
@@ -36,6 +36,14 @@ export function ref(raw?: unknown) {
|
||||
return raw
|
||||
}
|
||||
raw = convert(raw)
|
||||
|
||||
if (__SSR__) {
|
||||
return {
|
||||
_isRef: true,
|
||||
value: raw
|
||||
}
|
||||
}
|
||||
|
||||
const r = {
|
||||
_isRef: true,
|
||||
get value() {
|
||||
@@ -58,7 +66,7 @@ export function ref(raw?: unknown) {
|
||||
export function toRefs<T extends object>(
|
||||
object: T
|
||||
): { [K in keyof T]: Ref<T[K]> } {
|
||||
if (__DEV__ && !isReactive(object)) {
|
||||
if (__DEV__ && !__SSR__ && !isReactive(object)) {
|
||||
console.warn(`toRefs() expects a reactive object but received a plain one.`)
|
||||
}
|
||||
const ret: any = {}
|
||||
|
||||
Reference in New Issue
Block a user