vue中axios请求接口性能优化

薄洪涛6年前JS1568

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

相关文章

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

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

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

node学习及小爬虫的实现

node学习及小爬虫的实现

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

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

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

vue搭建基于融云的聊天室

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

JsonP跨域请求详解

JsonP跨域请求详解

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

这不是真的ES6之ECMAScript 6

这不是真的ES6之ECMAScript 6

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

发表评论    

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