Commit Graph

581 Commits

Author SHA1 Message Date
Evan You
629ee75588 perf: prevent renderer hot functions being inlined by minifiers
Terser will aggressively inline hot functions in renderer.ts in order
to reduce "function" declarations, but the inlining leads to performance
overhead (small, but noticeable in benchmarks).

Since we cannot control user's minifier options, we have to avoid the
deopt in the source code by using arrow functions in hot paths.
2020-02-14 03:27:27 -05:00
Evan You
6df2aca070 refactor(types): move shapeFlags to shared 2020-02-14 01:36:42 -05:00
Evan You
167f8241bd refactor(ssr): make hydration logic tree-shakeable 2020-02-14 01:30:08 -05:00
Evan You
112d8f7d86 refactor: use explicit exports for runtime-core 2020-02-14 00:13:54 -05:00
Evan You
42d80b5888 wip(ssr): component hydration 2020-02-13 23:31:03 -05:00
Evan You
9aaef60ad2 wip(ssr): adjust event hydration flag 2020-02-13 18:28:40 -05:00
Evan You
6b505dcd23 wip(ssr): basic element hydration 2020-02-13 17:47:00 -05:00
Evan You
35d91f4e18 fix(runtime-core): handle component updates with only class/style bindings 2020-02-13 17:27:52 -05:00
Evan You
c6a9787941 fix(types): ensure correct oldValue typing based on lazy option
close #719
2020-02-13 12:09:13 -05:00
Evan You
1389d7b88c refactor(compiler-core): use more concise marker for compiled slots 2020-02-12 13:45:35 -05:00
Evan You
175f8aae8d feat(compiler): mark hoisted trees with patchFlag 2020-02-12 13:31:29 -05:00
Evan You
27913e661a feat(compiler-dom/runtime-dom): stringify eligible static trees 2020-02-12 11:56:42 -05:00
Evan You
e3988b40d8 refactor(compiler-core): use dedicated node type for element codegen
Previously codegen node for elements and components used raw expressions,
which leads to multiple permutations of AST shapes based on whether the
node is a block or has directives. The complexity is spread across the
entire compiler and occurs whenever a transform needs to deal with
element codegen nodes.

This refactor centralizes the handling of all possible permutations
into the codegen phase, so that all elements/components will have a
consistent node type throughout the transform phase.

