From 2b635d6783a5b22d64f2795239bb7b417117d1aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=93=E5=8F=91=E5=8F=97=E9=95=BF=E7=94=9F?= Date: Mon, 1 Jul 2019 00:12:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E9=9B=85=E5=86=99=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E4=B8=8E=E5=BE=AA=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _config.yml | 7 +- images/JavaScript/Promise.all时间.png | Bin 0 -> 13685 bytes images/JavaScript/await时间.png | Bin 0 -> 13764 bytes package.json | 5 +- scripts/filter.js | 69 -------- source/_posts/JavaScript/优雅写异步与循环.md | 82 ++++++++++ yarn.lock | 157 ++----------------- 7 files changed, 99 insertions(+), 221 deletions(-) create mode 100644 images/JavaScript/Promise.all时间.png create mode 100644 images/JavaScript/await时间.png create mode 100644 source/_posts/JavaScript/优雅写异步与循环.md diff --git a/_config.yml b/_config.yml index d2f3e5a..c7cbb3f 100644 --- a/_config.yml +++ b/_config.yml @@ -126,5 +126,8 @@ jsonContent: categories: true tags: true -# 是否同步文章内容以及分词结果 -save_content: false \ No newline at end of file +# hexo-generator-search +search: + path: search.xml + field: post + content: true diff --git a/images/JavaScript/Promise.all时间.png b/images/JavaScript/Promise.all时间.png new file mode 100644 index 0000000000000000000000000000000000000000..ff04a3e5ee8821b8943e55714be52b84c90d0af2 GIT binary patch literal 13685 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]*>/g hexo.extend.filter.register('before_post_render', function(article){ // article.raw 是原始的文件内容 // article.content 是处理过代码块语法高亮的内容 @@ -49,32 +8,4 @@ hexo.extend.filter.register('before_post_render', function(article){ article.content = article.content.replace(mdImageRegex, `](${hexo.config.picture_cdn}`) } return article -}) - -hexo.extend.filter.register('after_post_render', function(article){ - if(!mongooseModels || article.pageid) return article - let textContent = article.content.replace(tagRegex, '') - const contentHash = crypto.createHash('sha1') - .update(textContent) - .digest('hex') - let articleKeys = segment.doSegment(textContent, { - simple: true, // 不返回词性 - stripPunctuation: true // 去除标点符号 - }) - const articleEntity = new mongooseModels.articleModel({ - title: article.title, - path: article.path, - create_date: article.date._i, - content: textContent, - content_hash: contentHash - }) - articleEntity.save(function(err, savedArticle){ - if(err) console.error(err) - const articleKeysEntity = new mongooseModels.articleKeysModel({ - article_id: savedArticle._id, - keys: articleKeys, - }) - articleKeysEntity.save() - }) - return article; }) \ No newline at end of file diff --git a/source/_posts/JavaScript/优雅写异步与循环.md b/source/_posts/JavaScript/优雅写异步与循环.md new file mode 100644 index 0000000..0f642ef --- /dev/null +++ b/source/_posts/JavaScript/优雅写异步与循环.md @@ -0,0 +1,82 @@ +--- +title: 优雅写异步与循环 +date: 2019-06-29 23:39:46 +tags: + - JavaScript +categories: + - JavaScript +--- + +JS当中的循环都是非异步的 +包括但不限于 +1. Array.prototype中的`forEach` +2. `for ... in` 语法 +3. `for ... of` 语法 + + +所以如果要在循环内的异步全部完成后做某些事情 +例如 +```javascript +// 这里我只是简单构造了一个异步 +// 实际运用当中譬如数据库查询、文件读写等操作, 通常都是异步的 +function show(num) { + Promise.resolve(num).then(console.log) +} +const arr = [100, 200, 300] + +console.log('start') +arr.forEach(show) +console.log('end') +``` +上面的写法根据事件队列的机制, 显然会先输出end, 再输出数组元素的值 +当然我们可以在Promise的resolve函数当中判断是否到达了数组最后一个元素, 把输出end的操作写进resolve函数里面 +显然这不够优雅, 而且很多时候也不方便这样做 + +实现方式 +#### Promise.all + +```javascript +const arr = [100, 200, 300] + +console.log('start') +console.time('promise all in') +Promise.all(arr.map(show)).then(() => { + console.timeEnd('promise all in') + console.log('end') +}) +``` +为了比较执行性能的差异, 加了一个计时 ( Nodejs环境运行 ) +![Promise.all时间](/images/JavaScript/Promise.all时间.png) + +#### async/await +```javascript +const arr = [100, 200, 300]; + +(async function() { + console.log('start') + console.time('await all in') + for await (let i of arr.map(show)) {} + console.timeEnd('await all in') + console.log('end') +})() +``` +![await时间](/images/JavaScript/await时间.png) +由于await必须用在async修饰的函数当中, 所以包装了一层 +实际执行时间与Promise.all差不多 + +### One by one +这种方式效率最低,有点类似于同步语言中的循环,一个接着一个执行,耗时自然也就是所有异步方法耗时的总和。对资源的消耗最小。 + +```javascript +const arr = [100, 200, 300]; + +(async function() { + console.log('start') + console.time('await one by one') + for (let item of arr) { + await show(item) + } + console.timeEnd('await one by one') + console.log('end') +})() +``` \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 3ca8ba2..7322cef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -258,13 +258,6 @@ async-settle@^1.0.0: dependencies: async-done "^1.2.2" -async@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" - async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" @@ -314,11 +307,6 @@ binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" -bluebird@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== - bluebird@^3.2.2, bluebird@^3.4.0, bluebird@^3.5.1: version "3.5.4" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" @@ -361,11 +349,6 @@ browser-fingerprint@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/browser-fingerprint/-/browser-fingerprint-0.0.1.tgz#8df3cdca25bf7d5b3542d61545d730053fce604a" -bson@^1.1.1, bson@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.1.tgz#4330f5e99104c4e751e7351859e2d408279f2f13" - integrity sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg== - buffer-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" @@ -741,13 +724,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - debug@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -1538,6 +1514,14 @@ hexo-generator-json-content@^4.1.3: keyword-extractor latest moment latest +hexo-generator-search@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/hexo-generator-search/-/hexo-generator-search-2.4.0.tgz#f5abbbbbe35299f52c2554bb89845d0a4fab6c9b" + integrity sha512-470q6Cpu6xHIPMXN+rQjCQkn/ii4e8XJRBXCmKs+B1jGQNrT7K3geqfyd5pqGiGi6bh5yY+mNqwGw5r2sZZtzA== + dependencies: + nunjucks "^3.0.1" + utils-merge "^1.0.0" + hexo-generator-sitemap@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/hexo-generator-sitemap/-/hexo-generator-sitemap-1.2.0.tgz#3018f8d7d1e2e42b3f71a65a7316ffcf583bc3f3" @@ -1978,11 +1962,6 @@ just-debounce@^1.0.0: resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= -kareem@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.0.tgz#ef33c42e9024dce511eeaf440cd684f3af1fc769" - integrity sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg== - keyword-extractor@latest: version "0.0.16" resolved "https://registry.yarnpkg.com/keyword-extractor/-/keyword-extractor-0.0.16.tgz#225342f85de31ef3087fd58f951d655d59e1d492" @@ -2187,11 +2166,6 @@ math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -2309,49 +2283,6 @@ moment-timezone@^0.5.14: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" -mongodb-core@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.2.7.tgz#a8ef1fe764a192c979252dacbc600dc88d77e28f" - integrity sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ== - dependencies: - bson "^1.1.1" - require_optional "^1.0.1" - safe-buffer "^5.1.2" - optionalDependencies: - saslprep "^1.0.0" - -mongodb@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.2.7.tgz#8ba149e4be708257cad0dea72aebb2bbb311a7ac" - integrity sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw== - dependencies: - mongodb-core "3.2.7" - safe-buffer "^5.1.2" - -mongoose-legacy-pluralize@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" - integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== - -mongoose@^5.6.2: - version "5.6.2" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.6.2.tgz#71afc80bc27462a5fd12644db490c2c5b053646a" - integrity sha512-s2FQn/XTlM/yeYxqNPGU8khSA1nPhGiESO7iLdFf8Ntn6lEwgO9KKOIGkRKPk5s+peAOwO34ex6NPX8EWtKgFA== - dependencies: - async "2.6.2" - bson "~1.1.1" - kareem "2.3.0" - mongodb "3.2.7" - mongodb-core "3.2.7" - mongoose-legacy-pluralize "1.0.2" - mpath "0.6.0" - mquery "3.2.1" - ms "2.1.2" - regexp-clone "1.0.0" - safe-buffer "5.1.2" - sift "7.0.1" - sliced "1.0.1" - morgan@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" @@ -2362,31 +2293,10 @@ morgan@^1.9.0: on-finished "~2.3.0" on-headers "~1.0.1" -mpath@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.6.0.tgz#aa922029fca4f0f641f360e74c5c1b6a4c47078e" - integrity sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw== - -mquery@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.1.tgz#8b059a49cdae0a8a9e804284ef64c2f58d3ac05d" - integrity sha512-kY/K8QToZWTTocm0U+r8rqcJCp5PRl6e8tPmoDs5OeSO3DInZE2rAL6AYH+V406JTo8305LdASOQcxRDqHojyw== - dependencies: - bluebird "3.5.1" - debug "3.1.0" - regexp-clone "^1.0.0" - safe-buffer "5.1.2" - sliced "1.0.1" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -2571,7 +2481,7 @@ nunjucks@^2.3.0: chokidar "^1.6.0" yargs "^3.32.0" -nunjucks@^3.0.0, nunjucks@^3.1.2: +nunjucks@^3.0.0, nunjucks@^3.0.1, nunjucks@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.0.tgz#53e95f43c9555e822e8950008a201b1002d49933" dependencies: @@ -2986,11 +2896,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-clone@1.0.0, regexp-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" - integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== - relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -3049,14 +2954,6 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -require_optional@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" - integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== - dependencies: - resolve-from "^2.0.0" - semver "^5.1.0" - resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -3065,11 +2962,6 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" - integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= - resolve-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" @@ -3134,22 +3026,10 @@ safe-regex@^1.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" -saslprep@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -segment@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/segment/-/segment-0.1.3.tgz#605f80fd6c7131c46e38103a17b1688f09efafa7" - integrity sha1-YF+A/WxxMcRuOBA6F7Fojwnvr6c= - semver-greatest-satisfied-range@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" @@ -3157,7 +3037,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" @@ -3214,20 +3094,10 @@ setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" -sift@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08" - integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g== - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -sliced@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" - integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -3283,13 +3153,6 @@ sparkles@^1.0.0: resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" - integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= - dependencies: - memory-pager "^1.0.2" - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"