优化(1)

优化(1)

优化一:浏览器优化

浏览器(用户的URL请求)  双向    网络运营商(DNS解析地址) 前||||后 双向   应用服务器(web服务器)    DBserver(数据库服务器)

浏览器
1.减少http请求(Chrome谷歌newwork、火狐的Firefox请求)
    js、css:每个js或css都不能让其单独算一个请求
    像js合并成一个或几个文件<link>引入common、body【方法:合并文件】
    img小图片(像li标签的点、这写点也是一个图片、也是链接)引入雪碧图的概念:即把每个小图标定位到指定的位置,背景看成大图
2.使用浏览器缓存
    即一次性把所需的数据加入缓存中
3.减少cookie传输
    name、value、expire、path、domain、secure
    name    必需。规定 cookie 的名称。
    value    必需。规定 cookie 的值。 单个value值最大4KB
    expire    可选。规定 cookie 的过期时间。
    path    可选。规定 cookie 的服务器路径(作用率)。
    domain    可选。规定 cookie 的域名(有效期)。
    secure    可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
    
    Safari(苹果)不支持flash  但h5可以
    Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。
  Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。
  Internet Explorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。
      注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。
1byte = 8bit;1kb = 1024bytes;1mb;gb;TB;PB;EB;ZB;YB
1TB=2的40次方Byte=1099511627776 Byte
1PB=2的50次方Byte=1125899906842624Byte
1EB=2的60次方Byte= 1152921504606846976 Byte
1ZB=2的70次方Byte= 1180591620717411303424 Byte
1YB=2的80次方Byte= 1208925819614629174706176 Byte
1DB=2的90次方Byte= 1237940039285380274899124224 Byte
1NB=2的100次方Byte= 1267650600228229401496703205376 Byte
 浏览器一般只允许存放300个Cookie,每个站点最多存放50个Cookie,每个Cookie的大小限制为4KB。
4.启用压缩
    js和css  such as:Chrome和百度样式的源代码只有一行(减少解析空格和换行的时间)
    把空格和换行都去除(在线css格式化工具即可)
5.js放最下面,css放最上面
    1.正常是先加载框架,后加载样式(例:轮播图)
    2.css加载错误只会少了一块空白
    ja加载报错会加载不出来
6. CSS雪碧的基本原理是把你的网站上用到的一些图片整合到一张单独的图片中,从而减少你的网站的HTTP请求数量。该图片使用CSS
background和background-position属性渲染,这也就意味着你的标签变得更加复杂了,图片是在CSS中定义,而非<img>标签。

 浏览器优化的 优点
 减少加载网页图片时对服务器的请求次数
 提高页面的加载速度
 减少鼠标滑过的一些bug
  不足
 CSS雪碧的最大问题是内存使用
 影响浏览器的缩放功能
 拼图维护比较麻烦
  使CSS的编写变得困难

优化二:网络运营商优化

CDN原理:
    CDN是一个经策略性部署的整体系统,从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均而产生的用户访问网站响应速度慢的根本原因。
    CDN目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决 Internet 网络拥塞状况,提高用户访问网站的响应速度。
    
CDN内容分发网络,本质是缓存    得花钱买
部署在网络运营商(网通和电信,双网通)的机房那里  该节点部署区域和数量加快站点是密切相关的重要加快域名或部分
缓存:是指把数据存储在相对I/O操作较快的的介质中。
好处:
节约时间:
    1.计算时间
    2.读取时间
    3.传输时间
IP:我们访问网站时,ip记录的次数
pv : 指页面访问的次数
坏处:
    1.花钱
    2.数据不一致,容易引起脏读
    脏读:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。

优化三:缓存(合理使用缓存)

不经常改变高读写比(2/1)的热点
1.缓存热点:大量的人看
2.高读写比(至少是2:1缓存才有意义)
3.缓存内容原则:八二原则(80%的访问量落在20%的页面上)
    面试中的二八原则(own80%,面试官20%)`
缓存的缺点:
    1.数据不一致引起的脏读
    
需要注意的事项:.
    1.缓存穿透(当查询不存在的数据就会越过缓存墙,从数据库中取数据,而不存在的数据查询频率高就被存入了缓存,那么真正的数据就被清除了),当搜被挤掉的词就又重新读取数据库
    把不存在的key值存成空=>‘’;所有不存在的key视为一个键

    2.缓存预热(缓存预热的目标就是在系统上线前,将数据加载到缓存中。)
    
缓存雪崩,缓存穿透解决方案
    缓存雪崩
缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。
解决思路:
1,采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力。这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量。
2,分析用户行为,尽量让失效时间点均匀分布。避免缓存雪崩的出现。
3,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。

缓存穿透
缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库中查询。
解决思路:
1,如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴。
2,根据缓存数据Key的规则。例如我们公司是做机顶盒的,缓存数据以Mac为Key,Mac是有规则,如果不符合规则就过滤掉,这样可以过滤一部分查询。在做缓存规划的时候,Key有一定规则的话,可以采取这种办法。这种办法只能缓解一部分的压力,过滤和系统无关的查询,但是无法根治。
3,采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的BitSet中,不存在的数据将会被拦截掉,从而避免了对底层存储系统的查询压力。关于布隆过滤器,详情查看:基于BitSet的布隆过滤器(Bloom Filter)
大并发的缓存穿透会导致缓存雪崩。

缓存预热(洗澡先烧热水)
单机web系统情况下比较简单。
解决思路:
1,直接写个缓存刷新页面,上线时手工操作下。
2,数据量不大,可以在WEB系统启动的时候加载。
3,搞个定时器定时刷新缓存,或者由用户触发都行。
分布式缓存系统,如Memcached,Redis,比如缓存系统比较大,由十几台甚至几十台机器组成,这样预热会复杂一些。
memcache优点:简单的通信协议;丰富的客户端程序;高性能的优化协议(libevent支持事件触发的网络通信程序库)
解决思路:
1,写个程序去跑。
2,单个缓存预热框架。
缓存预热的目标就是在系统上线前,将数据加载到缓存中。

缓存算法
FIFO算法:First in First out,先进先出。原则:一个数据最先进入缓存中,则应该最早淘汰掉。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。
LFU算法:Least Frequently Used,最不经常使用算法。
LRU算法:Least Recently Used,近期最少使用算法。请查看:Memcached之你真正理解LRU吗
LRU和LFU的区别。LFU算法是根据在一段时间里数据项被使用的次数选择出最少使用的数据项,即根据使用次数的差异来决定。而LRU是根据使用时间的差异来决定的



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值