Memorydoc
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
    • 前端拓展
  • 编程之道

    • 并发编程
    • 设计模式
    • 数据结构算法
    • 技术拓展
    • 技术陷阱
    • 面试宝典
  • 分布式

    • 微服务
    • 数据库
  • 项目优化实战

    • JVM 优化
    • 线程池优化
    • 模板引擎优化
    • 任务调度优化
    • 内存优化
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Memorydoc

术尚可求
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
    • 前端拓展
  • 编程之道

    • 并发编程
    • 设计模式
    • 数据结构算法
    • 技术拓展
    • 技术陷阱
    • 面试宝典
  • 分布式

    • 微服务
    • 数据库
  • 项目优化实战

    • JVM 优化
    • 线程池优化
    • 模板引擎优化
    • 任务调度优化
    • 内存优化
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 并发编程

  • 设计模式

  • 数据结构算法

  • 技术拓展

    • 服务器搭建https
    • Maven 知识拓展
    • 项目集成Mybatis
    • 添加多个Ssh Key到一台电脑
    • BIO、NIO、AIO、Netty
    • 类加解密 & 自定义类加载器
    • 优化web 项目性能
      • 前端优化手段
        • CDN 加速
        • 反向代理缓存
        • WEB 组件分离
      • 后端优化
        • 缓存
      • 异步
      • 集群
      • 代码级别
      • 并发编程
      • 资源复用
    • 提升万倍系统吞吐量
    • 优雅写代码一
    • 优雅写代码二
    • 优雅写代码三
  • 技术陷阱

  • 面试宝典

  • 微服务

  • 数据库

  • 项目优化背景

  • JVM优化

  • 技术架构
  • 技术拓展
Memorydoc
2022-03-07

优化web 项目性能原创

# 前端优化手段

# 减少前端js css 请求数

合并css js 图片

# 使用客户端缓冲

静态资源缓存在浏览器上, 通过设 Cache-Control 和 Expires

# 启用压缩

在服务端压缩, 在客户端解压缩 但是会对浏览器和服务器上都会带来性能上的压力, 所以这个压缩需要权衡

# 资源文件加载顺序

Css 放在最上面, 先渲染界面, js放在下面,如果js比较复杂,将阻塞界面渲染, 最好是将js放在最下面。

# 减少 Cookie 传输

每次请求 cookie都会在浏览器和服务器 进行传输,如果cookie过大,将会加大传输压力

# 给用户一个提示

当浏览器或者 服务器在进行某种操作的时候,最好给用户一个提示,这样用户会有更好的体验

# CDN 加速

静态文件的CDN加速

# 反向代理缓存

直接通过nginx 将静态资源反向代理返回给 客户端,都不需要将静态资源加载到服务器

# WEB 组件分离

将静态资源 设置不同域名放置在不同服务器上,因为浏览器针对于相同域名 下载资源的时候,受限于最大资源数的限制, 限制了浏览器的下载速度 如果 将 img 部署在 img.com 域名下, 将 js 部署在 js 域名下,等等,将大大加快浏览器下载静态资源的速度

# 后端优化

# 缓存

网站性能优化第一定律: 优先使用缓存优化性能

# 缓存的基本原理和本质

  • 频繁修改的数据,尽量不要缓存
  • 缓存一定是热点数据,做不到将所有数据缓存, 缓存是在内存中缓存,缓存是比较昂贵的
  • 使用缓存就要容忍一定时间的数据不一致(最终一致性)
  • 缓存可用性问题: 使用集群 使缓存高可用
  • 缓存预热: 缓存系统突然启动后,会对数据库压力增大,可以提前将一些热点数据提前缓存
  • 缓存击穿: 持续高并发访问缓存中不存在的数据,会直接访问 数据库,给数据库造成较大的压力 解决方法 1.使用布隆过滤器(布隆过滤器将 访问的数据 通过不同的HASH算法, 分布到一个数组中, 不同的算法映射到不同的位置,布隆过滤器有一个特点 就是: 布隆过滤器判断存在的 数据在 不一定存在,但是 判断不存在的 一定是不存在) 2. 持续访问 多次(三次) 不存在的数据, 如果缓存和数据库中都不存在,那么在缓存中造一条当前数据缓存,防止缓存击穿

# 分布式缓存与一致性哈希

如果使用缓存集群,但是 如果仅仅使用一个一个服务器并排的 缓存, 会

# 异步

# 同步和异步, 阻塞和非阻塞

同步阻塞: BIO编程 同步非阻塞: NIO 编程 异步非阻塞: AIO 编程

将消息发送到消息中间件(消息队列), 主线程直接返回, 异步发送通知消息。(短信,邮件 等等)

# 集群

单个服务器 在并发访问的时候, 压力过大, 并发量编程, 系统吞吐量和系统性能 会逐渐降低。 这时候引入集群,将压力分摊到多个服务器上。有利于提高系统吞吐量和性能

# 代码级别

# 选择合适的数据结构

比如说: 在大循环中尽量不要使用ArrayList ,因为会出现扩容问题

# 选择合适的算法

比如说: 在排序的方法中, 选择最合适的排序算法

# 编写最少的代码

比如说: 减少代码中不必要的部分

# 并发编程

# 充分利用CPU多核,尽量使用线程池, 合理设置线程数量,尽量使用JDK自带的并发工具

# 实现线程安全的类,避免线程安全问题

# 同步下减少锁的竞争

  • 缩小锁的范围,缩小锁的粒度, 锁分段(CurrentHashMap)
  • 替换独占锁, 读写锁, CAS代替锁,ThreadLocal 等等

# 资源复用

减少开销很大的系统资源的创建和销毁

# 单例模式

# 池化技术

比如: 数据库连接池中的连接都是比较昂贵的资源,使用完要释放,方便其他线程获取使用

编辑 (opens new window)
上次更新: 2022/03/13, 21:24:24
类加解密 & 自定义类加载器
提升万倍系统吞吐量

← 类加解密 & 自定义类加载器 提升万倍系统吞吐量→

最近更新
01
命令模式 原创
05-03
02
桥接模式 原创
05-02
03
优雅写代码三 原创
04-29
更多文章>
Theme by Memorydoc | Copyright © 2021-2022 Memorydoc | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式