Skip to content

Commit 027de10

Browse files
committed
refactor: cache
1 parent b713ef5 commit 027de10

File tree

6 files changed

+161
-172
lines changed

6 files changed

+161
-172
lines changed

dist/vue-create-api.esm.js

Lines changed: 52 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,61 @@ function parseEvents(events) {
126126
return parsedEvents;
127127
}
128128

129+
var instances = [];
130+
131+
function add(component) {
132+
var alreadyIn = false;
133+
for (var i = 0; i < instances.length; i += 1) {
134+
var ins = instances[i];
135+
if (ins === component) {
136+
alreadyIn = true;
137+
break;
138+
}
139+
}
140+
if (!alreadyIn) {
141+
instances.push(component);
142+
}
143+
}
144+
145+
function remove(component) {
146+
for (var i = 0; i < instances.length; i += 1) {
147+
var ins = instances[i];
148+
if (ins === component) {
149+
instances.splice(i, 1);
150+
return;
151+
}
152+
}
153+
}
154+
155+
function batchDestroy(filter) {
156+
var hasFilter = isFunction(filter);
157+
var instancesCopy = instances.slice();
158+
var _instances = hasFilter ? filter(instancesCopy) : instancesCopy;
159+
if (!isArray(_instances)) {
160+
return;
161+
}
162+
if (hasFilter) {
163+
_instances.forEach(function (ins) {
164+
if (ins && isFunction(ins.remove)) {
165+
ins.remove();
166+
remove(ins);
167+
}
168+
});
169+
} else {
170+
_instances.forEach(function (ins) {
171+
if (ins && isFunction(ins.remove)) {
172+
ins.remove();
173+
}
174+
});
175+
instances.length = 0;
176+
}
177+
}
178+
129179
var eventBeforeDestroy = 'hook:beforeDestroy';
130180

