项目管理应用程序如何处理 JavaScript 和 PHP 的任务计时器
How can a Project Management App handle Task Timers with JavaScript and PHP
最近我开始看到一些项目管理应用程序在任务上提供 计时器 function/button。
用户可以点击启动计时器,它会记录经过的时间,并保存到后端以供该任务记录。
我从未尝试将此功能添加到我目前正在构建的项目管理应用程序中的主要原因是,一旦用户浏览到应用程序或 Web 中的另一个页面,JavaScript 定时器失效了!
我看到一些应用程序解决这个问题的一种方法是让应用程序中的每个页面都使用 AJAX 加载,这样它们就可以在屏幕底部有一个计时器栏,即使他们在 PM 应用程序中导航。
这似乎是一个很好的方法,但在我的情况下我不能这样做。我的项目管理应用程序是一个 SugarCRM 模块,因此我无法更改主要应用程序流程的工作方式。
所以我的问题是,在 PM 应用程序中实现任务计时器的可靠方法有哪些?
我假设它可能必须与 PHP 一起工作才能在前端 JavaScript 计时器和后端之间保持同步。
例如,假设您有一个计时器 运行 在任务上持续几分钟,然后您离开该应用程序。 1 小时后您加载 PM 应用程序,如果 JavaScript 计时器使用后端启动计时器时间并计算经过的时间,然后让 JavaScript 计时器简单地从它会的地方开始,那就太好了如果你在过去的整个小时里都在应用程序中,那就是了!
澄清一下:
- 您加载 PM 应用程序并启动计时器。累计到
00:03:00
- 您离开应用程序甚至关闭它。
- 1 小时后您回来加载应用程序。
- THe JavaScript 计时器将开始显示
01:03:00
并从该值开始计数。
这听起来可行吗?
是的,这是可行的,不要依赖客户端。您需要将开始时间保存到您的数据库,并让您的客户端计时器同时启动。只需在您的 js 中添加运行时检查以查看开始时间并进行数学计算。这样,无论有人刷新浏览器、断开网络连接或关闭计算机都没有关系。
客户端只做服务器告诉它要做的事情。
简要场景
第一步:客户POST
- POST 服务器的日期对象时间戳
-或者-
- 设置指向 POST 的终点,这样客户甚至不必担心创建任何日期对象
第二步:客户端定时器
点击事件在 JS 中本地启动定时器
第三步:添加运行时检查
如果用户刷新浏览器或执行任何需要重新呈现页面的操作,您有几个选择。
1.从服务器获取现有计时器的开始时间并在客户端进行计算
2. 从现有端点获取起点(首选),然后在 API 表示
的地方启动计时器
奖励积分:
我绝对不会为此使用本地存储,但您可以使用本地存储作为备份。
示例:
JS 运行 > 未检测到网络 > 引用本地存储
Annnnnnnd 以防万一这里是一些伪代码,因为有很多方法可以做到这一点。假设 getActiveTimers
对端点执行 GET,该端点返回 JSON 以及所有活动计时器和所述开始时间,并且 startTimer
在客户端中进行数学运算。如前所述,您可以在服务器端完成计算,以便客户端可以在提供的时间启动。
var init = function() {
getActiveTimers(function(rsp) {
if (rsp.timers) {
startTimer(rsp.timers.startTime);
}
});
$('.js-timer').on('click', function() {
// do time stuff
});
};
init();
这里最大的收获是是的,您可以一直这样做。我还建议查看 REST。祝你好运!
最近我开始看到一些项目管理应用程序在任务上提供 计时器 function/button。
用户可以点击启动计时器,它会记录经过的时间,并保存到后端以供该任务记录。
我从未尝试将此功能添加到我目前正在构建的项目管理应用程序中的主要原因是,一旦用户浏览到应用程序或 Web 中的另一个页面,JavaScript 定时器失效了!
我看到一些应用程序解决这个问题的一种方法是让应用程序中的每个页面都使用 AJAX 加载,这样它们就可以在屏幕底部有一个计时器栏,即使他们在 PM 应用程序中导航。
这似乎是一个很好的方法,但在我的情况下我不能这样做。我的项目管理应用程序是一个 SugarCRM 模块,因此我无法更改主要应用程序流程的工作方式。
所以我的问题是,在 PM 应用程序中实现任务计时器的可靠方法有哪些?
我假设它可能必须与 PHP 一起工作才能在前端 JavaScript 计时器和后端之间保持同步。
例如,假设您有一个计时器 运行 在任务上持续几分钟,然后您离开该应用程序。 1 小时后您加载 PM 应用程序,如果 JavaScript 计时器使用后端启动计时器时间并计算经过的时间,然后让 JavaScript 计时器简单地从它会的地方开始,那就太好了如果你在过去的整个小时里都在应用程序中,那就是了!
澄清一下:
- 您加载 PM 应用程序并启动计时器。累计到
00:03:00
- 您离开应用程序甚至关闭它。
- 1 小时后您回来加载应用程序。
- THe JavaScript 计时器将开始显示
01:03:00
并从该值开始计数。
这听起来可行吗?
是的,这是可行的,不要依赖客户端。您需要将开始时间保存到您的数据库,并让您的客户端计时器同时启动。只需在您的 js 中添加运行时检查以查看开始时间并进行数学计算。这样,无论有人刷新浏览器、断开网络连接或关闭计算机都没有关系。
客户端只做服务器告诉它要做的事情。
简要场景
第一步:客户POST
- POST 服务器的日期对象时间戳 -或者-
- 设置指向 POST 的终点,这样客户甚至不必担心创建任何日期对象
第二步:客户端定时器
点击事件在 JS 中本地启动定时器
第三步:添加运行时检查
如果用户刷新浏览器或执行任何需要重新呈现页面的操作,您有几个选择。 1.从服务器获取现有计时器的开始时间并在客户端进行计算 2. 从现有端点获取起点(首选),然后在 API 表示
的地方启动计时器奖励积分: 我绝对不会为此使用本地存储,但您可以使用本地存储作为备份。
示例: JS 运行 > 未检测到网络 > 引用本地存储
Annnnnnnd 以防万一这里是一些伪代码,因为有很多方法可以做到这一点。假设 getActiveTimers
对端点执行 GET,该端点返回 JSON 以及所有活动计时器和所述开始时间,并且 startTimer
在客户端中进行数学运算。如前所述,您可以在服务器端完成计算,以便客户端可以在提供的时间启动。
var init = function() {
getActiveTimers(function(rsp) {
if (rsp.timers) {
startTimer(rsp.timers.startTime);
}
});
$('.js-timer').on('click', function() {
// do time stuff
});
};
init();
这里最大的收获是是的,您可以一直这样做。我还建议查看 REST。祝你好运!