
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 10 Transitional//EN" ">
点击上方“ CSDN ”,选择“置顶公众号”
关键时刻,第一时间送达!
眼看着春运高峰即将来临,你准备好抢票工具了吗?
11月23日,12306网站购票系统全面接入微信,至此,yhk、支付宝、微信均可购买车票。
任何一个使用过网络售票系统的人都了解,12306的用户体验不是一般的糟糕,每逢春运,12306几乎都被推到风口浪尖上。充满乡土气息的界面,系统响应卡顿、延迟,每日长达7个小时的系统维护周期,奇形怪状的验证码,每天只能取消三次订单的强制规则都使12306成为全国人民最为头疼的一件事。
用户体验如此之差
其实早在2010年1月的那个春节,12306网站便开通并进行了试用,结果,也就是在这个春运高峰时期,在全中国网民的高流量“点击”之下,12306网站出现了严重宕机。也就是从此时起,12306便开始了为人所诟病的历史。
2013年,12306网站改版上线,新版网站增加了自动查询、自动提交订单、有票提醒等功能,并开始对互联网购票进行身份信息核验。同时,12306手机客户端正式开放下载,并新增支付宝通道。
2014年12月,12306预售期由20天延长至60天。
2015年,12306关于购票、退票和改签时间的相关规定开始进行调整。
2016年,12306网站新增“余票动态信息栏目”,手机APP新增列车正晚点查询服务。
2017年11月,12306网站>
直到今天,12306仍在功能迭代和系统升级中持续的“缝缝补补”。
为何总要“缝缝补补”?
如果将春运售票与淘宝等电商平台“双11”订单业务挑战进行相比的话,前者在业务复杂性上更具挑战性,而后者更多的体现在业务规模上。
比如,乘客购买一张车票,理论上这一区间票会同时存在多个站点,而乘客每买一张车票,都基本上是不同区间车票的订单。如果再加上订票者的“学生”或“成人”信息,选择上下铺、优选号等选择,那么无论查票、出票、支付等逻辑上,都要比电商平台上订单系统复杂得多。
第一个特点就是并发非常高。
根据官方数据显示,12306网站PV(页面浏览量)目前每天都超过400亿次,这个数字远远高于淘宝双11时同时访问的人数。因为,除了有真正购买需求的全国网民之外,同时还有机器人、订票机器在大量的进行刷新,并发次数非常高,包括优化数据库访问、分布式、缓存、负载均衡等技术挑战摆在眼前,都无法解决服务器高负载的问题。
第二特点就是峰值不均匀。
想必大家都体验过,临近年跟,摩拳擦掌准备好高速网络同时在页面和手机APP上进行手动刷票,但几乎就在一瞬间,有座的没座的,车票早已售空。比如,涉及到河南、安徽、四川、广东等地的火车线路时,基本每一个订单都会被疯狂抢购,峰值极为不均。
相比淘宝双11来说,某些爆款页面因为服务器上突然产生高流量负载,出现了暂时无法响应或下单失败的情况仍是少数。
另外一个特点就是SKU。
SKU即最小管理库存。在淘宝双11时,多数人都经历过当天下单,但往往不会当天发货而是高峰过去之后再发货的情况。这也就是淘宝SKU数量的问题,也就是说,出售一款产品,目前现存1000件,但同时2000人下单时,商家可先出售1000件,再随后补货上架。也就是说实际的SKU数量是2000甚至按照客户订单来完成的。
而火车票,因为订票实名制,分配座位都是对号入座的。每个时段每趟车次每一个座位,系统只能售卖一张。而实际上,无论你是不是身处春运高峰时期,全国13亿人次庞大的流动需求,迫使你购买的火车票最小库存SKU永远只有1个。
实际上,在互联网售票之前,网点售票已实施多年。也就是说,在铁路售票系统内部也是个庞大且复杂的跨地域系统进行支撑,包括涉及的业务逻辑、软硬件供应商、版本与维护协议等方面。
因此,有着严重历史包袱的12306,在诞生之初并非是为了重构原有的售票系统,更多是为了缓解当时日益紧张的售票系统压力,首先仍是原有的系统上做web前端。这才是根本上的问题。
正如总有人会豪言,自己能设计出一个比12306更好更廉价的购票系统。那么,关键的一点是,面对此时此刻的问题,你又会如何处理呢?
JS、PHP、Python等五大编程语言曝漏洞;中兴70后程序员坠亡;雷军平定迅雷内乱一周业界事
全球活跃开发者不足1500万,业余爱好者和学生仅占四分之一
调用是超级简单的
from tornado_fetcher import Fetcher# 创建一个爬虫
>>> fetcher=Fetcher(
user_agent='phantomjs', # 模拟浏览器的User-Agent
phantomjs_proxy=')')
希望能帮到你!
无阻塞加载js
浏览器加载静态资源和js的方式都是线性加载,所以一般情况可以将js放到</body>前,防止UI线程的阻塞。
而某些时候我们既希望js在整个网页的头部就加载,又担心js阻塞导致网站加载缓慢,就可以用到无阻塞加载js技术。
Dynamic Script Elements 动态脚本元素
DOM允许我们使用Javascript动态创建HTML的几乎所有文档内容,一个新的<script>元素可以非常容易的通过标准DOM创建:
var script = documentcreateElement ("script"); scripttype = "text/javascript"; scriptsrc = "file1js"; documentbodyappendChild(script);
新的<script>元素加载file1js源文件。此文件当元素添加到页面后立刻开始下载。此技术的重点在于:无论在何处启动下载,文件的下载和运行都不会阻塞其他页面处理过程。
当文件使用动态脚本节点下载时,返回的代码通常立即执行(除了Firefox和Opera,它们将等待此前的所有动态脚本节点执行完毕)。
大多数情况下,我们希望调用一个函数就可以实现Javascript文件的动态下载。下面的函数封装实现了标准实现和IE实现:
function loadScript(url, callback){ var script = documentcreateElement ("script") ; scripttype = "text/javascript"; if (scriptreadyState){ //IE scriptonreadystatechange = function(){ if (scriptreadyState == "loaded" || scriptreadyState == "complete"){ scriptonreadystatechange = null; callback(); } }; } else { //Others scriptonload = function(){ callback(); }; } scriptsrc = url; documentgetElementsByTagName("head")[0]appendChild(script); } loadScript("file1js", function(){ //调用 alert("File is loaded!"); });
此函数接受两个参数:Javascript文件的Url和一个当Javascript接收完成时触发的回调函数。属性检查用于决定监视哪种事件。最后一步src属性,并将javascript文件添加到head。
动态脚本加载是非阻塞Javascript下载中最常用的模式,因为它可以跨浏览器,而且简单易用。
使用ajax需要先了解计算机前后端的通信原理,也就是需要了解我们的服务器与客户端数据是如何交换的。
DNS的查询过程:(以访问,>
以上就是关于js获取远程文本内容全部的内容,包括:js获取远程文本内容、网址 https://dynamic.12306.cn/otsweb/trainQueryAppAction.domethod=init&where=ypcx 的网页访问不了、为什么耗资数亿的12306一直都非常难用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)