mirror of https://github.com/vuejs/vue.git
				
				
				
			optimize loops
This commit is contained in:
		
							parent
							
								
									80b4c4f581
								
							
						
					
					
						commit
						51b77b50a4
					
				| 
						 | 
				
			
			@ -35,7 +35,7 @@ p._addChild = function (key, child) {
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
p._addSub = function (sub) {
 | 
			
		||||
  this._subs.push(sub)
 | 
			
		||||
  this._subs.unshift(sub)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,8 @@ p._removeSub = function (sub) {
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
p._notify = function () {
 | 
			
		||||
  for (var i = 0, l = this._subs.length; i < l; i++) {
 | 
			
		||||
  var i = this._subs.length
 | 
			
		||||
  while (i--) {
 | 
			
		||||
    this._subs[i].update()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ var _ = require('./util')
 | 
			
		|||
 | 
			
		||||
function Emitter (ctx) {
 | 
			
		||||
  this._cancelled = false
 | 
			
		||||
  this._ctx = ctx || this
 | 
			
		||||
  this._ctx = ctx || null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var p = Emitter.prototype
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ var p = Emitter.prototype
 | 
			
		|||
p.on = function (event, fn) {
 | 
			
		||||
  this._cbs = this._cbs || {}
 | 
			
		||||
  ;(this._cbs[event] || (this._cbs[event] = []))
 | 
			
		||||
    .push(fn)
 | 
			
		||||
    .unshift(fn)
 | 
			
		||||
  return this
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,8 @@ p.off = function (event, fn) {
 | 
			
		|||
  }
 | 
			
		||||
  // remove specific handler
 | 
			
		||||
  var cb
 | 
			
		||||
  for (var i = 0; i < callbacks.length; i++) {
 | 
			
		||||
  var i = callbacks.length
 | 
			
		||||
  while (i--) {
 | 
			
		||||
    cb = callbacks[i]
 | 
			
		||||
    if (cb === fn || cb.fn === fn) {
 | 
			
		||||
      callbacks.splice(i, 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -99,8 +100,10 @@ p.emit = function (event, a, b, c, d) {
 | 
			
		|||
  var callbacks = this._cbs[event]
 | 
			
		||||
  if (callbacks) {
 | 
			
		||||
    callbacks = _.toArray(callbacks)
 | 
			
		||||
    for (var i = 0, l = callbacks.length; i < l; i++) {
 | 
			
		||||
      callbacks[i].call(this._ctx, a, b, c, d)
 | 
			
		||||
    var i = callbacks.length
 | 
			
		||||
    var ctx = this._ctx
 | 
			
		||||
    while (i--) {
 | 
			
		||||
      callbacks[i].call(ctx, a, b, c, d)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return this
 | 
			
		||||
| 
						 | 
				
			
			@ -121,14 +124,14 @@ p.applyEmit = function (event) {
 | 
			
		|||
  if (callbacks) {
 | 
			
		||||
    // avoid leaking arguments:
 | 
			
		||||
    // http://jsperf.com/closure-with-arguments
 | 
			
		||||
    var i
 | 
			
		||||
    var l = arguments.length
 | 
			
		||||
    var args = new Array(l - 1)
 | 
			
		||||
    for (i = 1; i < l; i++) {
 | 
			
		||||
      args[i - 1] = arguments[i]
 | 
			
		||||
    var i = arguments.length - 1
 | 
			
		||||
    var args = new Array(i)
 | 
			
		||||
    while (i--) {
 | 
			
		||||
      args[i] = arguments[i + 1]
 | 
			
		||||
    }
 | 
			
		||||
    callbacks = _.toArray(callbacks)
 | 
			
		||||
    for (i = 0, l = callbacks.length; i < l; i++) {
 | 
			
		||||
    i = callbacks.length
 | 
			
		||||
    while (i--) {
 | 
			
		||||
      if (callbacks[i].apply(this._ctx, args) === false) {
 | 
			
		||||
        this._cancelled = true
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,14 +22,15 @@ exports._objToArray = function (obj) {
 | 
			
		|||
    )
 | 
			
		||||
    return
 | 
			
		||||
  }
 | 
			
		||||
  var res = []
 | 
			
		||||
  var keys = Object.keys(obj)
 | 
			
		||||
  for (var i = 0, l = keys.length, key; i < l; i++) {
 | 
			
		||||
  var i = keys.length
 | 
			
		||||
  var res = new Array(i)
 | 
			
		||||
  while (i--) {
 | 
			
		||||
    key = keys[i]
 | 
			
		||||
    res.push({
 | 
			
		||||
    res[i] = {
 | 
			
		||||
      key: key,
 | 
			
		||||
      value: obj[key]
 | 
			
		||||
    })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  res._converted = true
 | 
			
		||||
  return res
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -210,7 +210,7 @@ exports._checkPriorityDirs = function (node) {
 | 
			
		|||
  }
 | 
			
		||||
  var value, dir
 | 
			
		||||
  /* jshint boss: true */
 | 
			
		||||
  for (var i = 0, l = priorityDirs.length; i < l; i++) {
 | 
			
		||||
  for (var i = 0; i < 3; i++) {
 | 
			
		||||
    dir = priorityDirs[i]
 | 
			
		||||
    if (value = _.attr(node, dir)) {
 | 
			
		||||
      this._bindDirective(dir, value, node)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,9 +21,9 @@ var arrayAugmentations = Object.create(Array.prototype)
 | 
			
		|||
  function mutator () {
 | 
			
		||||
    // avoid leaking arguments:
 | 
			
		||||
    // http://jsperf.com/closure-with-arguments
 | 
			
		||||
    var l = arguments.length
 | 
			
		||||
    var args = new Array(l)
 | 
			
		||||
    for (var i = 0; i < l; i++) {
 | 
			
		||||
    var i = arguments.length
 | 
			
		||||
    var args = new Array(i)
 | 
			
		||||
    while (i--) {
 | 
			
		||||
      args[i] = arguments[i]
 | 
			
		||||
    }
 | 
			
		||||
    var result = original.apply(this, args)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -132,7 +132,8 @@ p.walk = function (obj) {
 | 
			
		|||
 | 
			
		||||
p.link = function (items, index) {
 | 
			
		||||
  index = index || 0
 | 
			
		||||
  for (var i = 0, l = items.length; i < l; i++) {
 | 
			
		||||
  var i = items.length
 | 
			
		||||
  while (i--) {
 | 
			
		||||
    this.observe(i + index, items[i])
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -144,7 +145,8 @@ p.link = function (items, index) {
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
p.unlink = function (items) {
 | 
			
		||||
  for (var i = 0, l = items.length; i < l; i++) {
 | 
			
		||||
  var i = items.length
 | 
			
		||||
  while (i--) {
 | 
			
		||||
    this.unobserve(items[i])
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +194,8 @@ p.unobserve = function (val) {
 | 
			
		|||
  if (val && val.$observer) {
 | 
			
		||||
    val.$observer.parentsHash[this.id] = null
 | 
			
		||||
    var parents = val.$observer.parents
 | 
			
		||||
    for (var i = 0, l = parents.length; i < l; i++) {
 | 
			
		||||
    var i = parents.length
 | 
			
		||||
    while (i--) {
 | 
			
		||||
      if (parents[i].ob === this) {
 | 
			
		||||
        parents.splice(i, 1)
 | 
			
		||||
        break
 | 
			
		||||
| 
						 | 
				
			
			@ -243,9 +246,12 @@ p.convert = function (key, val) {
 | 
			
		|||
p.propagate = function (event, path, val, mutation) {
 | 
			
		||||
  this.emit(event, path, val, mutation)
 | 
			
		||||
  var parents = this.parents
 | 
			
		||||
  if (!parents) {
 | 
			
		||||
    return
 | 
			
		||||
  }
 | 
			
		||||
  var parent, key, parentPath
 | 
			
		||||
  if (!parents) return
 | 
			
		||||
  for (var i = 0, l = parents.length; i < l; i++) {
 | 
			
		||||
  var i = parents.length
 | 
			
		||||
  while (i--) {
 | 
			
		||||
    parent = parents[i]
 | 
			
		||||
    key = parent.key
 | 
			
		||||
    parentPath = path
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,10 +69,10 @@ exports.bind = function (fn, ctx) {
 | 
			
		|||
 | 
			
		||||
exports.toArray = function (list, start) {
 | 
			
		||||
  start = start || 0
 | 
			
		||||
  var l = list.length
 | 
			
		||||
  var ret = new Array(l - start)
 | 
			
		||||
  for (var i = start; i < l; i++) {
 | 
			
		||||
    ret[i - start] = list[i]
 | 
			
		||||
  var i = list.length - start
 | 
			
		||||
  var ret = new Array(i)
 | 
			
		||||
  while (i--) {
 | 
			
		||||
    ret[i] = list[i + start]
 | 
			
		||||
  }
 | 
			
		||||
  return ret
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue