vue中axios请求接口性能优化

薄洪涛6年前JS1650

    Vue的开发者都知道axios,很多都用axios来进行数据交互,axios的默认请求头是Content-Type: application/jso使用这个请求头会出现向服务器请求两次的情况,有的时候会大大影响服务器的性能,下图是我项目中的一个接口请求,可以看到,发起了两次请求,我查看了下状态栏,第一次请求是OPTIONS,第二次是POST,第二次请求才是我们需要的;

image.png

最开始的时候,我查阅了资料,知道了第一次请求叫预请求

预请求大概意思就是:

浏览器对后台说:我可以请求你吗? ( ̄ˇ ̄) 
后台说:阔以。( ̄▽ ̄)~*
结果是:发送原有的GET(POST)请求
后台说:不阔以。(‵﹏′)
结果是:报错

尤其是跨域的时候,会有一次预请求,很是影响性能,上图中预请求都用了202毫秒,然后我和前端商量下,本来想前端处理,去拦截这个option请求的,但是,我们的请求header中加入了一些鉴权数据,所以就不是一个简单的请求,必须要发送预请求;如果是简单请求的话,安装node的qs包就可以实现前端的拦截!

于是我想了2种解决方法,一种在nginx种拦截,另一种在api种拦截(index.php种检测到options请求不进行任何处理,直接返回)

对于方法1,实现如下:

if ( $request_method = 'OPTIONS' ) { 
add_header Access-Control-Allow-Origin $http_origin; 
add_header Access-Control-Allow-Headers Sessionid, Signature, Userid, Userphone; 
add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT; 
add_header Access-Control-Allow-Credentials true; 
add_header Access-Control-Allow-Headers X-Data-Type,X-Auth-Token; 
}

对于方法2,实现如下:

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers: Sessionid, Signature, Userid, Userphone");
    header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE,OPTIONS,PATCH');
    exit;
}

对比两种方法,特别需要注意的时allow-headers里面一定要和预请求返回的一致

image.png

经过我的优化之后,请求速度如下,是不是很给力,hah

image.png


标签: vueapi优化

相关文章

JsonP跨域请求详解

JsonP跨域请求详解

先来了解一下基本的概念,什么叫做跨域?举个例子,在localhost:8080上有一个ajax请求,代码如下<script src="js/jquery-1.7.2.js&q...

vue搭建基于融云的聊天室

    最近项目比较忙,在做完了一个在线问诊的项目后,想给大家分享下其中用到的,但是百度上资料又比较少的技术    需求...

融云搭建IM在安卓微信浏览器无法播放声音

融云搭建IM在安卓微信浏览器无法播放声音

之前我们做了一个在线问诊的项目,基于融云和VUE搭建,在聊天的时候,接收到语音消息进行播放的时候,出了点问题,在安卓的微信浏览器上无法播放,在ios上却可以然后我使用了微信开发者工具,打开了页面,发现...

ios textarea标签的placeholder属性多行时被隐藏

ios textarea标签的placeholder属性多行时被隐藏

我们使用的textarea 来做了病情描述,但是在ios手机上,当删除输入的文字后,placeholder显示不全,只有键盘收回的时候,才可以显示,如下图导致的原因目前不明确,但是百度上说有可能是以下...

js复制Dom节点内容到系统剪切板

需求:密码生成器,生成后比较长的密码串,点击复制按钮,实现复制到系统剪切板;这里使用到一款js插件:可以实现一键复制 https://github.com/zenorocha/clipboard.js...

这不是真的ES6之ECMAScript 6

这不是真的ES6之ECMAScript 6

最新想学习es6(elasticsearch6),在我的破服务器(512m内存)上搭建了java虚拟机(JVM)环境,首先说明一点,买服务器还是要买高配呀,如图当我安装elasticsearch看到内...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。