直接贴地址: https://kyfw.12306.cn/otn/resources/js/query/train_list.js 下载下来文本 35M,网页流量查看显示 4M...如何的慢,想想就知道了
1
yuankui 2016-10-09 17:54:43 +08:00
不错啊,这个数据~
|
2
reus 2016-10-09 17:55:20 +08:00 1
train_list ,是车次信息吧?可以减轻服务器压力,其实算正路做法。
那些页游、 flash 之类的资源,比这大的也不少见,没啥的。 |
3
minbaby 2016-10-09 17:56:08 +08:00
好奇心害死猫。( chrome 卡死了)
|
6
wolfan 2016-10-09 18:04:57 +08:00
LZ 小心铁总今年不卖回家的车票你哟~
|
9
bridge45 OP @chinawrj 我想写这代码的兄弟也是这样想的.... 然而也太对不起]上千万]用户的电脑 和 [上千万]*[10M] 的带宽浪费了吧
|
10
bridge45 OP @cheetah 可以分为多份静态文件,然后用户输入的时候去调取对应区间 CDN 的静态文件,用户内存和带宽都可以降低不少.
|
12
Arrowing 2016-10-09 18:15:22 +08:00
|
14
reus 2016-10-09 18:20:50 +08:00 1
@bridge45 从你的回复可以看出你并不是很懂技术,我想这种显而易见的事情,没什么值得讨论的。一个 gzip 后 4M 的资源,怎么就对不起电脑对不起带宽了呢?动态查询难道就不占带宽?动态查询还耗服务器资源。
|
15
bridge45 OP @reus 简单个分法:分为 D,T,K,G 四种文件,用户输入第一个字母去加载对应 js 文件,当然还有其他分法...,就可以大为减少一些带宽和内存.我配置不错的台式机 chrome 卡爆了...
|
16
learnshare 2016-10-09 18:29:22 +08:00
查看文件详情,标签卡死了
|
17
tscat 2016-10-09 18:30:57 +08:00 via iPhone
4m 的文件根本不占带宽吧和图片之类的比起来
|
19
qqmishi 2016-10-09 18:34:21 +08:00 via Android
下载下来把我的 gedit 卡死了,,,
|
21
Sasasu 2016-10-09 18:35:51 +08:00 via Android
c++程序里经常有几十兆的表打在内存里, js 里打表怎么了嘛,况且还只能打表的东西。
电脑比你想象的更适合处理这种任务,你觉得卡是渲染的问题,我的手机只会尝试渲染前几百行,剩下的不管。秒开不卡 |
22
reus 2016-10-09 18:36:25 +08:00
@bridge45 我用 chrome 打开 https://kyfw.12306.cn/otn/queryTrainInfo/init ,占 500 几 M 内存,多是多一些,但也在可以接受的范围内。你可以换其他内核的浏览器试试, chrome 在某些平台某些版本内存泄漏挺严重的。
|
23
jhaohai 2016-10-09 18:37:09 +08:00 via iPhone
简单粗暴有效
|
25
reus 2016-10-09 18:39:53 +08:00
@bugmenein 我看了它的响应头,是用了 CDN 的,如果离节点近就快吧。 4M 几秒下载完,也就是一秒 1M 左右,我想大部分人的网络都能有这个水平的。
|
28
reus 2016-10-09 18:44:36 +08:00
@bridge45 我单独打开显示文本要 30 秒,时间都消耗在渲染文本上了。打开购票页面是不用渲染出脚本的文本的。所以其实单开要多久并不重要
|
29
youxiachai 2016-10-09 18:46:19 +08:00
简单除暴省事....12306 为了省服务器资源..也是拼了...
简单来说.你电脑差,网络差,买毛线车票..... 好像确实这样..黄牛都是顶配电脑+网络... |
30
xfspace 2016-10-09 18:46:40 +08:00 via Android
12306 的特殊性...没什么好说的。
外人评价怎么怎么垃圾,要这样写要这样拆,没考虑到其他因素。 |
31
youxiachai 2016-10-09 18:48:56 +08:00
@bridge45 其实,例如我可以忍受第一次慢点...而且..以后访问有缓存...也不会慢..
你的方案看上去很好..但是不符合人性..,在等我查的时候,才去下载.在这个过程中..就有了时间的消耗..而现在这个只是第一次加载慢点,以后查就很快了.... 还是个人性的问题... |
32
iTakeo 2016-10-09 18:54:12 +08:00 via iPhone
为什么我的手机秒开,一点不带卡的?
|
33
williamx 2016-10-09 18:58:47 +08:00
这种明显是要分级的。太懒了
|
34
ahkxhyl 2016-10-09 19:00:35 +08:00 1
国家应该再开个卖火车票的类似 12306 的 没有竞争 永远没有提升!价格始终不降
|
35
zhihaofans 2016-10-09 19:04:41 +08:00
NOTEPAD++卡住了。。。
|
36
ChiangDi 2016-10-09 19:06:41 +08:00 via Android
我手机 chrome 也秒开
|
37
scnace 2016-10-09 19:11:56 +08:00 via Android
和之前那个 SQL 的帖子有异工同曲之妙~
|
38
bridge45 OP @youxiachai 哈哈 服了
|
39
jasontse 2016-10-09 19:27:18 +08:00 via iPad
这一点都不节省资源好吧,简直是浪费带宽,有用没用的一起加载。
|
40
jeremaihloo 2016-10-09 19:29:34 +08:00 via Android
讲道理,我们都是秒开,其实文件和我们平时手机浏览一个网页的图片相比并不大,而且,你说你下载这东西时间长,我只能说你用的网络太垃圾,而且不能代表其他人网络和你一样差,我老家农村 4m 小水管都没问题,你现在用的网络该换换了(手动滑稽并爱抚一下题主)
|
41
mdzz 2016-10-09 19:34:39 +08:00
$ python
Python 2.7.12 (default, Jul 1 2016, 15:12:24) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import json >>> with open('train_list.js') as fp: ... data = fp.read() ... >>> js = json.loads(data.decode('utf-8')[16:]) >>> print len(js) 61 >>> print js.keys() [u'2016-09-25', u'2016-08-30', u'2016-08-31', u'2016-09-13', u'2016-09-12', u'2016-09-11', u'2016-09-10', u'2016-09-17', u'2016-09-16', u'2016-09-15', u'2016-09-14', u'2016-09-30', u'2016-09-19', u'2016-09-18', u'2016-09-20', u'2016-09-21', u'2016-09-27', u'2016-10-19', u'2016-10-18', u'2016-10-15', u'2016-10-14', u'2016-10-17', u'2016-10-16', u'2016-10-11', u'2016-10-10', u'2016-10-13', u'2016-10-12', u'2016-10-08', u'2016-10-09', u'2016-10-06', u'2016-09-28', u'2016-09-29', u'2016-09-08', u'2016-09-09', u'2016-09-23', u'2016-10-07', u'2016-09-04', u'2016-09-05', u'2016-09-06', u'2016-09-07', u'2016-09-26', u'2016-09-01', u'2016-09-02', u'2016-09-03', u'2016-09-22', u'2016-09-24', u'2016-10-20', u'2016-10-21', u'2016-10-22', u'2016-10-23', u'2016-10-24', u'2016-10-25', u'2016-10-26', u'2016-10-27', u'2016-10-28', u'2016-10-29', u'2016-10-04', u'2016-10-05', u'2016-10-02', u'2016-10-03', u'2016-10-01'] >>> wow, interesting |
42
yangyaofei 2016-10-09 19:38:46 +08:00 via Android
@minbaby 表示 android chrome 不卡😂😂😂
|
43
youxiachai 2016-10-09 19:40:34 +08:00
@jasontse cdn 表示这点带宽小 case ....
|
44
adv007 2016-10-09 19:42:41 +08:00 via iPhone
这么大的 js 一般是不懂前端的工程师干的,此时先不用扯 CDN,gzip
|
45
yangyaofei 2016-10-09 19:43:33 +08:00 via Android
感觉挺好……第一次会比较慢,但是后面再请求应该都 200 吧,车票肯定来回刷,加上 cdn ,感觉很好。
|
46
jasontse 2016-10-09 19:45:17 +08:00 via iPad
@youxiachai 按照 12306 的流量级别,再加上春运时的尖峰流量,这是很大的开销。
|
47
hellojinjie 2016-10-09 19:57:33 +08:00
我们很多时候一张图片也要好几兆了啊, 4MiB 的文本下载很正常啊。
|
48
fqzz 2016-10-09 19:58:17 +08:00
react + webpack 打出来的 app , gzip 后不一定比这小多少。
|
49
ChaosPark 2016-10-09 20:03:35 +08:00
这样做挺好,不然网络垃圾点的就更抢不到票了。
|
50
Totato5749 2016-10-09 20:12:11 +08:00
我很好奇的是, 12306 的那些程序猿都神龙见首不见尾,从来没在网上见过说自己是 12306 的, 12306 现在也不算是黑点吧,总比百度强吧
|
52
Tink 2016-10-09 20:22:29 +08:00
我惊了
|
53
Tink 2016-10-09 20:24:31 +08:00
这个东西还有点用啊
|
54
schezukNewTos 2016-10-09 21:27:05 +08:00
铁总又不需要频繁调图,一个月不带变一次的。
只需要堆 cdn 就能给数据库减负,挺合算的。 何况第二次访问直接返回 304 , cdn 不耗流量。 如果手机用略吃亏,慢,费流量。 |
55
billwang 2016-10-09 22:08:38 +08:00
notepad++ 未响应
第一次打开那个网址等了十秒左右,后面打开就快一些,虽然我笔记本有些老了 |
56
SilentDepth 2016-10-09 22:43:10 +08:00
Chrome on Windows 点开,风扇开始转……囧
|
57
youxiachai 2016-10-09 22:48:59 +08:00 via iPad
@jasontse 嗯...目测是没怎么接触 cdn 的? cdn 的前端缓存性能非常厉害........说实在的就算是峰值也就是开多几个地区的 cdn 而已,对于整个系统的开销 cdn 是最方便扩容的....这种只要堆机器的方法最省事了....
|
60
reus 2016-10-09 23:33:15 +08:00 2
说直接打开或者 notepad++打开慢的,根本就没搞明白吧,作为脚本运行时,它不需要渲染给你看,很快的。直接打开慢, notepad++打开慢,是因为需要渲染所有的文字。实际执行的时候,直接就执行 js 代码了,又不需要渲染,所以说直接打开或者 notepad++打开慢,毫无意义。
|
61
zhanglintc 2016-10-09 23:37:28 +08:00
@reus 我觉得大家想表达的是, notepad++打开慢说明文件大, 下载会很花时间的...
|
62
Shura 2016-10-09 23:37:39 +08:00 via Android
这个算是 js 打表吧,我感觉很正常啊,可能这个程序员搞过 acm
|
63
indooorsman 2016-10-09 23:42:12 +08:00 via Android
同意楼上,请打开页面在 chrome 控制台的网络里查看响应时间,直接打开文本慢并没有意义
|
64
indooorsman 2016-10-09 23:43:09 +08:00 via Android
楼上指的是 @reus
|
65
indooorsman 2016-10-09 23:45:03 +08:00 via Android
@zhanglintc 然而并不能说明,下载的时候是 gzip 后的文件,编辑器打开的时候可不是
|
67
mytsing520 2016-10-10 01:56:31 +08:00
这个文件,好像是铁路运行图
|
68
paulagent 2016-10-10 02:17:32 +08:00 via Android
这种垄断企业是不会考虑用户的
|
69
RqPS6rhmP3Nyn3Tm 2016-10-10 05:02:32 +08:00 via iPhone
用户太多,只能尽量省资源。不过铁总的后端和前端很难想象他们是一个研究所出的
|
70
500miles 2016-10-10 07:56:51 +08:00
我滴乖乖... 字段名都换成单字母, 就能省下一半体积了 23333333
|
71
lslqtz 2016-10-10 08:01:20 +08:00
用动态 api 不好吗。。
|
73
Wakeupzombie 2016-10-10 08:25:10 +08:00
@youxiachai 兄弟,咱们又不是经常买火车票。这样或许只对票贩子有好处吧
|
76
exch4nge 2016-10-10 08:58:15 +08:00
目测把 json 的 key ( station_train_code , train_no )改成缩写,会减下来不少文件大小。。。
或者不用 JSON ,用点别的方式序列化数据,也可以减少不少。。。 再加什么 gzip ,就更棒了。。。 |
77
bsidb 2016-10-10 09:00:07 +08:00 via Android
@schezukNewTos 手机有 12306 客户端,启动的时候也会自动检测并更新数据库文件
|
78
ytmsdy 2016-10-10 09:11:07 +08:00
这东西估计相当于数据库吧,反正数据就是要全部都下载下来,痛苦多次还不如一次性痛苦完了算了。分多个文件增加了下载的不确定性,还有么就是后续调用的时候会比较麻烦。
|
79
wizardoz 2016-10-10 09:22:04 +08:00
主要是这个页面是要在前端查询车次的,数据必须全部都加载到前端才能查,考虑到这个,分不分级其实无所谓了.
我想说的是 12306 这么大一个网站,为啥不买一个证书? |
80
annielong 2016-10-10 09:26:12 +08:00
公说公有理婆说婆有理,这个方案虽然有不足,但是卡死一个用户总比卡死服务器强,当然,继续优化优化会更好
|
81
youxiachai 2016-10-10 09:28:37 +08:00
@Wakeupzombie 这是个对整个大系统优化策略取舍问题而已.....
就算你不是经常买火车票的..其实对流量而言就 4M 数据而已....而且...也就只有第一次加载会慢..以后查询..反而更方便一些...就系统设计本身,简单直接....... 还是 cdn 的问题的...就整个系统而言..cdn 的扩容和优化是最简单的....特别是在高峰期...只要堆机器就好了...不会对系统有多大压力. 而且,数据在本地..查起来,速度杠杠的.....即时是高峰期也是一样.... |
82
tumbzzc 2016-10-10 09:34:55 +08:00
也是醉了,这不应该放数据库吗
|
83
Nutlee 2016-10-10 09:39:42 +08:00
是 比这蛋疼的多的是 12306 的证书....... 这都多久了 ......
|
84
66beta 2016-10-10 09:41:14 +08:00
所以现在不流行 redis 什么的了吧?
|
85
SlipStupig 2016-10-10 09:49:06 +08:00
我们成功的将性能提升了多少少,请领导指示下一步工作!
|
86
lianxiaoyi 2016-10-10 09:58:55 +08:00 via Android
12306 的 cdn 才是最扯淡的!显示有票,结果提交时就没票了!后面整个请求结果都被缓存
|
87
hekunhotmail 2016-10-10 10:01:10 +08:00
看你们说的, 12306 就跟只有一个前端似的;
其实有一个很厉害的团队在搞的吧 |
88
xpol 2016-10-10 10:51:25 +08:00
7z 压缩到 93.4KB 。
gzip 到 3.58M 。 |
91
setonfocus 2016-10-10 11:04:17 +08:00
把压力丢给前端,不是将来 web 开发的趋势吗
|
92
bridge45 OP @setonfocus 量大的情况下,这样的赘余会被放大,细小的优化也会被放大
|
93
Quaintjade 2016-10-10 11:38:54 +08:00
CDN 很白菜啊,有什么好担心的。
假设一次下载实际消耗 5MB ,每一亿次下载总共消耗 488,281GB ,参考阿里云国内 CDN 价格平均估计 0.3 元 /GB ,那也就是 14.6 万元而已。 考虑到浏览器缓存以及一人为多人买票,我觉得按平均每个月一亿次下载算挺多了。 |
94
iyaozhen 2016-10-10 11:52:11 +08:00 via Android
|
95
errorlife 2016-10-10 12:36:13 +08:00
厉害了,我的哥。这个比我的种子多多了。
|
97
lslqtz 2016-10-10 12:58:25 +08:00 via iPhone
或者改成查询时分段调用当天的 js
|
98
g5 2016-10-10 13:37:30 +08:00 via Android
马云恨不得让铁老大把服务器搬他家去,如果支持微信支付,小马也愿意免费放他家
|
99
tuimaochang 2016-10-10 14:47:41 +08:00
卡住了,拖不动
|