diff --git a/server/fixture/markdown/markdown.html b/server/markdown/fixture/markdown.html
similarity index 100%
rename from server/fixture/markdown/markdown.html
rename to server/markdown/fixture/markdown.html
diff --git a/server/fixture/markdown/markdown.md b/server/markdown/fixture/markdown.md
similarity index 100%
rename from server/fixture/markdown/markdown.md
rename to server/markdown/fixture/markdown.md
diff --git a/server/markdown.js b/server/markdown/index.js
similarity index 81%
rename from server/markdown.js
rename to server/markdown/index.js
index 5982701f..1f913ccd 100644
--- a/server/markdown.js
+++ b/server/markdown/index.js
@@ -1,7 +1,7 @@
'use strict';
-const DIR_ROOT = __dirname + '/../';
const fs = require('fs');
+const {join} = require('path');
const {
callbackify,
promisify,
@@ -9,11 +9,19 @@ const {
const pullout = require('pullout');
const ponse = require('ponse');
-const markdown = require('markdown-it')();
+const threadIt = require('thread-it');
const readFile = promisify(fs.readFile);
+const parse = threadIt(join(__dirname, 'worker'));
-const root = require('./root');
+const root = require('../root');
+
+threadIt.init();
+
+// warm up
+parse('');
+
+const DIR_ROOT = __dirname + '/../../';
module.exports = callbackify(async (name, rootDir, request) => {
check(name, request);
@@ -48,18 +56,9 @@ async function onGET(request, name, root) {
async function onPUT(request) {
const data = await pullout(request);
-
return parse(data);
}
-const parse = promisify((data, callback) => {
- process.nextTick(() => {
- const md = markdown.render(data);
-
- callback(null, md);
- });
-});
-
function check(name, request) {
if (typeof name !== 'string')
throw Error('name should be string!');
diff --git a/server/markdown.spec.js b/server/markdown/index.spec.js
similarity index 94%
rename from server/markdown.spec.js
rename to server/markdown/index.spec.js
index 05510a65..3e6859d1 100644
--- a/server/markdown.spec.js
+++ b/server/markdown/index.spec.js
@@ -7,11 +7,11 @@ const {promisify} = require('util');
const tryToCatch = require('try-to-catch');
-const markdown = require('./markdown');
+const markdown = require('.');
const _markdown = promisify(markdown);
-const fixtureDir = path.join(__dirname, 'fixture', 'markdown');
-const cloudcmd = require('..');
+const fixtureDir = path.join(__dirname, 'fixture');
+const cloudcmd = require('../..');
const config = {
auth: false,
};
diff --git a/server/markdown/worker.js b/server/markdown/worker.js
new file mode 100644
index 00000000..ae2a95fd
--- /dev/null
+++ b/server/markdown/worker.js
@@ -0,0 +1,4 @@
+'use strict';
+
+const markdownIt = require('markdown-it')();
+module.exports = (a) => markdownIt.render(a);