Skip to content

Commit e648094

Browse files
authored
Improve tag scanning perf (#1860)
* fix: improve tag dir scanning cache (#1859) (cherry picked from commit 412e2eb) * chore: update htmljs-parser
1 parent 6963062 commit e648094

File tree

14 files changed

+78
-44
lines changed

14 files changed

+78
-44
lines changed

.changeset/ten-rocks-compete.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@marko/compiler": patch
3+
"marko": patch
4+
"@marko/translator-default": patch
5+
---
6+
7+
Improve tag scanning performance.

.changeset/tidy-boats-reflect.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@marko/compiler": patch
3+
"@marko/translator-default": patch
4+
"marko": patch
5+
---
6+
7+
Update htmljs-parser version.

package-lock.json

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/compiler/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"@marko/babel-utils": "^5.21.3",
1919
"complain": "^1.6.0",
2020
"he": "^1.2.0",
21-
"htmljs-parser": "^5.1.3",
21+
"htmljs-parser": "^5.1.5",
2222
"jsesc": "^3.0.2",
2323
"lasso-package-root": "^1.0.1",
2424
"property-handlers": "^1.1.1",

packages/compiler/src/taglib/finder/index.js

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ var resolveFrom = require("resolve-from").silent;
44
var taglibFS = require("../fs");
55
var taglibLoader = require("../loader");
66
var lassoPackageRoot = require("lasso-package-root");
7-
var scanTagsDir = require("../loader/scanTagsDir");
8-
var DependencyChain = require("../loader/DependencyChain");
9-
var hasOwnProperty = Object.prototype.hasOwnProperty;
10-
117
var findCache = {};
128
var excludedDirs = {};
139
var excludedPackages = {};
@@ -65,9 +61,6 @@ function find(dirname, registeredTaglibs) {
6561
var added = {};
6662

6763
var helper = {
68-
alreadyAdded: function (taglibId) {
69-
return hasOwnProperty.call(added, taglibId);
70-
},
7164
addTaglib: function (taglib) {
7265
if (added[taglib.id]) {
7366
return;
@@ -99,22 +92,10 @@ function find(dirname, registeredTaglibs) {
9992
}
10093

10194
if (!taglib || taglib.tagsDir === undefined) {
102-
let componentsPath = nodePath.join(curDirname, "components");
103-
104-
if (
105-
existsSync(componentsPath) &&
106-
!excludedDirs[componentsPath] &&
107-
!helper.alreadyAdded(componentsPath)
108-
) {
109-
let taglib = taglibLoader.createTaglib(componentsPath);
110-
scanTagsDir(
111-
componentsPath,
112-
nodePath.dirname(componentsPath),
113-
"components",
114-
taglib,
115-
new DependencyChain([componentsPath])
116-
);
117-
helper.addTaglib(taglib);
95+
const componentsPath = nodePath.join(curDirname, "components");
96+
97+
if (existsSync(componentsPath) && !excludedDirs[componentsPath]) {
98+
helper.addTaglib(taglibLoader.loadTaglibFromDir(curDirname));
11899
}
119100
}
120101
}

packages/compiler/src/taglib/loader/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ function loadTaglibFromFile(filePath) {
1212
return loaders.loadTaglibFromFile(filePath);
1313
}
1414

15+
function loadTaglibFromDir(filePath) {
16+
return loaders.loadTaglibFromDir(filePath);
17+
}
18+
1519
function clearCache() {
1620
cache.clear();
1721
}
@@ -34,4 +38,5 @@ exports.clearCache = clearCache;
3438
exports.createTaglib = createTaglib;
3539
exports.loadTaglibFromProps = loadTaglibFromProps;
3640
exports.loadTaglibFromFile = loadTaglibFromFile;
41+
exports.loadTaglibFromDir = loadTaglibFromDir;
3742
exports.loadTag = loadTag;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var nodePath = require("path");
2+
var types = require("./types");
3+
var cache = require("./cache");
4+
var DependencyChain = require("./DependencyChain");
5+
var scanTagsDir = require("./scanTagsDir");
6+
7+
var ok = require("assert").ok;
8+
9+
function loadFromDir(dir) {
10+
ok(dir, '"dir" is required');
11+
12+
var componentsPath = nodePath.join(dir, "components");
13+
var taglib = cache.get(componentsPath);
14+
15+
// Only load a taglib once by caching the loaded taglibs using the file
16+
// system file path as the key
17+
if (!taglib) {
18+
taglib = new types.Taglib(componentsPath);
19+
cache.put(componentsPath, taglib);
20+
scanTagsDir(
21+
componentsPath,
22+
dir,
23+
"components",
24+
taglib,
25+
new DependencyChain([componentsPath])
26+
);
27+
}
28+
29+
return taglib;
30+
}
31+
32+
module.exports = loadFromDir;

packages/compiler/src/taglib/loader/loaders.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ exports.loadTagFromProps = require("./loadTagFromProps");
1818
exports.loadTagFromFile = require("./loadTagFromFile");
1919
exports.loadTaglibFromProps = require("./loadTaglibFromProps");
2020
exports.loadTaglibFromFile = require("./loadTaglibFromFile");
21+
exports.loadTaglibFromDir = require("./loadTaglibFromDir");
2122
exports.loadAttributes = require("./loadAttributes");
2223
exports.isSupportedAttributeProperty = isSupportedAttributeProperty;
2324
exports.isSupportedTagProperty = isSupportedTagProperty;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<some-tag/>
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
Invalid tag file: packages/translator-default/test/fixtures/error-missing-entry-marko-tag-json/components/some-tag/marko-tag.json. Neither a renderer or a template was found for tag. {
2-
"@a": "string"
3-
}
1+
packages/translator-default/test/fixtures/error-missing-entry-marko-tag-json/template.marko(1,2): Unable to find entry point for custom tag <some-tag>.
2+
> 1 | <some-tag/>
3+
| ^^^^^^^^

0 commit comments

Comments
 (0)