我的技术十年(5) - 性能优化
性能优化对于有一定生命周期的软件来说是个绕不过去的砍,也是软件走向成熟的标记。
性能优化有一定的成本,所以在初期,可以只做少量影响较大的部分,后续不断叠加,兼顾效益。
前端性能
加载方面
- 资源合并压缩
- 合适的图片格式
- http/2多路复用
- cdn - 从最靠近用户的地方加载
- dns预加载
渲染执行
- css选择器选用 - 不同类型选择器的速度差很多
- 高性能js框架 - 如带虚拟dom的reactjs、vuejs
- 图片/内容延迟加载 - 首屏看得见的图片优先显示,反之可延后
后端性能调优
基础环境
基础软硬件方面
- 在不浪费的前提下,越强的硬件性能越强
- 对于硬件达到瓶颈的情况,可通过关闭核心非必要软件、增加虚拟内存swap等方式缓解
应用程序
- 多级缓存
- 程序逻辑、算法优化
- 减少、合并数据库/IO请求次数
- 数据库连接池
- 多线程/进程处理,避免阻塞
- 采用更高效开发语言 - 如nodejs的事件机制,处理socks请求比java等语言效益更好
数据库
- sql查询优化
- no-sql数据库
- 集群部署
替代框架、容器
- ndoejs使用pm2等具有多进程管理能力的工具运行
- php使用基于c的高性能phalcon框架,facebook的hhvm框架
- java使用netty框架、nio方式等实现高并发