方法时间的Javascript服务器端日志记录
Javascript serverside logging of method times
我刚刚在一家webdev商店实习,我的第一份工作是解决我们的一位客户遇到的问题。长话短说,一位前员工编写的一些代码出现了一些问题,由于某种未知原因,客户网站上的加载速度正在放缓。我的老板告诉我在代码中插入一个记录器,这样我就可以记录给定方法所花费的时间,并找出哪种方法"占用"了时间。我必须将给定方法所用时间的日志打印到SERVER上的日志文件中。例如,我想做这样的事情:
function search(x,acc)
{
var startTime = new Date().getTime();
//
//
//method code
//
//
var timeTaken = new Date().getTime() - startTime;
//the question is now how do I print that to some kind of
//server side log file i.e. "/etc/etc/logFile.log"
}
我对此有点困惑,因为很明显Javascript是客户端的,我希望这个文件存在于服务器端,我不确定从哪里开始。作为参考,页面是php文件,js嵌入在HTML中。
编辑:在一些答案的帮助下,我在这里尝试了一些东西。让我们看看这个解决方案有多好/有多坏。
//js function:
function search(x,acc)
{
var startTime = new Date().getTime();
//do some stuff
var middleOfFunction = new Date().getTime() - startTime;
// do some more stuff
var endOfFunction = new Date().getTime() - middleOfFunction;
//find out which chunk of code took longer, the beginning or the end
var max = Math.max(endOfFunction , middleOfFunction);
<?php
$message = 'The longest part of the function took :' . $max . ' seconds.'
file_put_contents($file, $message , FILE_APPEND | LOCK_EX);
?>
实际的代码比这更复杂,我有一个更具描述性的消息,显示代码的哪一部分花费了更长的时间,但这是基本的想法。这有意义吗?或者在任何JS运行到客户端之前,php会在服务器端运行吗?我对这类事情感到困惑。感谢大家的帮助,这对我来说意义重大。我经常在家工作,我正努力上班的第二天,所以我没有老板在身边问他问题。
再次感谢,打破
也许最好的想法是使用AJAX/$.post();
每次发生什么事情,你都会这样做:
$.post("url/to/php_file.php",{variable: "its_content"},function(response){
if(response=="what_you_wanted_to_happen")
alert(response_or_some_other_variable);//or do nothing, but for debugg do some alerts
else
//do something else here
});
在服务器端,你可以在这里找到信息:如何在php中创建我的网站的日志文件?
尝试microtime(true);
$start = microtime(true);
// do stuff
$totaltime = microtime(true) = $start;
和日志:
file_put_contents($file, $totaltime, FILE_APPEND | LOCK_EX);
您可以存储在"<input type='hidden' name='jsTime' id='jsTime' />
中。您的JavaScript可能看起来像:
function E(e){
return document.getElementById(e);
}
function timeTaken(hiddenId, submitId, func, funcArgsArray){
E(submitId).onclick = function(){
var start = new Date().getTime();
func.apply(func, funcArgsArray);
E(hiddenId).value = new Date().getTime() - start;
}
}
如果您有<input type='submit' name='sub' id='sub' value='SUBMIT' />
和上面的隐藏输入,以及一个名为testFunction
的函数,带有两个参数,那么您将使用以下函数:
timeTaken('jsTime', 'sub', testFunction, ['arg1', variable2]);
由于onclick
在提交之前触发,因此隐藏值将被更新,因此服务器可以使用$_GET['jsTime']
或$_POST['jsTime']
访问它。
注意:这只会测试JavaScript函数的时间。
- UI的日志记录框架
- 将Function-Nothing日志记录返回到控制台
- Ember.js——如何对模型进行控制台日志记录
- 日志记录功能/对象名称's在函数堆栈内的javascript中
- 扩展 console.log() 的 javascript Web 应用程序的客户端日志记录
- 日志记录时避免 Promise 构造函数反模式
- 在使用 Html/WinJS 开发的 Metro 应用程序中实现日志记录
- 客户端日志记录
- 如何在 mvc3 Web 应用程序的生产版本中删除 JS 日志记录调用
- 在 $.ajaxSetup 转换器中获取 ajax 请求 URL,以便进行日志记录
- Web 服务的快速顺序日志记录
- AngularJS:客户端错误的服务器端日志记录
- 如果用户未登录,如何使用 Jquery AJAX 加载内部日志记录页
- 自动日志记录 JavaScript
- 是否有JavaScript API可以将日志发送到云日志记录服务(如papertrail)
- 如何使用快乐的js进行每个用户群的日志记录
- 后台页面 JS 代码在弹出控制台中的日志记录不同
- 用于单元测试和运行基于浏览器的 Web 应用程序的 Javascript 日志记录设置
- Backbone/Vimeo API - 查看日志记录,但不渲染
- 控制台日志记录“;这个“;返回“;空”;