手机熄屏、后台运行时倒计时不准确的解决办法
活动在进行倒计时时,如果手机熄屏、切换程序导致当前程序进入后台)、PC浏览器后台运行(或切换标签页)后,再返回时,可能出现倒计时不准确的现象。原因是程序进入后台运行后浏览器会把定时器调慢,大约是从1秒变为2秒,熄屏后就更慢了。如果是苹果手机定时器直接停止运行。
最初想了个笨办法是定时使用ajax到服务器获取新的时间,结果因为访问量过大,把服务器搞挂了。研究半天,想到了用时间差!打开页面时,计算服务器和本地时间差。后面倒计时时就使用本地时间+时间差,即为服务器时间。不管怎么熄屏都不会出错了。
var diff = 服务器时间 - Math.round(new Date().getTime()/1000,0); setInterval(function(){ var serverTime = Math.round(new Date().getTime()/1000,0) + diff; ……进行倒计时计算-展示 },1e3);
也可以直接从服务器获取毫秒级时间,进行更精确的控制。如果担心页面打开时延迟导致有小许误差,也可以在页面加载完成后通过ajax从服务器取一次时间,个人感觉误差会更小一些。
FileReader文件转base64并上传简单示例
FileReader手册 https://developer.mozilla.org/en-US/docs/Web/API/FileReader
html_html5增强的文件上传域_使用FileReader读取文件内容https://www.cnblogs.com/isXianYue/p/13196444.html
HTML
<input type="file" id="file"> <script> $('#file').change(function(){ var This=$(this); var reader=new FileReader(); reader.onload=function(){ $.post('/base64.php',{ base64:reader.result, name:This.get(0).files[0]['name'] }, function(res){ alert(res); },'text'); }; //console.log(This.get(0).files[0]); reader.readAsDataURL(This.get(0).files[0]); }); </script>
PHP
<?php $base64 = $_POST['base64']; $name = $_POST['name']; $file = substr($base64,strpos($base64,',')); $mime = substr(substr($base64, 0, strpos($base64,';')), 5); file_put_contents($name, base64_decode($file)); echo 'ok';
企业需要什么样的云平台?
来源:https://www.zhihu.com/people/topoflove
这个话题本身满干燥的,我尽量不用术语,用日常的语言来讲一下吧。
总的来说,使用云服务,是所有现代化企业肯定要面临的一个管理决策。决策有两个大方向,一种是不上云,一种是上云。
企业的业务发展到一定程度,肯定是需要信息系统来支撑的,企业如果是一所房子,信息系统就是家里的家用电器。当然,没有家用电器你也能活,就好像没有洗衣机你也能洗衣服,但是洗衣机无疑会让洗衣服这个事情的效率大大提高。
支撑信息系统工作的,是服务器、网络这些基础架构;而支撑洗衣机工作的,就是电力。用最简化的例子来说,不上云,相当于自己家里买个发电机发电;上云,相当于找发电厂买点。这两种方式没有对错,只有合适不合适。
上云或者不上云,本质上是不同业务发展阶段的不同需求。
上云和上云也不一样,大家经常听到什么私有云、公有云、或者混合云这些词,我来通俗的解释一下,不是很精确,只为了理解。
介绍一家创业公司的工程师迪丽冷巴(我们就叫他小迪吧),下面是小迪的故事。
最开始,创业公司企业信息系统要求不强,比如全公司没几个人,每天有个打卡系统记录下上班时间就行了。小迪就去买了台服务器,让打卡系统跑在那个上面。
后来公司业务发展了,人也多了,信息统统多了起来,什么请假啊、采购啊、报销啊等等系统,于是每次搭一个系统,小迪就去买台服务器,用的也挺好。
然后小迪的领导感觉到情况不太对,打卡系统每天也就上下班的时候用的繁忙一点,大部分时间都闲着,用一整台服务器太浪费了。而报销系统,平常还好,到了月末所有人一起填报销申请表的时候卡得跑不动,一台服务器不够用,要两台,但是买两台呢平常又闲着。
这种加一个系统就买一个服务器的方法,太浪费资源了,领导让小迪出个主意。
小迪灵机一动,决定搞个IT资源池。资源池由很多的服务器组成,所有的信息系统都可以跑在这个资源池里面,那些需求高的信息系统多分配些资源,需求少的就少分配点。月末的时候给报销系统多分配点资源,月初的时候给财务打款系统多分配点资源,这样资源得到了最大化的利用。
小迪想出来的这个东西,其实就是一种企业私有云,私有云的资源由企业自己购买和建设,对比传统IT分散资源的优点是:
资源集中
资源共享
资源高效利用
领导很开心,给小迪升职,成了大迪,岁月静好。
后来公司业务发展越来越好,企业有了自己的电商平台,跑在自己的私有云上,电商平台每个月卖五万单的货,领导们很开心。
转眼双11还有一个月就要到了,公司上下士气高昂,电商节这种重大利好,一天销量顶平时半年,一定要抓住机会。但是大迪这时候犯了难了,这平常一个月5万单,跑在公司私有云上轻轻松松;但是双11一天20万单,是平常单日销量的100多倍,就算把整个私有云的资源都分配给电商系统,那也不够用啊。
这时候买服务器、买交换机来扩大资源池,当然是可行的,但是时间不等人啊。企业采购服务器什么的,供应商很多也是接到订单才开始排产,没现货的,买来动辄一两个月,还要把机器都给装上,软件都给配置好,别说双11了,圣诞节都要过去了。更不要说,公司的数据中心只有那么大,买了新设备,也放不下呀。
但是大迪毕竟是久经考验的大迪,他又想到了一个主意——我们的电商平台,就不要在企业的资源池上跑了,我们去租外面的资源池吧。这个资源池,就是公有云。
于是大迪联系了国内的大型公有云服务提供商,一下子买了双11当天原本电商平台100倍那么多的资源,大迪还留了个心眼,万一当天销量比预期的好,资源可以自动扩容到200倍。然后接下来的一段时间,工程师们和大迪一起,哼哧哼哧的把电商系统给迁移到了公有云上。
双11当天,果然销量火爆,但是好在有100倍资源的支撑,系统没有崩,领导很开心。双11过后,销量回归正常,大迪又把资源从100倍调回了正常水平,电商系统也就一直留在了公有云上,静待明年双11时候再一次扩容。
后来,公有云服务商,根据大迪的实际资源使用收费,省去了大迪把私有云扩建100倍的时间、精力和金钱。
公有云相对于私有云的优点是:
敏捷快速,准备时间短,弹性大
按需付费,实报实销,不浪费
不需要考虑自建设施的维护成本和人员支出
省空间
领导很开心,给大迪升职,成了胖迪,岁月静好。
这时候,公司业务发展多元化了,在全世界各地开了工厂和分公司,对信息系统的要求更高了。胖迪也尝到了公有云的甜头,恨不得所有信息系统都给架到公有云上面。但是这时候也碰到了一些问题。
企业已经非常庞大了,但是一些自用的信息系统,因为开发时间较早,用的人多,支持的业务非常复杂,所以没法迁移到公有云上,还是只能跑在原本的私有云资源池上。
这时候,已经身经百战的胖迪决定,这些系统虽然留在私有云上面,但是和公有云上的系统实现信息流的打通,顺便能够成为互相备份。
这,就是混合云架构。
混合云架构的优点是:
享受了公有云的便利
保证了不便迁移的私有云系统的正常运行
网络互通,统一管理
讲完了小迪成为胖迪的故事,可以看到,其实虽然技术复杂度不同,但是选择是否上云,上什么样的云,取决于企业业务的需求和发展阶段。
而选择上云的,上不同的云,要做的技术工作也不一样。比如要私有云,那么要自己采购对应的企业IT硬件设备,更多的是买产品;上公有云,要找公有云服务提供商,更多的是买服务;上混合云,那么两者都要做一点,产品和服务都要买。
目前国内在云服务领域能兼顾产品和服务的,基本就是华为这样有做云服务的硬件大厂了,用流行的话来说是云服务全栈。产品方面,华为的硬件研发和工业化水平还是让人服气的,现在的云平台产品在高性能计算、大数据、软件开发和SAP HANA应用上面都有了实施实例。而在服务方面,华为云也布局了很久,容器服务和微产品服务框架上都有不少领先。华为企业自己在全球那么多国家和地区允许企业自己的信息系统,也是一个比较好的自证——敢不敢把自己的核心业务跑在自己的云服务上,永远是考量云服务商的第一标准。
目前拥抱公有云的客户还是互联网企业为主,传统中小型企业和大企业体量都不大。互联网用户的诉求很简单,便宜、敏捷和好用。
大企业现在拥抱公有云不多,而且有钱、有人、有空间来搞自有的私有云。但是企业运营早晚会被成本和灵活性限制。当自有数据中心建设的风火水电因素放入考量,运维自己的大型私有云管生又管养的高投入模式,肯定会逐渐降低信息系统建设的效率。
目前传统企业选择自建资源池,根本原因还是核心诉求和互联网用户不同,传统大企业的核心诉求是可靠、开放与合规。但是随着公有云领域的产品越来越可靠、好用与正规,成本因为规模效应被进一步压缩,未来会有更多的传统企业业务上云。
而传统的中小企业其实可以尽早选择公有云的方式来替代传统自建IT的模式,这样可以实现省时、省力、省人、省空间,让企业将更多资源专注于业务拓展,同时传统IT的模式从经营上讲也会增加企业的固定资产,硬件使用到一定期间还要面临维保、更新换代的等问题。而公有云有很好的弹性,可以应对突然到来的高峰应用诉求。
Gartner的研究报告也是支持这个趋势的:
前面讲完了不同的云服务的类型,下面说一下上了云之后的大致路径吧:
第一条是业务云化,也就是把自己的业务系统比如ERP、MES、CRM等迁移到云上,用更快的速度实现统一管理、随处接入、全球覆盖和异地灾备。这是企业上云的基础
第二条是数据能力的云化,也就是把数据采集、计算、管理和应用这些所有场景的能力全部在云端执行。大数据的降维打击目前在零售、安防等领域开始逐渐明晰,数据能力的云化肯定是相关企业要考虑的。
第三条是利用云服务快速应对业务创新,也就是说云服务的那些敏捷、接入、管理的优势,最后还是要回到服务业务创新上来。云服务,就应该像电力一样,需要的时候一开开关就来,想要更多的电立刻可以调来,并且非常的可靠。
上不上云?
上什么样的云?
上了云之后怎么利用云?
这三个问题是现在经营现代企业逃不过的问题,在合适的时间选择合适的云服务,是大趋所向,能问出这些个问题,只是迈出了第一步,之后一定要步步为营,每一步都考虑好方向。
layui插件
layui官方文档
https://layui.gitee.io/v2/
layui镜像网站
http://laizhefa.com/
https://www.layui.site/
treetable
https://gitee.com/ele-admin/treetable-lay
演示地址:https://whvse.gitee.io/treetable-lay/demo/
开发文档:https://gitee.com/whvse/treetable-lay/wikis/pages
layui mini后台管理模板
http://layuimini.99php.cn/
EasyAdmin后台管理系统 ThinkPHP6.0+layUI
http://easyadmin.99php.cn/
OPtable
http://hbangmao.gitee.io/layui-op-table/demo/index.html
soul table
https://saodiyang.gitee.io/layui-soul-table/
Dtree
https://www.wisdomelon.com/DTreeHelper/
xmSelect
https://maplemei.gitee.io/xm-select/
TableSelect
https://gitee.com/lolicode/layui_component_tableselect
jquery.qrcode.js使用方法-kjua版
https://larsjung.de/jquery-qrcode/
https://github.com/lrsjng/jquery-qrcode
jquery.qrcode.js使用方法
https://github.com/jeromeetienne/jquery-qrcode/
php解析html dom的类库 simple_html_dom
simple_html_dom可以像jQuery一样操作html dom。
下载:https://github.com/samacs/simple_html_dom
https://sourceforge.net/projects/simplehtmldom/files/
官方文档:https://simplehtmldom.sourceforge.io/manual.htm
ftp连接FileZilla服务器时遇到无法协商数据连接的解决办法
1、服务器FileZilla Server设置》被动模式设置》使用自定义商品范围:50000-51000
2、在防火墙启用相应端口(阿里云ECS在阿里云控制台启用)。
现在就可以FTP客户端中使用PASV被动模式连接服务器了。
HTTP 错误 413.1 - Request Entity Too Large 未显示页面,因为请求实体过大
上传文件太大。解决方法,在网站主目录下新建web.config,并添加如下内容(最大2GB=2147483648):
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="2147483648" /> </requestFiltering> </security> </system.webServer> </configuration>
如果是PHP,还要修改php.ini:
upload_max_filesize = 2048M post_max_size = 2048M