12306网站前端初步优化之我见

原发表于我的博客:http://borninsummer.com/2014/01/03/how-to-improve-12306/


---------------------------------------  正文  ----------------------------------------------------

最近买火车票,感觉12306网站做得实在太垃圾了——加载速度慢,使用同步的Ajax验证码,未使用CSS Spirites …… ——完全不是抱着处理大量请求、高并发去的啊。于是抽空瞥了一下网站源码,发现其前端部分是个极好的反面教材,可以作为web前端工程师进行性能优化的案例。本文仅指出12306网站前端方面存在的问题,并提出性能优化建议。鄙人水平有限,如有不对之处,还望读者朋友多多见谅,并感谢批评指正~~

另外,1月3日下午我给12306铁路客运服务的“意见反馈”邮箱发了一封邮件,也不知道他们会不会处理。更不知道会不会被……

参考资料:

1. 减少HTTP请求

以铁路客户服务中心客运首页 https://kyfw.12306.cn/otn/index/init 为例。

问题分析

先看第一次加载页面时的网络瀑布图(蓝色方框标记的为图片请求):



共34次HTTP请求,图片请求了14次。有很多是非常小的图片,例如 icon_new.png,只为了这1.3KB,就与服务器进行了三次握手,真是愚蠢。

优化建议

  • icon_new.png使用纯CSS制作(inline-block)
  • 背景色、框,不要使用bg.png、bg_navlist.png、bg_line.png、bg_nav01.png,应尽量使用CSS,可以绘制更高效的界面
  • 将 logo.png,icon_phone.png,icon8.png,bg_nav.png,icon.png合为一张Spirites图。
  • 其他icon也尽可能按照整个网站的需求进行合并(一张图最好)

最后,非照片类图片请求数不应该超过两次。这样可以大大减轻服务器载荷。


2. 压缩组件

以铁路客户服务中心客运首页 https://kyfw.12306.cn/otn/index/init 为例。

打开该页面的源代码,会看到一些注释。总体来说占html文件的比重不多。但是,考虑到该网站在放票的10秒内会接到大量的请求,还是应该将这些注释去掉。

另外,这些注释的存在,使得人感觉这个网站仍然处于开发阶段——太不专业了。

3. 使用异步Ajax

分析的是用户登录页面:https://kyfw.12306.cn/otn/login/init#


用户在登录时需要输入验证码,其验证过程为:输入到第四个字符时,页面向服务器发送POST请求,对验证码进行验证。

“异步”的英文名是Async。12306网站用户登录的随机码相关验证url名为checkRandCodeAnsyn,感觉不太对劲,然后看了下其JavaScript实现,好家伙,居然使用了同步Ajax请求!

这就是为什么输入验证码后页面会假死——其实只是在等待服务器返回数据而已。什么人会故意使用同步Ajax请求呢?就是那些希望用户等待等待等待……的Idiots。

我的优化建议是,把下面代码中async值改为true

<span style="font-size:18px;">
// 这段代码摘自  https://kyfw.12306.cn/otn/resources/merged/login_js.js?scriptVersion=1.171 
checkRandCode:function(){
  var d;
  var c=$("#randCode").val();
  $.ajax(
      {
          url:ctx+"passcodeNew/checkRandCodeAnsyn",
          type:"post",
          data:{randCode:c,rand:"sjrand"},
          async:false,    // => OK,这里是巨大的BUG。居然使用了同步Ajax请求!改为true就可以了
          success:function(e){
              if(e.data=="N"){
                  d=false;
                  $("#i-ok").css("display","none")
              }else{
                  d=true;
                  $("#i-ok").css("display","block")
              }
          }
      }
  );

  return d
}</span>


---------------------- 后记: 关于发给12306客服的邮件 -------------------------

第一封邮件发于1月3日,过去了五天,没有任何反馈。于是1月8日加上“要求回执”“紧急”等参数再次发送。才知道他们根本就不看邮件!!!

尼玛啊。你们把这个邮箱(12306yjfk@rails.com.cn)放在首页干嘛??听说他们员工压力大,打玩偶和骂墙来减压,真是荒诞。这个星球最戏剧化的情节正在这片大地上演……


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值