12306购票系统前端优化
前端性能优化技术
要解决性能的问题,有很多种常用的方法,我在下面列举一下,我相信12306这个网站使用下面的这些技术会让其性能有质的飞跃。
一、前端负载均衡
通过DNS的负载均衡器(一般在路由器上根据路由的负载重定向)可以把用户的访问均匀地分散在多个Web服务器上。这样可以减少Web服务器的请求负载。因为http的请求都是短作业,所以,可以通过很简单的负载均衡器来完成这一功能。最好是有CDN网络让用户连接与其最近的服务器(CDN通常伴随着分布式存储)。(关于负载均衡更为详细的说明见“后端的负载均衡”)
二、减少前端链接数
我看了一下1230**,打开主页需要建60多个HTTP连接,车票预订页面则有70多个HTTP请求,现在的浏览器都是并发请求的。所以,只要有100万个用户,就会有6000万个链接,太多了。一个登录查询页面就好了。把js打成一个文件,把css也打成一个文件,把图标也打成一个文件,用css分块展示。把链接数减到最低。
三、减少网页大小增加带宽
这个世界不是哪个公司都敢做图片服务的,因为图片太耗带宽了。现在宽带时代很难有人能体会到当拨号时代做个图页都不敢用图片的情形(现在在手机端浏览也是这个情形)。我查看了一下12306首页的需要下载的总文件大小大约在900KB左右,如果你访问过了,浏览器会帮你缓存很多,只需下载10K左右的文件。但是我们可以想像一个极端一点的案例,1百万用户同时访问,且都是第一次访问,每人下载量需要1M,如果需要在120秒内返回,那么就需要,1M * 1M /120 * 8 = 66Gbps的带宽。很惊人吧。所以,我估计在当天,12306的阻塞基本上应该是网络带宽,所以,你可能看到的是没有响应。后面随着浏览器的缓存帮助12306减少很多带宽占用,于是负载一下就到了后端,后端的数据处理瓶颈一下就出来。于是你会看到很多http 500之类的错误。这说明服务器垮了。
四、前端页面静态化
静态化一些不觉变的页面和数据,并gzip一下。还有一个并态的方法是把这些静态页面放在/dev/shm下,这个目录就是内存,直接从内存中把文件读出来返回,这样可以减少昂贵的磁盘I/O。
五、优化查询
很多人查询都是在查一样的,完全可以用反向代理合并这些并发的相同的查询。这样的技术主要用查询结果缓存来实现,第一次查询走数据库获得数据,并把数据放到缓存,后面的查询统统直接访问高速缓存。为每个查询做Hash,使用NoSQL的技术可以完成这个优化。(这个技术也可以用做静态页面)
对于火车票量的查询,个人觉得不要显示数字,就显示一个“有”或“无”就好了,这样可以大大简化系统复杂度,并提升性能。
六、缓存的问题
缓存可以用来缓存动态页面,也可以用来缓存查询的数据。缓存通常有那么几个问题:
1)缓存的更新。也叫缓存和数据库的同步。有这么几种方法,一是缓存time out,让缓存失效,重查,二是,由后端通知更新,一量后端发生变化,通知前端更新。前者实现起来比较简单,但实时性不高,后者实现起来比较复杂 ,但实时性高。
2)缓存的换页。内存可能不够,所以,需要把一些不活跃的数据换出内存,这个和操作系统的内存换页和交换内存很相似。FIFO、LRU、LFU都是比较经典的换页算法。相关内容参看Wikipeida的缓存算法。
3)缓存的重建和持久化。缓存在内存,系统总要维护,所以,缓存就会丢失,如果缓存没了,就需要重建,如果数据量很大,缓存重建的过程会很慢,这会影响生产环境,所以,缓存的持久化也是需要考虑的。
诸多强大的NoSQL都很好支持了上述三大缓存的问题。
12306购票系统前端优化相关推荐
- 【Java+JSP+MySql】12306购票系统(四)登录注册
文章目录 登录 Servlet代码 html代码 注册 Servlet代码 html代码 登录 Servlet代码 Servlet代码所在文件夹位置如下截图所示 登陆的servlet代码文件命名为Lo ...
- 【Java+JSP+MySql】12306购票系统(五)购买车票
文章目录 选择出行需求 选择车票 确认购买 购买成功页面 选择出行需求 在页面中可以选择出发城市.到达城市以及出发日期. 代码存放在needs.jsp文件中. <%@ page language ...
- 9月3日科技联播:京东创始人刘强东卷入性侵疑云,香港地区即将加入12306购票系统...
京东回应刘强东性侵事件指控不实,不管是商业陷阱还是板上钉钉的石锤,京东股票都将迎来新一轮危机:旅游约起来?香港地区即将加入12306购票系统,那台北还会远吗?阿里巴巴持续领跑全球区块链专利数,IBM哭 ...
- 解析爬虫12306购票系统流程
做爬虫也将近有一年的时间,本人不是什么名牌大学毕业,但是对计算机的热爱无人能挡.大学学了Java语言,大四来到帝都实习找了一份Java偏数据的实习工作,工作的过程中第一次接触到了爬虫的工作,并且感觉爬 ...
- 【Java+JSP+MySql】12306购票系统(三)JDBC
文章目录 配置JDBC 列车信息类 用户信息类 操作数据库 配置JDBC 在编写Java程序前需要配置JDBC环境,有很多教程,需要安装一个驱动. 可以自己找来参考,也可以看看以下链接的参考: 如何在 ...
- JavaWeb数据交互前后台[Java+JSP+MySql+tomcat] 仿12306购票系统前台和后台(一)项目介绍以及需求分析
目录 项目需求中要求的开发工具: 项目需求中使用到的技术: 前台功能概述 后台功能概述 前台界面设计 注册 登录 主页 游客访问主页 用户登录访问主页 增删改查乘车人 增加乘车人 乘车人主页分页查 ...
- 【Java+JSP+MySql】12306购票系统(一)项目介绍
文章目录 系统功能概述 系统界面设计 登录 注册 选择出行需求 选择车票 确认购买 个人信息 修改个人信息 取消订票 系统物理模型 表 视图 触发器 系统功能概述 用户登录 用户注册 用户按出发地.到 ...
- 12306系统架构优化
coolshell陈皓优化方案 原文:http://coolshell.cn/articles/6470.html 一.业务复杂度比对 (1)qq业务模型:只访问自己的数据 (2)秒杀业务模型:秒杀能 ...
- 对于12306铁路购票系统的评价
铁路12306是中国铁路客户服务中心推出的官方手机购票应用软件,软件具有车票预订,在线支付,改签,退票,订单查询等功能,为大众提供方便快捷的手机购票全新体验.这个软件到底有多受欢迎,可以说,在我认识的 ...
最新文章
- 交叉编译及树莓派(或其他平台)交叉编译工具链的安装
- Oracle入门(五D)之如何设置show parameter显示隐含参数
- linux 配置 mysql_linux下mysql配置文件my.cnf最详细解释
- php 函数strtr 替换函数实例解析 strtr 速度比较快
- ubuntu环境搭建四:安装和使用git
- WMS智能仓储系统成长史?
- UVA 1615 Highway 高速公路 (区间选点)
- python实现给定一个列表,输出由各个位置除了自身元素外所有元素乘积组成的列表
- linux 运行菜刀,Linux部署常用命令
- 计算机网络--网络层
- Hutool拼音工具的使用
- 学好平面设计需要哪些技术功底?
- 3Dmax转cad及批量出图
- 计算机mac网关,如何在Mac OS X中获取默认网关地址 | MOS86
- Retrofit2.9.0源码解析
- arcgis 导入Excel 处理 点线 数据关系
- 从荣耀V20看技术人怎么销售自己
- PS照片美化处理实例教程
- IDEA项目中配置Maven镜像源(下载源)
- 多思计组实验实验四、数据通路实验