nodejs总结备战(呕心沥血之佳作,大佬求关注)

前几个月,一直忙于进修,未能及时更新,算是一大遗憾。现在学业就将结束,空闲了一波时间,可以快乐地码博客了!(ps:为啥今天要更nodejs,一是做个总结,二也是为面试备战嘛)
这里主要说一下之前使用Nodejs开发踩过的无底洞,真的坑啊,今日便带你们一探深浅,此攻略中有大量心法及破敌之策,走过路过怕是别错过。废话不谈,直接上干货,各位看官可瞧好了!!这都是本人辛苦敲码得出经验哦。

1.代码精简

尽量使用精简的代码,Nodejs 代码处理速度是异常慢的,不如其他主流语言,甚至不如python,使用精简代码也是对自己能力的提升与考验。我们在做学子商城项目时,任课老师要求同一函数内,同一变量不可以出现三次(loop中仅算作一次)。代码精简了,就会变得漂亮,查找问题也变得容易,也方便以后一起工作的同事接手处理。

个人强烈不建议在Nodejs代码中再套用其他框架!!谁用谁知道(版主已泪流成河…)

2.精确版本号

版本号被忽略?估计很多人都曾头也不回的走过,开发环境与实际环境不一致。同事开发一个模块,本地联调是没问题的,但是到server端后,根本无法启动,找了一圈,最后发现同事本地开发使用的是Node的原始复古时代版,一个小小的忽略,却让我们绕着地球两圈半…感觉身体被掏空…
Node版本不熟悉的小伙伴们快注意啦!!注意啦!注意啦!(重要的问题说三遍):

** //任意版本
1.1.0 //指定版本
~1.1.0 //>=1.1.0 && < 1.2.0
^1.1.0 //>=1.1.0 && < 2.0.0
3.单元测试

版主告诉你们哦,千万要写单元测试用例,尝试本地运行,测试成功后再上传至服务器,有几次修改完代码(简单几行)以为怎么可能出问题,结果一重启服务就挂了,可能少个括号之类的。

Mocha是我最长使用的单元测试工具:mocha(抹茶)是一款javascript测试框架,支持在node和浏览器端运行。在官网上,对它的描述就是简单,可扩展,有趣。(有趣是什么鬼)

基本概念:

describe()测试区块,可以多层镶套。

it()测试用例,一个测试区块可以包含多个测试用例。

测试钩子:

before() 在本区块所有测试用例执行之前执行。

after() 在本区块所有测试用例执行之后执行。

beforeEach() 在本区块每个测试用例之前执行。

afterEach() 在本区块每个测试用例之后执行。

断言:

chai ;Mocha本身没断言,chai可以作为它的断言库。chai-as-promise 这个库支持promise。

用例管理:

only()测试区块与测试用例都支持only方法,只运行修饰的测试区块或用例。

skip()测试区块与测试用例都支持skip方法,会跳过修饰的测试区块或用例。

only与skip共用时,only会忽略掉skip。

异步调用:

done(),测试方法异步完成后,被调用。一个it测试实例中只能有一个done()。

例:

复制代码
var assert = require(‘chai’).assert;

function add() {
return Array.prototype.slice.call(arguments).reduce(function (prev, curr) {
return prev + curr;
}, 0);
}

describe(‘add()’, function () {
var tests = [
{ args: [1, 2], expected: 3 },
{ args: [1, 2, 3], expected: 6 }
];

tests.forEach(function (test) {
    it('test adds ' + test.args.length + ' args', function () {
        var res = add.apply(null, test.args);
        assert.equal(res, test.expected);
    });
});

});
复制代码
4.debug(划重点!!!!)

哟呵呵,开发避免不了调试debug,很多人喜欢使用console.log()进行调试,对于初学者极端友好,但是调式后如何处理console.log() 却成为了三打白骨精的问题,注释吧,会多出很多无用的代码,删掉吧,后面可能还会使用到。

这里,我推荐使用debug模块为例:

var debug = require(‘debug’)(‘myapp:main’);
debug(‘现在的时间是 %s’ , new Date());
开启debug模式(在cmd上输入): set debug = myapp:main

然后输入要执行的文件:node app.js

返回:myapp:main 现在的时间是 2018-05-03 18:25:30

关闭debug模式: set debug = null

5.配置文件书写

每个项目下都要建立一个配置文件,如config.js,切记勿留在你的代码程序里,接收你下一步工作的人,不是你的知心人,交接工作的时候,麻烦地叙述与解释是一个耿直程序员所不愿看到的,亲们,关爱程序员,从自己做起。

配置文件例:

复制代码
{
“app”: 2900,
“mongo”: {
“host”: “localhost”,
“port”: 3000
},
“redis”: {
“host”: “localhost”,
“port”: 8080
}

}
复制代码
6.避免使用同步代码

Nodejs的一个显著特征:从上到下的设计都是为了实现异步。文件操作就有同步和异步的版本,即使使用逻辑来控制同步方法,但还是有可能不注意地用到阻塞外部的函数库。这样做,对性能影响极大。

复制代码
//好的书写方式
fs.writeFile(‘message.txt’,‘Hello Node’,function(err) {
console.log(“It’s saved and the server remains responsive!”);
});

//坏的书写方式(影响性能)
fs.writeFileSync(‘message.txt’, ‘Hello Node’);
console.log(“It’s saved, but you just blocked ALL requests!”);
复制代码
7.静态资源使用Nodejs是禁忌

对于css和图片等静态资源,用标准的webserver而不是Nodejs。我们使用的是CDN(好吧,也许你们要去www.baidu.com,它是华为云)来存储静态资源。

好处:

1)减少nodejs服务器的负载。

2)CDN可以让静态内容在离用户较近的服务器上传递,减少等待时间。

8.在客户端渲染

我们比较一下在客户端渲染和在服务端渲染的区别:

服务端渲染

复制代码

服务端渲染
py1988!
复制代码 客户端渲染

复制代码

客户端渲染
<%= name %>!
复制代码 javascript文本能缓存在浏览器或者本地,所有初始加载以后,唯一要发送给客户端的就是json,这是最有效的,极大减少Nodejs server的负载量。

9.并行化

试着让所有的阻塞操作并行化,这将减少阻塞操作的等待时间,为了保持回调和错误处理得干净,我们需要使用一些监控工具。

10.尽量使用二进制模块

使用二进制模块取代javascript模块(尽量);如此性能会提升一大截。

var crypto = require(‘crypto’);
var hash = crypto.createHmac(“sha1”,key).update(signatureBase).digest(“base64”);
特殊:使用V8 javascript 取代客户端库

许多javascript库都是为了在浏览器上使用而创建的:例 一些浏览器支持 forEach,map和reduce这样的函数,但有些浏览器不支持。

V8 javascript 引擎支持Node.js实现ECMA-262第五版中指定的ECMAScript。直接用标准的V8 JavaScript函数替代客户端库,你会发现性能得到显著的提高。

时间仓促,本文肯定有不少错漏之处,望各位大牛指正,不胜感激!!(ps:能不能温柔点,毕竟咱们今生有猿啊QAQ)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值