mirror of https://github.com/vuejs/core.git
chore(runtime-vapor): add benchmark build flag
This commit is contained in:
parent
eda2a43f07
commit
604c42db49
|
@ -1,6 +1,5 @@
|
||||||
<script setup lang="ts" vapor>
|
<script setup lang="ts" vapor>
|
||||||
import {
|
import {
|
||||||
ref,
|
|
||||||
shallowRef,
|
shallowRef,
|
||||||
triggerRef,
|
triggerRef,
|
||||||
type ShallowRef,
|
type ShallowRef,
|
||||||
|
@ -11,7 +10,7 @@ import { defer, wrap } from './profiling'
|
||||||
|
|
||||||
const isVapor = !!import.meta.env.IS_VAPOR
|
const isVapor = !!import.meta.env.IS_VAPOR
|
||||||
|
|
||||||
const selected = ref<number>()
|
const selected = shallowRef<number>()
|
||||||
const rows = shallowRef<
|
const rows = shallowRef<
|
||||||
{
|
{
|
||||||
id: number
|
id: number
|
||||||
|
@ -79,10 +78,32 @@ async function bench() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const isSelected = createSelector(selected)
|
const isSelected = createSelector(selected)
|
||||||
|
|
||||||
|
const globalThis = window
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<h1>Vue.js ({{ isVapor ? 'Vapor' : 'Virtual DOM' }}) Benchmark</h1>
|
<h1>Vue.js ({{ isVapor ? 'Vapor' : 'Virtual DOM' }}) Benchmark</h1>
|
||||||
|
|
||||||
|
<div style="display: flex; gap: 4px; margin-bottom: 4px">
|
||||||
|
<label>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
:value="globalThis.doProfile"
|
||||||
|
@change="globalThis.doProfile = $event.target.checked"
|
||||||
|
/>
|
||||||
|
Profiling
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
:value="globalThis.reactivity"
|
||||||
|
@change="globalThis.reactivity = $event.target.checked"
|
||||||
|
/>
|
||||||
|
Reactivity Cost
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
id="control"
|
id="control"
|
||||||
style="display: flex; flex-direction: column; width: fit-content; gap: 6px"
|
style="display: flex; flex-direction: column; width: fit-content; gap: 6px"
|
||||||
|
|
|
@ -2,14 +2,16 @@
|
||||||
/* eslint-disable no-restricted-syntax */
|
/* eslint-disable no-restricted-syntax */
|
||||||
/* eslint-disable no-restricted-globals */
|
/* eslint-disable no-restricted-globals */
|
||||||
|
|
||||||
declare module globalThis {
|
declare namespace globalThis {
|
||||||
let doProfile: boolean
|
let doProfile: boolean
|
||||||
|
let reactivity: boolean
|
||||||
let recordTime: boolean
|
let recordTime: boolean
|
||||||
let times: Record<string, number[]>
|
let times: Record<string, number[]>
|
||||||
}
|
}
|
||||||
|
|
||||||
globalThis.recordTime = true
|
globalThis.recordTime = true
|
||||||
globalThis.doProfile = false
|
globalThis.doProfile = false
|
||||||
|
globalThis.reactivity = false
|
||||||
|
|
||||||
export const defer = () => new Promise(r => requestIdleCallback(r))
|
export const defer = () => new Promise(r => requestIdleCallback(r))
|
||||||
|
|
||||||
|
@ -34,7 +36,18 @@ export function wrap(
|
||||||
fn(...args)
|
fn(...args)
|
||||||
|
|
||||||
await defer()
|
await defer()
|
||||||
const time = performance.now() - start
|
let time: number
|
||||||
|
if (globalThis.reactivity) {
|
||||||
|
time = performance.measure(
|
||||||
|
'flushJobs-measure',
|
||||||
|
'flushJobs-start',
|
||||||
|
'flushJobs-end',
|
||||||
|
).duration
|
||||||
|
performance.clearMarks()
|
||||||
|
performance.clearMeasures()
|
||||||
|
} else {
|
||||||
|
time = performance.now() - start
|
||||||
|
}
|
||||||
const prevTimes = times[id] || (times[id] = [])
|
const prevTimes = times[id] || (times[id] = [])
|
||||||
prevTimes.push(time)
|
prevTimes.push(time)
|
||||||
|
|
||||||
|
|
|
@ -88,9 +88,11 @@ if (!skipBench) {
|
||||||
async function buildLib() {
|
async function buildLib() {
|
||||||
console.info(colors.blue('Building lib...'))
|
console.info(colors.blue('Building lib...'))
|
||||||
|
|
||||||
|
/** @type {import('node:child_process').SpawnOptions} */
|
||||||
const options = {
|
const options = {
|
||||||
cwd: path.resolve(import.meta.dirname, '..'),
|
cwd: path.resolve(import.meta.dirname, '..'),
|
||||||
stdio: 'inherit',
|
stdio: 'inherit',
|
||||||
|
env: { ...process.env, BENCHMARK: 'true' },
|
||||||
}
|
}
|
||||||
const buildOptions = devBuild ? '-df' : '-pf'
|
const buildOptions = devBuild ? '-df' : '-pf'
|
||||||
const [{ ok }, { ok: ok2 }, { ok: ok3 }, { ok: ok4 }] = await Promise.all([
|
const [{ ok }, { ok: ok2 }, { ok: ok3 }, { ok: ok4 }] = await Promise.all([
|
||||||
|
@ -130,7 +132,7 @@ async function buildApp(isVapor) {
|
||||||
colors.blue(`\nBuilding ${isVapor ? 'Vapor' : 'Virtual DOM'} app...\n`),
|
colors.blue(`\nBuilding ${isVapor ? 'Vapor' : 'Virtual DOM'} app...\n`),
|
||||||
)
|
)
|
||||||
|
|
||||||
process.env.NODE_ENV = 'production'
|
if (!devBuild) process.env.NODE_ENV = 'production'
|
||||||
const CompilerSFC = await import(
|
const CompilerSFC = await import(
|
||||||
'../packages/compiler-sfc/dist/compiler-sfc.cjs.js'
|
'../packages/compiler-sfc/dist/compiler-sfc.cjs.js'
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,6 +9,7 @@ declare var __CJS__: boolean
|
||||||
declare var __SSR__: boolean
|
declare var __SSR__: boolean
|
||||||
declare var __VERSION__: string
|
declare var __VERSION__: string
|
||||||
declare var __COMPAT__: boolean
|
declare var __COMPAT__: boolean
|
||||||
|
declare var __BENCHMARK__: boolean
|
||||||
|
|
||||||
// Feature flags
|
// Feature flags
|
||||||
declare var __FEATURE_OPTIONS_API__: boolean
|
declare var __FEATURE_OPTIONS_API__: boolean
|
||||||
|
|
|
@ -139,6 +139,7 @@ export function flushPostFlushCbs(): void {
|
||||||
|
|
||||||
// TODO: dev mode and checkRecursiveUpdates
|
// TODO: dev mode and checkRecursiveUpdates
|
||||||
function flushJobs() {
|
function flushJobs() {
|
||||||
|
if (__BENCHMARK__) performance.mark('flushJobs-start')
|
||||||
isFlushPending = false
|
isFlushPending = false
|
||||||
isFlushing = true
|
isFlushing = true
|
||||||
|
|
||||||
|
@ -169,6 +170,7 @@ function flushJobs() {
|
||||||
if (queue.length || pendingPostFlushCbs.length) {
|
if (queue.length || pendingPostFlushCbs.length) {
|
||||||
flushJobs()
|
flushJobs()
|
||||||
}
|
}
|
||||||
|
if (__BENCHMARK__) performance.mark('flushJobs-end')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ export function DevPlugin({ browser = false } = {}) {
|
||||||
__NODE_JS__: String(false),
|
__NODE_JS__: String(false),
|
||||||
// need SSR-specific branches?
|
// need SSR-specific branches?
|
||||||
__SSR__: String(false),
|
__SSR__: String(false),
|
||||||
|
__BENCHMARK__: 'false',
|
||||||
|
|
||||||
// 2.x compat build
|
// 2.x compat build
|
||||||
__COMPAT__: String(false),
|
__COMPAT__: String(false),
|
||||||
|
|
|
@ -218,6 +218,7 @@ function createConfig(format, output, plugins = []) {
|
||||||
__CJS__: String(isCJSBuild),
|
__CJS__: String(isCJSBuild),
|
||||||
// need SSR-specific branches?
|
// need SSR-specific branches?
|
||||||
__SSR__: String(!isGlobalBuild),
|
__SSR__: String(!isGlobalBuild),
|
||||||
|
__BENCHMARK__: process.env.BENCHMARK || 'false',
|
||||||
|
|
||||||
// 2.x compat build
|
// 2.x compat build
|
||||||
__COMPAT__: String(isCompatBuild),
|
__COMPAT__: String(isCompatBuild),
|
||||||
|
|
|
@ -151,6 +151,7 @@ for (const target of targets) {
|
||||||
__ESM_BROWSER__: String(format.includes('esm-browser')),
|
__ESM_BROWSER__: String(format.includes('esm-browser')),
|
||||||
__CJS__: String(format === 'cjs'),
|
__CJS__: String(format === 'cjs'),
|
||||||
__SSR__: String(format !== 'global'),
|
__SSR__: String(format !== 'global'),
|
||||||
|
__BENCHMARK__: process.env.BENCHMARK || 'false',
|
||||||
__COMPAT__: String(target === 'vue-compat'),
|
__COMPAT__: String(target === 'vue-compat'),
|
||||||
__FEATURE_SUSPENSE__: `true`,
|
__FEATURE_SUSPENSE__: `true`,
|
||||||
__FEATURE_OPTIONS_API__: `true`,
|
__FEATURE_OPTIONS_API__: `true`,
|
||||||
|
|
|
@ -12,6 +12,7 @@ export default defineConfig({
|
||||||
__ESM_BROWSER__: false,
|
__ESM_BROWSER__: false,
|
||||||
__CJS__: true,
|
__CJS__: true,
|
||||||
__SSR__: true,
|
__SSR__: true,
|
||||||
|
__BENCHMARK__: false,
|
||||||
__FEATURE_OPTIONS_API__: true,
|
__FEATURE_OPTIONS_API__: true,
|
||||||
__FEATURE_SUSPENSE__: true,
|
__FEATURE_SUSPENSE__: true,
|
||||||
__FEATURE_PROD_DEVTOOLS__: false,
|
__FEATURE_PROD_DEVTOOLS__: false,
|
||||||
|
|
Loading…
Reference in New Issue