性能优化之AJAX
明天就放假啦~哈哈。四月份好像还没有输出呢,吓得我赶紧写点东西...
Ajax是高性能JavaScript的基础。
Ajax,从最基本的层面来说,是一种与服务器通信而无需重载页面的方法。数据可以从服务器获取或发送给服务器。
最常用的三种用于向服务器请求数据的方法:
①XHR。
②动态脚本注入。
③multipart XHR。
XML HttpRequest
这种方式,这里就不多说了。点这里可以了解。这里记录一下要注意的地方:
使用XHR时,POST和GET的对比。对于那些不会改变服务器状态,只会获取数据的请求。应该使用GET。经GET请求的数据会被缓存起来。如果需要多次请求同一数据的话,它会有助于提升性能。但是也要注意使用这个特性一个比较容易踩的坑。
例如:你请求回来了一个数组。然后要随机选择其中的三个。按照一般的做法,就是随机生成一个长度内的数作为数组下标,取值。在原数组删掉该选项,再重新选择。以此类推。但由于数组是对象,如果只是简单的赋值给一个变量,在删除该变量的某个数组项时,原数组也会被改变。这个时候,刷新页面,ajax请求缓存了的前一次的请求。那么你得到的数组就是被删除了几项的数组了。
好吧,其实,主要还是注意对象的修改问题。。。
当请求的URL加上的参数长度接近或超过2048个字符时,才应该用POST获取数据,是因为IE限制URL长度,过长时会导致请求的url被截断。
动态脚本注入
这种方式也是用得很多的一种方式,特别是在jsonp跨域上。所以不多说了。
multipart XHR
这是一种新点的技术,MXHR允许客户端只用一个HTTP请求就可以从服务器向客户端传送多个资源。它通过在服务器将资源(CSS文件、HTML片段、JavaScript代码或base64编码的图片)打包成一个由双方约定的字符串分割的长字符串并发送到客户端。然后用JavaScript代码处理这个长字符串,并根据它的mime-type类型和传入的其他"头信息"解析出每个资源。
这种方式的缺点:
1)最大的缺点就是以这种方式获取的资源不能被浏览器缓存。
2)编写健壮的MXHR代码很复杂。可以从这里获得完整的类库:http://techfoolery.com/mxhr/。
但是某些场景下,还是适用的:
1)页面包含了大量其他地方用不到的资源,因此也无须缓存,尤其是图片。
2)网站已经在每个页面中使用一个独立打包的JavaScript或CSS以减少HTTP请求,因为对每个页面来说这些文件都是唯一的。并不需要从缓存中取。除非重载页面。
传输数据格式
当考虑数据传输技术时,你必须考虑这些因素:功能集、兼容性、性能以及传输方向。当考虑数据格式时,唯一需要比较的标准就是速度。
通常来说,数据越轻量越好。JSON和字符分隔的自定义格式是最好的。如果数据集很大并且对解析时间有要求,那么可以从如下两种格式作出选择:
1)JSON-P,使用动态脚本注入获取。解析速度快且能跨域。但是涉及敏感数据时不应该使用它。
2)字符分隔的自定义格式,使用XHR或动态脚本注入获取,用split()解析。这个大数据集比JSON-P略快,而且通常文件尺寸更小。
Ajax性能指南
·在服务端,设置HTTP头信息以确保你的响应会被浏览器缓存。
·在客户端,把获取到的信息存储到本地,从而避免再次请求。
好吧,拖了好久的一章书。终于看了。
性能优化之AJAX的更多相关文章
- input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has
input屏蔽历史记录 设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处 ;(function($){$.ex ...
- ajax性能优化
ajax性能优化 例: 模块: A B C D 开销: 50% 3% 25% 22% 如果我们优化B就如同那些那些只执行一次的代码,性能·提高不到哪里去:反之,我们去优化A,比如去优化它的循环, ...
- react生命周期函数的应用-----1性能优化 2发ajax请求
知识点1:每次render其实就会将jax的模板生成一个虚拟dom,跟上一个虚拟dom进行比对,通过diff算法找出不同,再更新到真实dom上去. 1性能优化 每次父组件render一次(除了第一次初 ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- web前端之性能优化
作为一个前端工作人员,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...
- web前端性能优化
性能优化对于用户体验无疑是非常重要的,下面介绍一些性能优化的方法. 1.减少HTTP请求 http请求越多,那么消耗的时间越多,如果在加上网络很糟糕,那么问题就更多了.且如果网页中的图片.css文件. ...
- Jquery学习笔记--性能优化建议
一.选择器性能优化建议 1. 总是从#id选择器来继承 这是jQuery选择器的一条黄金法则.jQuery选择一个元素最快的方法就是用ID来选择了. 1 $('#content').hide(); 或 ...
- 【读书笔记】读《高性能网站建设指南》及《高性能网站建设进阶指南:Web开发者性能优化最佳实践》
这两本书就一块儿搞了,大多数已经理解,简单做个标记.主要对自己不太了解的地方,做一些记录. 一.读<高性能网站建设指南> 0> 黄金性能法则:只有10%~20%的最终用户响应时间 ...
随机推荐
- 201521123014 java第一周总结
201521123014 java第一周总结 1.本周学习总结 刚认识这一门新语言,我就充满了好奇心,想看看Java和学过C语言,C++有什么区别.在这一周的学习中,我认识到,对于初学者而言,Java ...
- 深度神经网络(DNN)的正则化
和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结. 1. DNN的L1&L2正则化 想到正则化,我们首先想到的就是L1正则化和L2正 ...
- NSKeyedArchiver/NSKeyedUnarchiver归档应用(缓存实现)
NSKeyedUnarchiver : 从二进制流读取对象; NSKeyedArchiver :把对象写到二进制流中去. 要实现对数据模型的归档,需要我们实现NScoding协议,(NScoping) ...
- 【转】构建基于CXF的WebService服务
构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.C ...
- ajax跨域问题及解决
overview ajax是一种创建交互式网页应用的网页开发技术,是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换.而ajax的跨域问题则是请求了其他项目的接口地址,当协议.子域名 ...
- 每天一个linux命令(53)--ps命令
要毁掉一天,从早上开始. Linux中的ps命令是 process status 的缩写.ps 命令用来列出系统中当前运行的那些进程.ps 命令列出的是当前那些进程的快照,就是执行ps 命令的那个时刻 ...
- dfs算法
一般bfs算法都是使用递归 //下面简单的代码 visited[Max]; dfs(_graph g,int vo){ print(vo); visited[vo]=1 for(int i=0;i&l ...
- 基于 Koa平台Node.js开发的KoaHub.js获取/设置会话功能代码
koa-session2 Middleware for Koa2 to get/set session use with custom stores such as Redis or mongodb ...
- 道路修建 2(自创题+题解)(From NOI2011)
道路修建这道题想来各位不陌生(传送门在此——Bzoj2435),看了此题,一开始以为是最初各个点处于分散状态,然后做了一下,直到发现标程都有点问题,才发现原题是说本来各点已经处于连接完毕的状态(phi ...
- Java 反射的理解
反射反射,程序员的快乐,今天你快乐了吗?如果你不快乐,没关系,接下来让你快乐起来! 一.什么是反射? 通过百度百科我们可以知道,Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...