Просмотр исходного кода

only create render function once

Evan You 10 лет назад
Родитель
Сommit
430fe64bb5
3 измененных файлов с 6 добавлено и 54 удалено
  1. 5 9
      src/server/create-renderer.js
  2. 0 44
      src/server/create-sync-renderer.js
  3. 1 1
      src/server/render.js

+ 5 - 9
src/server/create-renderer.js

@@ -1,19 +1,16 @@
 import RenderStream from './render-stream'
-import { render } from './render'
+import { createRenderFunction } from './render'
 
 export function createRenderer ({
   modules = [],
   directives = {},
   isUnaryTag = (() => false)
 } = {}) {
-  function _render (component, write, done) {
-    render(modules, directives, isUnaryTag)(component, write, done)
-  }
-
+  const render = createRenderFunction(modules, directives, isUnaryTag)
   return {
     renderToString (component) {
       let result = ''
-      _render(component, (str, next) => {
+      render(component, (str, next) => {
         result += str
         next && next()
       })
@@ -21,9 +18,8 @@ export function createRenderer ({
     },
     renderToStream (component) {
       return new RenderStream((write, done) => {
-        _render(component, write, done)
+        render(component, write, done)
       })
-    },
-    render: _render
+    }
   }
 }

+ 0 - 44
src/server/create-sync-renderer.js

@@ -1,44 +0,0 @@
-import { renderStartingTag } from './render-starting-tag'
-
-export function createSyncRenderer (modules, directives, isUnaryTag) {
-  function renderComponent (component, isRoot) {
-    component.$mount()
-    return renderNode(component._vnode, isRoot)
-  }
-
-  function renderNode (node, isRoot) {
-    if (node.componentOptions) {
-      node.data.hook.init(node)
-      return renderComponent(node.child, isRoot)
-    } else {
-      return node.tag
-        ? renderElement(node, isRoot)
-        : node.text
-    }
-  }
-
-  function renderElement (el, isRoot) {
-    if (isRoot) {
-      if (!el.data) el.data = {}
-      if (!el.data.attrs) el.data.attrs = {}
-      el.data.attrs['server-rendered'] = 'true'
-    }
-    const startTag = renderStartingTag(el, modules, directives)
-    const endTag = `</${el.tag}>`
-    if (isUnaryTag(el.tag)) {
-      return startTag
-    } else if (!el.children || !el.children.length) {
-      return startTag + endTag
-    } else {
-      let children = ''
-      for (let i = 0; i < el.children.length; i++) {
-        children += renderNode(el.children[i])
-      }
-      return startTag + children + endTag
-    }
-  }
-
-  return function renderToString (component) {
-    return renderComponent(component, true)
-  }
-}

+ 1 - 1
src/server/render.js

@@ -1,6 +1,6 @@
 import { renderStartingTag } from './render-starting-tag'
 
-export function render (modules, directives, isUnaryTag) {
+export function createRenderFunction (modules, directives, isUnaryTag) {
   function renderNode (node, write, next, isRoot) {
     if (node.componentOptions) {
       const { Ctor, propsData, listeners, parent, children } = node.componentOptions