抛弃axios + promise,拥抱 superagent

前言

  最近在定位一个内存问题的时候,有位前辈提醒道,“你现在的接口调用模式用的都是 Promise + Axios 的方式,可以是可是,但是有性能问题,可以试试 Superagent ”。前辈的指点,必须得重视,我也好奇这两个能差多少,看看究竟能提升多少性能。

测试模板

  为了符合开发环境时的调用,我先封装了一下两种模式,细节如下:

  1.封装一个公共方法,用来方便地调用。

import axios from 'axios';
import md5 from 'js-md5';
import superagent from 'superagent'

let errFunc = function () {};

export default calss MyseflRestful {
	/**
	* 请求错误时调用
	*@param {object} response 错误参数
	*/
	static exeCallback(response) {
		if(typeof errFunc !== 'function') {
			return;
		} else {
			errFunc(response)
		}
	}
	/**
	* Promise + axios
	*@param {object} fetchObj 接口参数
	*/
	static fetch(fetchObj) {
		return new Promise(function (resolve, reject) {
			axios({
				...fetchObj,
				timeout: 180*1000,
				headers: {
					Authorization: window.sessionStorage.getItem('AccessToken') || window['token'],
					'Content-Type': 'application/json'
				}
			}).then(function (response) {
				if(response.data.ErrCode === 5004) {
					window._V5Logout();
					reject(response)
				} else {
					resolve(response);
				}
			}).catch(function (response) {
				MyseflRestful.exeCallback(response);
				reject(response);
			});
		});
	}
	/**
	* superagentFetch
	*@param {object} fetchObj 接口参数
	*/
	static superagentFetch(obj) {
		let header = Object.assign({
			'Authorization': window['token'],
			'Content-Type': 'application/json',
			'Cache-Control': 'no-cache, no-store, must-revalidate',
			'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT'
		}, obj.header);
		let method = obj.method.toLowerCase();
		//通过这种方式,不需要get post put delete patch 都写一遍
		superagent[method](obj.url)
			.timeout(180*1000)
			.set(header)
			.query(obj.params)
			.send(obj.data).end((err, res) => {
				if(err) {
					Log.error(err);
				}
				if(res && res.body && res.body.ErrCode === 50004) {
					window._V5Logout();
					if(typeof obj.callback === 'function') {
						obj.callback(res);
					}
					return;
				}
				if(typeof obj.callback === 'function') {
					obj.callback(res);
				}
			});
	}
}

  上面的模板有点乱,主要是提供两个静态方法,一个 fetch ,一个 superagent ,方便调接口的时候使用。

Promise + Axios

  在想要调用接口的地方,引入一下刚才的公共方法就行

import MyseflRestful from './MyseflRestful';

let queryParams = {
	url: '/query/data',
	method: 'GET'
};
let time1 = new Date().getTime();
MyseflRestful.fetch(queryParams).then((response) => {
	if(response.data.ReeCode === 0) {
		let time2 = new Data().getTiem();
		console.log('fetch', time2-time1);
	}
}).catch((err) => {
	console.log('err', err);
}) 

  控制台三次调用输出如下
在这里插入图片描述在这里插入图片描述在这里插入图片描述

Superagent

  调用方式如下

import MyseflRestful from './MyseflRestful';

let time1 = new Date().getTime();
MyseflRestful.superagent({
	url: '/query/data',
	method: 'GET',
	callback: (res) => {
		if(res.body,ErrCode === 0) {
			let time2 = new Date().getTime();
			console.log('superagent', time2-time1);
		}
	}
})

  输出如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
  我惊呆了,发现了什么奇妙的东西,竟然节约了这么多时间,我人傻了。以后谁还用 promise ,各位稍等,我这就研究这个 superagent 去,关注我稍后博客,为啥这个东西能这么提升这么多性能。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值