当前位置: 首页 > news >正文

网页设计网站怎么做特效老域名购买

网页设计网站怎么做特效,老域名购买,受欢迎的网站开发,便民类网站 做前言 日常开发中设计接口,响应时间是衡量一个接口质量的重要指标。 接口响应时间这里粗糙地分为三种: 即时响应:毫秒级,小于500毫秒快速响应:秒级,大于500毫秒且小于2秒长时间操作:大于2秒&a…

前言

日常开发中设计接口,响应时间是衡量一个接口质量的重要指标。

接口响应时间这里粗糙地分为三种:

  1. 即时响应:毫秒级,小于500毫秒
  2. 快速响应:秒级,大于500毫秒且小于2秒
  3. 长时间操作:大于2秒,甚至是分钟级别的操作

一般接口都是需要快速响应的,在不考虑任何优化策略的情况下,如果整个业务逻辑走下来,响应时间大于了2秒,那么就应该考虑对这个接口进行性能优化了,以免影响了用户的体验。

优化思路

缓存

毫无疑问,使用缓存是对性能提升最明显的方法。

若是缓存中存在,直接返回结果,否则再走接口逻辑,最后将结果放入缓存中,以便下次查询时使用。

缓存还可以分为本地缓存和分布式缓存

本地缓存:

由于数据是在本地内存,它的访问速度是最快的,同时它的容量也受限于运行本地内存,以及在分布式系统中,本地缓存的数据很可能和其他节点的数据不一致。所以本地缓存一般用来存储一些系统级别上基本上不会改变的内容。

在 Java 实现中,最简单的本地缓存其实可以用一个 ConcurrentHashMap 来实现,不过在实际开发中有更好的选择,可以选择 Caffeine 来做本地缓存,性能更好。

分布式缓存:

分布式缓存相对本地缓存,多了一次网络交互,所以速度会慢一些,但是大小则不会受制于本地服务机器内存了,内存不够用了还可以通过水平扩容来解决,而且在分布式系统中, 数据的一致性能够得以保证。

常用的分布式缓存为 Redis MemCached,MemCached 更加轻量级一些,纯粹的缓存中间件,Redis 不仅仅可以作为缓存,它还支持更多的功能(分布式锁,分布式限流,地理位置应用,布隆过滤器等等)

异步

如果是单线程执行业务逻辑,那么可以考虑对业务逻辑进行拆分,将其中能够并行执行的部分分解出来,然后使用多线程的方式去同时运行,理论上能够将该部分的运行性能提升(提升的大小取决于能够同时运行的线程数)

Java 中可以使用线程池 ThreadPool 来并发执行任务,进阶一点还可以使用 CompletableFuture 来编排异步任务。

合并

合并其实是指将批量操作,将多个操作合并成一个去执行

例如数据库中的批量插入,同一个表的多条插入语句,其实可以优化成一个插入语句,这样可以减少数据库的交互,避免重复地创建数据库连接。Mybatis 中的 BatchExecutor 就是这个思路,将相同的 sql 语句添加到同一个 Satement 对象中等待执行,可以有效地减少 PrepareStatement 地编译操作

Redis 的 Pipeline 也是将多个请求合并,最后一起发送,这样可以将多次网络交互优化成一次网络交互,减少网络交互的时间,从而提升性能。

拆分

拆分其实是针对多线程编程中,对共享资源的一个拆分,避免因为竞争激烈,导致多线程并发执行性能反而比单线程还慢了

代码中如果使用到了锁,可以从两方面考虑

减少锁的持有时间:将不必要的操作尽可能地放到锁外面去执行,避免其他线程等待锁的释放时间过长

减少锁的粒度:参考JUC下并发类的设计

ConcurrentHashMap是一个线程安全的Map,虽然可以直接通过synchronized修饰 put 和 get 方法来得到一个线程安全的HashMap,但是这样显然十分影响性能。

在JDK 1.7中,ConcurrentHashMap采用了分段锁(Segment Lock)的机制来提高并发性能。这种设计将整个哈希表分割成多个段(Segment),每个段都维护着自己独立的锁。这样,当多个线程并发访问ConcurrentHashMap时,它们可以并行地访问不同的段,从而减少了锁的竞争。

在JDK 1.8中,ConcurrentHashMap的锁机制发生了重大变化,它放弃了JDK 1.7中的分段锁设计,转而采用了一种基于CAS(Compare-And-Swap)操作+synchronized锁的细粒度锁机制。

除了ConcurrentHashMap,在 JUC 包下还有许多 Adder 类(IntegerAdderLongAdder 等等),当线程竞争不激烈时,直接采用CAS来实现数量的原子递增,如果竞争激励,则使用数组来维护元素个数(将单个资源的竞争拆分成多个),先从数组中随机选择一个,再通过CAS实现原子递增,最后再一起汇总。

单例

单例其实也可以看作是缓存的一种实现方式,本质是避免重复创建对象,直接服用现有的对象,从而减少重复创建对象的时间,提升性能。

在 spring 框架下开发,依赖注入默认就是单例的

压缩

接口的响应时间除了接口本身执行业务逻辑的时间,还有网络传输的时间。在其他条件都不变的情况下,减少网络传输内容的大小,也可以提升接口的性能。

如果接口的返回数据字段很多,可以考虑压缩字段的大小,比如说将返回的json中的有实际意思的单词字段名直接改成简单的f1,f2,f3;这样在返回数据量大的情况下也可以减少网络传输的内容大小。

http://www.mmbaike.com/news/67359.html

相关文章:

  • 网站建设要求说明搜索引擎优化seo公司
  • 建设银行广西分行网站做网站用哪个软件
  • 怎么做电视台网站百度网站优化公司
  • 网站建设征求意见表恶意点击软件有哪些
  • 廊坊做网站哪家好百度 指数
  • 下列不能反应企业网站建立网络全国疫情排行榜最新情况列表
  • 网站开发费用报价单seo是什么职位简称
  • 丰台b2c网站制作价格it培训机构排名前十
  • 联合年检怎么做网站上无锡网络优化推广公司
  • 潍坊网站建设服务商正规电商培训学校排名
  • 自己网站做访问统计代码网络销售好做吗
  • 网站外连公关公司排名
  • 北京做网站公司排名小学四年级摘抄新闻
  • 有没有专门做一件代发的网站广州网站开发多少钱
  • 荣添网站建设优化全国疫情最新消息
  • 可以做c 试题的网站国外网站建设
  • 用macbook做网站开发公司网站建设哪家公司好
  • 家居网站建设素材大数据查询官网
  • 范县网站建设价格快速建站哪个平台好
  • 沧县网站制作百度竞价开户多少钱
  • 杭州网站建设朗诵面朝网络推广加盟
  • 微信公众号免费导入wordpress鄞州seo整站优化服务
  • 晋城两学一做网站潮州seo
  • 两台电脑一台做服务器 网站seo实战培训
  • 销售网站开发企业网站建设制作
  • wordpress多站点的路径临沂百度代理公司有几个
  • 做网站竞价是什么意思百度云搜索引擎入口百度网盘
  • 庐江建网站公司企业在线培训系统
  • 如何做跨境购物网站网站seo好学吗
  • b2c网站结构郑州网站优化外包顾问