介绍不同分词器的文章不少,较经典的有BosonNLP 11款开放中文分词引擎大比拼
可惜这11款分词器只有IK和结巴一直在更新elastic的分词器插件,Boson的插件已经很久没更新
所以加上elastic自带的smartcn 也就只有三种分词器可选。
注1:smartcn基于中科院的ictclas 但用的是1.0, 似乎没再更新
介绍不同分词器的文章不少,较经典的有BosonNLP 11款开放中文分词引擎大比拼
可惜这11款分词器只有IK和结巴一直在更新elastic的分词器插件,Boson的插件已经很久没更新
所以加上elastic自带的smartcn 也就只有三种分词器可选。
注1:smartcn基于中科院的ictclas 但用的是1.0, 似乎没再更新
5 Ways to Make HTTP Requests in Node.js
我们主要用 axios,因为它基于promise
上个项目只有一处用了 request, 因为它提供流处理
过去一年里我把node 6升级到 8 (开发环境下甚至鼓励大家用最新的node 10),一个主要目的就是为了解决callback hell的问题.
回调地狱的问题我不是第一次碰到,在做iOS开发时候,使用AFN就有这个“Pyramid of doom”的问题,当时的解决办法,也是后来用swift要求大家尽量用guard,说白了就是early return 但这个方法对nodejs的回调地狱不适用(用命名函数可以部分解决)
刚开始接触node,对promise还不熟悉,为了解决callback hell 首先引入的是 async这个模块 但是用async总感觉不是很自然, boilerplate code也不少。另,没有用其他的库,比如thenjs原因很简单:<1> 它的star数量和async不能比,这是我选开源库一个最重要参考 <2>知道以后肯定会用promise,不想再引入一个“似是而非”的then
promise chain是在熟悉了node之后很自然会引入的第二个解决方案,关于promise chain这篇文章 We have a problem with promises 一定要读透。
MDN对promise的讲解也很到位、全面。如果还觉得不够,那就看看javascript.info的几篇文章promise async/await, rethrow
我们需要一个基于 redis的轻量级的job queue, 和这个SO问题完全一样: Background processes in Node.js "After a user posts something to an app I want to crunch the data, request additional data from external resources, etc. All of this is quite time consuming, so I want it out of the req/res loop. "
google基本上只有三个结果 bee-queue , bull 和 kue 。其他几个星值都太低了, 参见 bee-queue vs bull vs kue vs node-resque vs queue vs tiny-workervs webworker-threads 。基于其他message queue,比如RabbitMQ, Kafka, ActiveMQ 的实现同样不考虑(下面bee-queue同样提到这点)
一开始,选择的bee-queue,因为它最简单,附带的example 一看就懂(这点做得比bull好)这也是它自己强调的。 bee-queue有篇wiki, Bee Queue's Origin 提到它开始用bull,但因为性能达不到要求就自己开发 bee-queue
如 12factor 所述, 我们的程序在不同的环境、不同平台的环境变量不同,如何有效的让程序读取环境变量一直是个问题。
上一个项目用了 per-env ,但 per-env 在 windows 上有bug 需要改它的代码,使用 cross-spawn
更重要问题是,per-env 其实就是把环境变量写在 package.json 里,感觉不如直接用 .env 包,避免 package.json 承载太多功能。
使用 .env 最大问题,它不建议把 .env 加到版本库,也不建议有多个.env 文件;但我们实际使用感觉就是要共享.env 文件,而且不同平台有不同 env 文件配置才能方便大家开发,所以到底这么解决?
网上能找到关于webpack的文章很多,这几篇讲得较清楚,并基于webpack4
所有用到es6特性,我们都确认浏览器支持, 所以觉得把包转成es5是不必要的,但在实际使用中还是发现不转es5有不少坑。
首先,mocha还不支持es6,所以为了能跑 mocha 测试用例就需要babel转码。
写测试代码两个目的:检验代码正确性;示范正确调用方式
比起console.log
来debug module真的是好处多多。比如,可在运行时候配置关停;可对某块代码单独打log;不同颜色显示,显示两次调用时间差当然也是另一大好处。
这两篇文章把debug讲得很清楚