Ajax

本文探讨了Ajax的五种数据请求技术,包括XMLHttpRequest、动态脚本注入等,对比了数据发送方式如XHR与信标的优劣,详细分析了数据格式如XML、JSON、JSON-P及自定义格式的性能差异,最后提供了提升Ajax性能的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


什么是ajax。是一种与服务器通信而无须重载页面的方法。

一、数据传输

1.1 数据请求

5中常用来请求服务器数据的技术。

  • XMLHttpRequest(XHR)
  • Dynamic script tag insertion 动态脚本注入
  • iframes
  • Comer
  • Multipart XHR
  1. XMLHttpRequest
    它允许异步发送和接受数据。它能够精确地控制发送请求和数据接受。可以在请求中添加任何头信息和参数,并读取服务器返回的所有头信息。

  2. 动态脚本注入
    能跨域请求数据

var scriptElement = document.createElement('script'); 
scriptElement.src = 'http://any-domain.com/javascript/lib.js'; 
document.getElementsByTagName_r('head')[0].appendChild(scriptElement); 

注意!
使用这项技术从那些你无法直接控制的服务器上请求数据是需要小心。

  1. Multipart XHR
    该项技术允许客户端只用一个http请求就可以从服务器向客户端传送多个资源。

1.2 数据发送

常用的数据发送有两种方式:XHR、信标

  1. xhr
    xhr中get的速度要比post快,因为get请求网服务器只发送了一个数据包,而post请求发送了两个数据包。
  2. 信标(beacons)
    这项技术与动态脚本注入很像。
var url = '/status_tracker.php'; 
var params = [ 'step=2', 'time=1248027314' ]; 
(new Image()).src = url + '?' + params.join('&'); 

性标是向服务器回传数据最快且最有效的方式。如果你值关心发送数据到服务器,而不关心返回信息或只需要极少的返回信息,请使用图片信标。

二、数据格式

在考虑数据格式时,唯一需要考虑的指标是速度。具体下来就是下面三点。

  • 文件大小(影响文件下载时间)
  • 解析速度
  • 服务器上构造的难易程度
  1. xml
    缺点是格式极其冗长,有效数据的比例小。在高性能的Ajax中,xml没有立足之地 ?。

  2. json

  3. json-p
    由于json-p传递的数据就是原生的js,所以它的解析耗时为0。

parseJSON([
    { "id": 1, "username": "alice", "realname": "Alice Smith", "email": "alice@alicesmith.com" },
    { "id": 2, "username": "bob", "realname": "Bob Jones", "email": "bob@bobjones.com" },
    { "id": 3, "username": "carol", "realname": "Carol Williams", "email": "carol@carolwilliams.com" },
    { "id": 4, "username": "dave", "realname": "Dave Johnson", "email": "dave@davejohnson.com" }
]); 
  1. html
    和xml,用它来传输信息,文件大小太大,并且当将html添加到页面上,还需要大量时间进行解析。

  2. 自定义格式

数据格式总结。各种格式的性能比较数据如图1所示
在这里插入图片描述

图1 各格式的大小下载解析图

各种数据格式下载解析对比如图2所示
在这里插入图片描述

图2 各种数据格式下载解析对比
  • jsonp解析速度极快(为0),它能跨域使用,不过设计敏感数据时不应该使用它
  • 字符分隔的自定义格式这些技术解析大数据集比json-p还快,并且文件大小更小。

三、Ajax性能指南

最快的Ajax请求就是没有请求。

  • 在服务器端,设置http头信息以确保响应会被浏览器缓存。Expires: Mon, 28 Jul 2014 23:30:00 GMT
  • 在客户端,把获取到的信息存到本地,从而避免再次请求

所有的Javascript类库都运行你访问一个Ajax对象,它屏蔽了浏览器之间的差异,但是并不是所有浏览器都实现了所需要的每一项功能。如MXHR中使用流对象,所以需要你直接使用XMLHttpRequest来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值