Javascript 一个抽象的跟踪代码应该如何实现?

Javascript 一个抽象的跟踪代码应该如何实现?,javascript,design-patterns,logging,architecture,google-analytics,Javascript,Design Patterns,Logging,Architecture,Google Analytics,我正在开发一款重型电子商务应用程序。在这些应用程序中,跟踪是一个巨大的问题。了解用户是否使用功能x或单击按钮y等是至关重要的 例如,假设您可以通过单击标题上的搜索按钮或通过应用程序范围的键盘命令CTRL+s来启动搜索 现在如果我们想追踪这些事情,最好的处理方法是什么。我在这两者之间思考和犹豫(在这里使用pseudoJavaScript,但语言并不重要): 1。只需直接跟踪操作发生的位置: function searchButtonClicked{ //this event will be

我正在开发一款重型电子商务应用程序。在这些应用程序中,跟踪是一个巨大的问题。了解用户是否使用功能x或单击按钮y等是至关重要的

例如,假设您可以通过单击标题上的搜索按钮或通过应用程序范围的键盘命令
CTRL+s
来启动搜索

现在如果我们想追踪这些事情,最好的处理方法是什么。我在这两者之间思考和犹豫(在这里使用pseudo
JavaScript
,但语言并不重要):

1。只需直接跟踪操作发生的位置:

function searchButtonClicked{
    //this event will be raised anyway to be catched somewhere else to bring up the search
    raiseEvent('searchButtonClicked');
    //now directly track the stuff here
    trackingService.trackEvent('searchButtonClicked');
}
而且

2。只需为操作引发事件,然后在trackingService中捕捉事件

function searchButtonClicked{
    //this event will be raised anyway to be catched somewhere else to bring up the search
    raiseEvent('searchButtonClicked');
}
…在trackingService的某个地方

onEvent('searchButtonClicked', function(){
   track('searchButtonClicked');
});
因此,乍一看2.对我来说似乎更好一些,因为没有任何组件需要依赖于
跟踪服务。他们甚至不知道跟踪的存在。此外,一些现有事件可能可以重用。然而,这只适用于一小部分事件。大多数事件或多或少都是为了跟踪而引发的。所以我想知道这个抽象层是否真的有必要


这种跟踪似乎与日志记录没有太大区别,我认为直接在事件发生的地方进行日志记录是公认的做法,不是吗

一如既往,这取决于您的具体情况。
如您所说,如果应用程序中的大多数可跟踪操作不引发事件,那么使用事件的抽象就不是最佳选择。
您可以让代码直接调用跟踪,这不是最干净的,但它是最简单的,如果每个调用只有一行,如上所述,可能是可以接受的

我可以再建议一件小事——你可以试试。
根据您使用的技术,您可以选择-
1.标记某些类/方法以进行跟踪(可能使用属性或任何东西)或

2.创建一个类,该类包含要跟踪的所有类/方法的列表

如果您是在JavaScript中这样做的,那么使用JQuery之类的库可以让您的生活更轻松。否则,您需要在代码中具有事件注册和侦听器机制

检查bind()函数下的示例

$( "#searchButton" ).bind( "click", function() {
  track('searchButtonClicked');
})