The refactor is split into two commits (with test updates in a separate
one) so changes can be easier to inspect.
2020-02-11 18:40:42 -05:00
Yang Mingshan
fe9da2d0e4
fix(runtime-core/scheduler): invalidate job (#717) 2020-02-11 07:30:25 -05:00
Evan You
12fcf9ab95 fix(compiler): fix v-for fragment openBlock argument 2020-02-10 18:19:49 -05:00
Evan You
47e984d31f refactor(compiler): provide _ctx and _cache via arguments 2020-02-10 17:29:12 -05:00
Evan You
cfadb98011 fix(runtime-core): rework vnode hooks handling
- peroperly support directive on components (e.g. <foo v-show="x">)
- consistently invoke raw vnode hooks on component vnodes (fix #684)
2020-02-10 13:15:36 -05:00
Evan You
8a87074df0 fix(runtime-core/scheduler): avoid duplicate updates of child component 2020-02-10 13:09:15 -05:00
Evan You
778f3a5e88 fix(runtime-core): should not return early on text patchFlag
fix vnode updated hook on elements with dynamic text children
2020-02-10 12:06:36 -05:00
Evan You
e308ad99e9 refactor: ensure setup context.emit always point to intenral emit 2020-02-09 21:47:16 -05:00
Evan You
4bc4cb970f fix: remove effect from public API
close #712
2020-02-09 21:43:54 -05:00
jods
21944c4a42
feat(runtime-core/reactivity): expose shallowReactive (#711) 2020-02-09 21:42:34 -05:00
Evan You
0f67aa7da5 fix(runtime-core): fix ShapeFlags tree shaking 2020-02-07 17:18:12 -05:00
Evan You
5b43764eac fix(runtime-core): fix keep-alive tree-shaking 2020-02-07 17:00:39 -05:00
Evan You
b7a74d0439 wip(ssr): ssr slot vnode fallback 2020-02-07 01:06:51 -05:00
Evan You
ee5ed73361 wip(ssr): basic components 2020-02-05 23:07:23 -05:00
Eduardo San Martin Morote
5742a0b826
fix(runtime-core/watch): trigger watcher with undefined as initial value (#687)
Fix #683
2020-02-04 09:59:04 -05:00
Evan You
bd9b690a51 chore: rmeove unused export 2020-01-31 11:07:10 -05:00
Evan You
c02e7bc7d6 wip(ssr): should apply app context when rendering app instance 2020-01-30 12:20:23 -05:00
Evan You
eaf414f063 test(ssr): test rendering vnode elements 2020-01-29 17:36:06 -05:00
Evan You
8cdaf28515 test(ssr): test for rendering components 2020-01-29 16:46:18 -05:00
Evan You
6e06810add test(ssr): tests for utils and props rendering 2020-01-29 15:10:45 -05:00
Evan You
bc07e95ca8 fix(ssr): avoid hard-coded ssr checks in cjs builds 2020-01-29 09:49:17 -05:00
Evan You
6b1ce00621 wip(ssr): renderer support for optimized and manual slots 2020-01-28 22:58:02 -05:00
Evan You
a7b0954f14 wip(ssr): move ssr only utils to conditional export 2020-01-28 22:14:43 -05:00
Evan You
6f43c4b516 wip(ssr): vdom serialization 2020-01-28 18:48:27 -05:00
Evan You
27fbfbdb8b fix(runtime-core): render context set should not unwrap reactive values 2020-01-27 18:05:30 -05:00
Evan You
012bc5df9d wip(ssr): restructure 2020-01-27 17:23:42 -05:00
Evan You
d293876c34 release: v3.0.0-alpha.4 2020-01-27 16:20:00 -05:00
Evan You
6b10f0cd1d refactor: remove implicit reactive() call on renderContext
reference: https://github.com/vuejs/rfcs/issues/121

BREAKING CHANGE: object returned from `setup()` are no longer implicitly
passed to `reactive()`.

  The renderContext is the object returned by `setup()` (or a new object
  if no setup() is present). Before this change, it was implicitly passed
  to `reactive()` for ref unwrapping. But this has the side effect of
  unnecessary deep reactive conversion on properties that should not be
  made reactive (e.g. computed return values and injected non-reactive
  objects), and can lead to performance issues.

  This change removes the `reactive()` call and instead performs a
  shallow ref unwrapping at the render proxy level. The breaking part is
  when the user returns an object with a plain property from `setup()`,
  e.g. `return { count: 0 }`, this property will no longer trigger
  updates when mutated by a in-template event handler. Instead, explicit
  refs are required.

  This also means that any objects not explicitly made reactive in
  `setup()` will remain non-reactive. This can be desirable when
  exposing heavy external stateful objects on `this`.
2020-01-27 16:00:18 -05:00
Evan You
2884831065 fix(runtime-core): instance should not expose non-declared props 2020-01-27 16:00:18 -05:00
Evan You
066ba82c7f wip(ssr): escape helpers 2020-01-27 16:00:18 -05:00
Evan You
297282a812 perf(ssr): avoid unnecessary async overhead 2020-01-27 16:00:17 -05:00
Evan You
25a0d4a65f wip(ssr): reduce reactivity overhead during ssr 2020-01-27 16:00:17 -05:00
Evan You
cee36ad028 wip(ssr): render real components 2020-01-27 16:00:17 -05:00
Evan You
da25517377 wip(ssr): initial work on server-renderer 2020-01-27 16:00:17 -05:00
Evan You
c07751fd36 refactor: adjust createApp related API signatures
BREAKING CHANGE: `createApp` API has been adjusted.

  - `createApp()` now accepts the root component, and optionally a props
  object to pass to the root component.
  - `app.mount()` now accepts a single argument (the root container)
  - `app.unmount()` no longer requires arguments.

  New behavior looks like the following:

  ``` js
  const app = createApp(RootComponent)
  app.mount('#app')
  app.unmount()
  ```
2020-01-27 16:00:17 -05:00
Evan You
2837ce8428 fix(v-model/emit): update:camelCase events should trigger kebab case equivalent
close #656
2020-01-26 14:14:03 -05:00
Evan You
b41677bf42 release: v3.0.0-alpha.3 2020-01-22 11:10:30 -05:00
likui
ec63623fe8 fix: Suspense should include into dynamic children (#653)
fix #649
2020-01-22 10:45:27 -05:00