vue中axios请求接口性能优化

薄洪涛6年前JS1819

    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优化

相关文章

vue如何在移动端调试

vue如何在移动端调试

    最近配合做vue的项目开发,我们前端遇到了一些问题,在调试android和ios样式兼容的时候,需要在手机上调试,但是又需要部署包发到服务器上,然后才能...

这不是真的ES6之ECMAScript 6

这不是真的ES6之ECMAScript 6

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

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

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

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

JS浅拷贝导致的聊天信息丢失问题

JS浅拷贝导致的聊天信息丢失问题

问题背景我们做了一个基于vue的H5在线问诊项目,集成了融云IM,每次进入到会话页面的时候,需要恢复历史聊天数据,我们的历史聊天数据做了三层缓存,内存-->浏览器缓存(LocalStorage)...

node学习及小爬虫的实现

node学习及小爬虫的实现

菜鸟一只,抽空了解了下node,然后总结下学到的重点;首先是安装nodejs,需要安装的版本最好是v6.0以上,不然有些特性不兼容nmp是和nodeJS一起安装的一个管理包工具,类似于python的p...

JsonP跨域请求详解

JsonP跨域请求详解

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

发表评论    

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