-
手机要通过无线网络协议,从基站获得无线链路分配,才能跟网络进行通讯。
-
获取无线链路后,会进行网络附着、加密、鉴权,核心网络会检查手机是否可以连接在这个网络上。
-
核心网络有SGSN和GGSN,在这一步完成无线网络协议和有线以太网的协议转换
-
核心网络会对手机进行APN选择,IP分配,启动计费。
-
传统的网络的步骤
- DNS查询,响应
- 建立TCP连接
- HTTP请求,响应
- HTML解析,展现
所谓的一秒钟法则,即达成以下的标准
- 2g网络:1s内完成dns查询,和后台服务器建立连接
- 3g网络:1s内完成首字显示
- wifi网络:1s内完成首屏显示
-
首屏加载
首屏加载,即在可见的屏幕范围内,内容展示完全,loading进度条消失。
-
按需加载
按需加载可以提升首屏加载的速度,但是可能带来更多的界面重绘,影响渲染性能。
-
Lazyload
原则是让屏幕外,或者不影响整体效果显示的图片、背景等资源,在界面就绪之后再进行网络加载
-
滚屏加载
常见的无刷新动态加载数据的方案,通常用在列表形式数据展示中。
-
响应式加载
通过这项技术,我们能够方便控制资源的加载与显示。
-
第三方资源异步加载
第三方资源有的时候不可控。在使用时要慎重选择,充分考察它们对于性能的影响,使用异步加载的方式进行,防止第三方资源的使用影响到页面本身的功能。
-
loading进度条
从用户体验的角度来看还是很必要的。
-
避免30*/40*/50*的http status
除了200,304这两个的正常的http status,其他的状态码都说明了项目存在着一定的问题。例如301,302中的跳转,等等。
-
Favicon.ico
保证这个图标的存在,而且尽可能地小,并且设置一个较长的缓存过期时间。
-
格式选择
- webp图片最小,但是在ios或者android4.0以下的系统有兼容性问题。
- jpg是最常用的格式,大小适中,解码速度快,兼容性问题也基本不存在。
- png24/png32,显示效果比jpg好,但是人眼很难感知,要避免使用这种格式的大图片
-
像素控制
一般建议宽度小于
640px -
小图片合并
css sprites方案
-
避免html代码中的大小重设
需要显示成多大,就下载多大的资源
-
避免DataURL
- 好处是可以减少一次http交互的请求,对于体积特别小的图片可以考虑。
- 缺点是不会被缓存,而且数据体积比二进制图片大1/3
-
使用图片的替代
- CSS3和SVG可以更好地适应GPU进行渲染加速,而且会避免增加图片资源导致的http请求增加
- Iconfont,可以认为是一种矢量类型的操作字体(需要设置特殊的字体)
-
Gzip
服务端开启Gzip压缩
-
资源缓存,长cache
对于一些静态的不需要改变的资源,将其缓存过期时间设置的长一些。
-
分域名部署(静态资源域名)
将动态资源和静态资源放置在不同的域名下,这样的好处是:静态资源请求时,不会带上动态域名下所设置的cookie头信息,从而减少http请求的大小。
-
减少cookie
尽量减少cookie头信息的大小,因为这部分数据使用的是上行流量,上行带宽更小,所以传输速度更慢,因此尽量精简其大小。
-
CDN加速
优化不同地域接入网站的带宽速度。
-
js/css合并
减少资源请求的次数
-
外联使用js,css
可以有效地利用缓存
-
压缩html,js,css
节约流量
-
资源版本更新
业务的js和css可能会有更新,可以使用版本号或者更新时间作为后缀,这样的话,后缀不变,命中缓存;后缀改变,浏览器自动更新最新的代码。
-
css位置
要放在head标签结束前,这样的话,浏览器会更快地解析出来head中的内容,开始下载css文件资源
-
js位置
放置底部。
-
避免空src
在某些浏览器可能会导致增加一个无效的http请求
-
避免css表达式
可能会让页面多次执行计算,造成卡顿等性能问题
-
避免空css规则
降低css渲染计算的成本
-
避免直接设置元素的style
不利于缓存和样式的复用
-
接口合并
减少http请求
-
减少接口数据量
减少传输数据的体积
-
缓存接口数据
-
合理使用CSS
- 正确使用display属性,这个属性会影响页面的渲染,需要合理使用
- display:inline后不应该再使用无效的属性(width,height,margin等)
- display:inline-block后不应该再使用float
- diplay:block不应该再使用vertical-align
- display:table-*后不应该使用vertical-aglin
- display:table-*后不应该再使用margin或float
- 不滥用float
- 不声明过多的font-size
- 值为0时不需要单位
- 标准化各种浏览器前缀
- 无前缀应放在最后
- CSS动画只用-webkit-和无前缀两种即可
- 其他前缀为-webkit- -moz- -ms- 无前缀四种
-
选择器
- 避免让选择符看起来像是正则表达式。高级选择器不容易读懂,执行耗时也长
- 尽量使用ID选择器
- 尽量使用CSS3动画
-
资源加载
- 使用srcset
- 首次加载不超过1024KB
-
UI
- 减少重绘和回流
- 缓存DOM选择和计算
- 缓存列表的length
- 尽量使用事件代理,避免批量绑定事件
- 使用touchstart,touchend代替click
- 使用viewport
- 减少dom节点
- 合理使用requestAnimationFrame动画代替setTimeout
- 适当使用canvas动画
- touchmove,scroll事件会导致多次渲染
涉及到一个本地数据持久化和更新机制的问题
