这里不讨论壕的做法,比如集群、负载均衡等,对于大型网站这些做法直接堆服务器即可
以下讨论的方法是只针对单服务器而言的,而且优化过的程序在单台服务器上运行,是完全满足需求很多中小网站的,比如你只有一台机器,上面运行WebServer、数据库、所有的资源文件如css、js、上传文档、图片甚至视频。如果单台硬件机器能很好的优化代码程序,那么可以很大程度节省硬件成本,而且对于大多数网站已经足够。
任何网站都需要考虑的一个问题是,如何提高并发访问量,我们追求一个字,就是“快”,用户需要的东西,能在尽可能短的时间内给予
基本原则
- 避免重复
- 减少数据量
- 提前准备好
我用过的方法,具体项目参考《C++开发的论坛系统 - BBS》
前端
html
- html文件gzip预压缩
- 减少文件的包含,比如js、css,页面文件专用的js、css直接包含在页面文件中
- 页面遮挡部分不完全加载,比如滚动条滚动到时在临时加载,比如图片
- 页面中的动态部分使用ajax动态处理,比如用户登录条
javascript
- 对于大量的字符串拼接,使用push、join,而不用运算符+
- 动态内容创建,能使用innerHTML的尽量使用innerHTML,而不用createElement
- 页面包含javascript文件引用时,尽量置于页面文件底部
- 整个网站通用的javascript功能集中在一个文件里,比如common.js
- javascipt内容使用混淆压缩
- 所有发布的javascript文件使用gzip压缩
css
- 通用css样式集中到一个文件里,比如common.css
- 将css内容进行压缩
- 将css文件进行gzip压缩
- 将页面包含css文件引用尽量放到页面文件顶部
图片
- 资源图片,尽量使用sprite方式处理(注意不是所有图片都适合这种方式)
- 用户上传图片,server端在不影响图片质量的情况下,对尺寸及像素进行压缩,单张图片以300k为上限
后端
动态页
- ajax方式局部获取动态数据,使用js方式动态渲染页面
- 页面模板替换部分顺序处理,而不是请求是临时替换
数据库
- 使用NoSQL数据库,而不用关系数据库(不是所有的项目都适合NoSQL)
- 只处理所需数据,而不是对整个数据行进行操作
- 减少事务的处理占用时间
- 创建索引
其他
- 动态网页静态化处理,比如首页对数据库的操作比较多,而访问量又比较大,使用定期更新首页成html文件