131181
function apiCreator(Component) {
132182
var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
133183
var single = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
134-
var cache = arguments[3];
135184

136185
var Vue = this;
137186
var singleMap = {};
@@ -305,7 +354,7 @@ function apiCreator(Component) {
305354
if (isInVueInstance) {
306355
ownerInstance.$on(eventBeforeDestroy, beforeDestroy);
307356
} else if (firstCreation) {
308-
cache.add(component);
357+
add(component);
309358
}
310359

311360
return component;
@@ -315,60 +364,6 @@ function apiCreator(Component) {
315364
return api;
316365
}
317366

318-
var cache = {
319-
instances: [],
320-
add: function add(component) {
321-
var alreadyIn = false;
322-
var instances = cache.instances;
323-
var len = instances.length;
324-
for (var i = 0; i < len; i += 1) {
325-
var ins = instances[i];
326-
if (ins === component) {
327-
alreadyIn = true;
328-
break;
329-
}
330-
}
331-
if (!alreadyIn) {
332-
instances.push(component);
333-
}
334-
},
335-
remove: function remove(component) {
336-
var instances = cache.instances;
337-
var len = instances.length;
338-
for (var i = 0; i < len; i += 1) {
339-
var ins = instances[i];
340-
if (ins === component) {
341-
instances.splice(i, 1);
342-
return;
343-
}
344-
}
345-
}
346-
};
347-
348-
function batchDestroy(filter) {
349-
var hasFilter = isFunction(filter);
350-
var instancesCopy = cache.instances.slice();
351-
var instances = hasFilter ? filter(instancesCopy) : instancesCopy;
352-
if (!isArray(instances)) {
353-
return;
354-
}
355-
if (hasFilter) {
356-
instances.forEach(function (ins) {
357-
if (ins && isFunction(ins.remove)) {
358-
ins.remove();
359-
cache.remove(ins);
360-
}
361-
});
362-
} else {
363-
instances.forEach(function (ins) {
364-
if (ins && isFunction(ins.remove)) {
365-
ins.remove();
366-
}
367-
});
368-
cache.instances.length = 0;
369-
}
370-
}
371-
372367
function install(Vue) {
373368
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
374369
var _options$componentPre = options.componentPrefix,
@@ -382,7 +377,7 @@ function install(Vue) {
382377
single = events;
383378
events = [];
384379
}
385-
var api = apiCreator.call(this, Component, events, single, cache);
380+
var api = apiCreator.call(this, Component, events, single);
386381
var createName = processComponentName(Component, {
387382
componentPrefix: componentPrefix,
388383
apiPrefix: apiPrefix

dist/vue-create-api.js

Lines changed: 52 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,61 @@
132132
return parsedEvents;
133133
}
134134

135+
var instances = [];
136+
137+
function add(component) {
138+
var alreadyIn = false;
139+
for (var i = 0; i < instances.length; i += 1) {
140+
var ins = instances[i];
141+
if (ins === component) {
142+
alreadyIn = true;
143+
break;
144+
}
145+
}
146+
if (!alreadyIn) {
147+
instances.push(component);
148+
}
149+
}
150+
151+
function remove(component) {
152+
for (var i = 0; i < instances.length; i += 1) {
153+
var ins = instances[i];
154+
if (ins === component) {
155+
instances.splice(i, 1);
156+
return;
157+
}
158+
}
159+
}
160+
161+
function batchDestroy(filter) {
162+
var hasFilter = isFunction(filter);
163+
var instancesCopy = instances.slice();
164+
var _instances = hasFilter ? filter(instancesCopy) : instancesCopy;
165+
if (!isArray(_instances)) {
166+
return;
167+
}
168+
if (hasFilter) {
169+
_instances.forEach(function (ins) {
170+
if (ins && isFunction(ins.remove)) {
171+
ins.remove();
172+
remove(ins);
173+
}
174+
});
175+
} else {
176+
_instances.forEach(function (ins) {
177+
if (ins && isFunction(ins.remove)) {
178+
ins.remove();
179+
}
180+
});
181+
instances.length = 0;
182+
}
183+
}
184+
135185
var eventBeforeDestroy = 'hook:beforeDestroy';
136186

137187
function apiCreator(Component) {
138188
var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
139189
var single = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
140-
var cache = arguments[3];
141190

142191
var Vue = this;
143192
var singleMap = {};
@@ -311,7 +360,7 @@
311360
if (isInVueInstance) {
312361
ownerInstance.$on(eventBeforeDestroy, beforeDestroy);
313362
} else if (firstCreation) {
314-
cache.add(component);
363+
add(component);
315364
}
316365

317366
return component;
@@ -321,60 +370,6 @@
321370
return api;
322371
}
323372

324-
var cache = {
325-
instances: [],
326-
add: function add(component) {
327-
var alreadyIn = false;
328-
var instances = cache.instances;
329-
var len = instances.length;
330-
for (var i = 0; i < len; i += 1) {
331-
var ins = instances[i];
332-
if (ins === component) {
333-
alreadyIn = true;
334-
break;
335-
}
336-
}
337-
if (!alreadyIn) {
338-
instances.push(component);
339-
}
340-
},
341-
remove: function remove(component) {
342-
var instances = cache.instances;
343-
var len = instances.length;
344-
for (var i = 0; i < len; i += 1) {
345-
var ins = instances[i];
346-
if (ins === component) {
347-
instances.splice(i, 1);
348-
return;
349-
}
350-
}
351-
}
352-
};
353-
354-
function batchDestroy(filter) {
355-
var hasFilter = isFunction(filter);
356-
var instancesCopy = cache.instances.slice();
357-
var instances = hasFilter ? filter(instancesCopy) : instancesCopy;
358-
if (!isArray(instances)) {
359-
return;
360-
}
361-
if (hasFilter) {
362-
instances.forEach(function (ins) {
363-
if (ins && isFunction(ins.remove)) {
364-
ins.remove();
365-
cache.remove(ins);
366-
}
367-
});
368-
} else {
369-
instances.forEach(function (ins) {
370-
if (ins && isFunction(ins.remove)) {
371-
ins.remove();
372-
}
373-
});
374-
cache.instances.length = 0;
375-
}
376-
}
377-
378373
function install(Vue) {
379374
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
380375
var _options$componentPre = options.componentPrefix,
@@ -388,7 +383,7 @@
388383
single = events;
389384
events = [];
390385
}
391-
var api = apiCreator.call(this, Component, events, single, cache);
386+
var api = apiCreator.call(this, Component, events, single);
392387
var createName = processComponentName(Component, {
393388
componentPrefix: componentPrefix,
394389
apiPrefix: apiPrefix

dist/vue-create-api.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/cache.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { isFunction, isArray } from './util'
2+
3+
const instances = []
4+
5+
export function add(component) {
6+
let alreadyIn = false
7+
for (let i = 0; i < instances.length; i += 1) {
8+
const ins = instances[i]
9+
if (ins === component) {
10+
alreadyIn = true
11+
break
12+
}
13+
}
14+
if (!alreadyIn) {
15+
instances.push(component)
16+
}
17+
}
18+
19+
export function remove(component) {
20+
for (let i = 0; i < instances.length; i += 1) {
21+
const ins = instances[i]
22+
if (ins === component) {
23+
instances.splice(i, 1)
24+
return
25+
}
26+
}
27+
}
28+
29+
export function batchDestroy(filter) {
30+
const hasFilter = isFunction(filter)
31+
const instancesCopy = instances.slice()
32+
const _instances = hasFilter ? filter(instancesCopy) : instancesCopy
33+
if (!isArray(_instances)) {
34+
return
35+
}
36+
if (hasFilter) {
37+
_instances.forEach(ins => {
38+
if (ins && isFunction(ins.remove)) {
39+
ins.remove()
40+
remove(ins)
41+
}
42+
})
43+
} else {
44+
_instances.forEach(ins => {
45+
if (ins && isFunction(ins.remove)) {
46+
ins.remove()
47+
}
48+
})
49+
instances.length = 0
50+
}
51+
}

src/creator.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import instantiateComponent from './instantiate'
22
import parseRenderData from './parse'
33
import { isFunction, isUndef, isStr } from './util'
4+
import * as cache from './cache'
45

56
const eventBeforeDestroy = 'hook:beforeDestroy'
67

7-
export default function apiCreator(Component, events = [], single = false, cache) {
8+
export default function apiCreator(Component, events = [], single = false) {
89
let Vue = this
910
let singleMap = {}
1011
const beforeHooks = []

0 commit comments

Comments
 (0)