javascript - 为什么js代码里调用了php变量运行就明显变慢了

查看:108
本文介绍了javascript - 为什么js代码里调用了php变量运行就明显变慢了的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我的代码如下`
-----------这是问题代码------

<!-- 用span标签显示js运行结果 -->
<span id="span_dt_dt"></span>秒
<script type="text/javascript">
today="<?php echo time();?>"//获取服务器时间
timeold=(today-1488276882);//时间差=today时间戳-开始时间戳
function show_date_time(){
window.setTimeout("show_date_time()", 1000);//每隔1秒运行一次show_date_time()函数
//86400是一天的秒数
e_daysold=timeold/86400//  浮点天=时间差/一天的秒数
daysold=Math.floor(e_daysold);//  向下取整计算多少整数天
e_hrsold=(e_daysold-daysold)*24;//  过了几浮点小时=(浮点天数-整数天数)*24
hrsold=Math.floor(e_hrsold);//  把浮点小时的小数舍去
e_minsold=(e_hrsold-hrsold)*60;//  过了几浮点分钟=(浮点小时-整数小时)*60
minsold=Math.floor(e_minsold);//  把浮点分钟的小数舍去
seconds=Math.floor((e_minsold-minsold)*60);//  浮点秒=(浮点分钟-整数分钟)*60
span_dt_dt.innerHTML=daysold+"天"+hrsold+"小时"+minsold+"分"+seconds;
timeold=(timeold+1)//timeold=服务器时间+1
}
show_date_time();
</script>

`
-----------这是问题代码------
-----------这是修改了today的获取方式的正常代码------

<!-- 用span标签显示js运行结果 -->
本博已运行<span id="span_dt_dt"></span>秒
<script type="text/javascript">
today=new Date();//取本地时间
todayms=today.getTime()//取本地时间戳
timeold=(todayms/1000-1488276882);//时间差=today时间戳-开始时间戳
function show_date_time(){
window.setTimeout("show_date_time()", 1000);//每隔1秒运行一次show_date_time()函数
e_daysold=timeold/86400//  浮点天=时间差/一天的秒数
daysold=Math.floor(e_daysold);//  向下取整计算,计算整数多少天
e_hrsold=(e_daysold-daysold)*24;//  过了几浮点小时=(浮点天数-整数天数)*24
hrsold=Math.floor(e_hrsold);//  把浮点小时的小数舍去
e_minsold=(e_hrsold-hrsold)*60;//  过了几浮点分钟=(浮点小时-整数小时)*60
minsold=Math.floor(e_minsold);//  把浮点分钟的小数舍去
seconds=Math.floor((e_minsold-minsold)*60);//  浮点秒=(浮点分钟-整数分钟)*60,舍去小数
span_dt_dt.innerHTML=daysold+"天"+hrsold+"小时"+minsold+"分"+seconds;
timeold=(timeold+1)//timeold=服务器时间+1
}
show_date_time();
</script>

-----------这是修改了today的获取方式的正常代码------
本想简化代码只留下秒方便各位看,但是发现只留下秒就没有明显的延迟了,而且如果把today变量改成today=new Date();从本地获取时间就没问题了,但是本地是不准的,想从服务器获取,而且我的代码只有第一次运行的时候调用了today,第二次运行完全是本地js自行加秒数,为什么还会有这么大的延迟。很不解。
运行环境在本地和云端都测试了都是有延迟。
延迟是不规律的加秒数,有时候1秒运行一次,有时候两秒运行一次。
具体效果各位可以本地创建test.php运行。按道理可能是js运行效率慢,可是这无法解释为什么同样的代码只是改变today的获取方式从服务器获取改成本地就没有延迟了。

解决方案

计时器没有延迟,是你写的代码中最后获取秒的时候,浮点数的精度不同,导致第一种方法中秒的计算有误,有时候会出现两次循环秒数值一样的情况

第一个改成这样

today="<?php echo time();?>000"//获取服务器时间
timeold=(today-1488276882)/1000;//时间差=today时间戳-开始时间戳

改成这样是让你理解,是浮点数精度不同造成两者计时不一样。其实你第二种累加下去误差足够大也有可能出现两秒跳一次的情况。
本质上还是计算方式有问题,整数计算就能解决为何要用浮点数?

本博已运行<span id="span_dt_dt"></span>秒
<script type="text/javascript">
today="<?php echo time();?>"//获取服务器时间
timeold=(today-1488276882);//时间差=today时间戳-开始时间戳
function show_date_time(){
window.setTimeout("show_date_time()", 1000);//每隔1秒运行一次show_date_time()函数
var seconds = Math.floor(timeold % 60);     
var minsold = Math.floor((timeold / 60) % 60);
var hrsold = Math.floor((timeold / 3600) % 24);
var daysold = Math.floor((timeold / 3600) / 24);

span_dt_dt.innerHTML=daysold+"天"+hrsold+"小时"+minsold+"分"+seconds;
timeold=(timeold+1)//timeold=服务器时间+1
}
show_date_time();
</script>

这篇关于javascript - 为什么js代码里调用了php变量运行就明显变慢了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