JavaScript學習之路 批量埋點

2021-07-10 13:49:28 字數 1846 閱讀 7888

在完成高階收費產品——新版大戰略的時候,在最後收官階段產品提出需對新版大戰略部分功能進行埋點,意在收集使用者行為資訊。但是由於原先公司埋點外掛程式並不提供批量埋點的功能,而業務所需埋的點範圍較廣,且所需觸發元素各式各樣,如有的直接靜態頁面,有的為非同步載入頁面。所以若進行單點埋的話,工作量比較大,且容易影響原有的功能。故該方案直接被pass掉了。稍微分析了一下這些所需要處理的元素,發現其實也並不複雜。索性直接在原有的埋點基礎上寫了乙個批量埋點的小外掛程式,意在不影響原有功能的基礎上,減少工作量。

主要實現思路如下:

鑑於各個頁面所需埋的點的元素載入方式不同,有些是直接在頁面上寫好的元素,有些是後期通過非同步載入方式渲染上去的。所以針對以上兩種情況,分別採用了兩種不同的方式。1、直接在頁面上寫好的元素。對於這種元素,直接採用了與dom繫結的方式,簡單粗暴實用。2、後期載入的元素。頁面中有較大部分元素都屬這類。這類元素需通過追加事件繫結加以完成。事件追加方面。為不影響元素原先事件情況下完成追加,目前做法是對元素追加的同類事件都加上命名空間,在每次追加相關埋點事件時,都清空自身該事件命名空間下已重複的事件,從而確保每個元素觸發時機的唯一性。

// @charset "utf-8";

/** * 批量埋點外掛程式

* @create : 2016-03-16 10:02

* @author : 應杲臻* @relyon : 需要依賴jquery

* @usage :

* 在不影響原有功能的基礎上進行批量埋點,減少工作量。

* 目前提供兩種用法:

* 1、直接與dom繫結方式,如

; * 直接在dom上新增ta-tag標記即可。如果需要指定事件觸發埋點,則將ta-tag更改為wsddz_wsdsg_19930607;event即可.其中event預設為click事件

* 2、呼叫mta,使用mta.mutilog方法。如mta.mutilog(

* ,

* )

*/ +(function

($) ;

function

i***sistdom

(o)

mta.prototype = , , tmpargs));

})});

},registerevt : function

(args)

if (el == page_tag)

// 對同類事件加以命名空間

$(el).off(args.e + '.ta.log').one(args.e + '.ta.log', function

() );

},log : function

(ttid, el)

if ($.trim(tid).length === 0)

// 這裡是具體統計**(略)...

},getbdom : function

() ;

});}

};return mta = mta;

}(jquery));

感悟:

在事件處理上,為保證頁面上同個元素同種事件觸發的唯一性,在追加事件時,需對原先事件進行解綁。但是如果不對任何處理進行解綁的話,會把對元素原先業務上的事件也一同進行了解綁。這樣就會影響具體的業務。想到了之前在研究bootstrap原始碼的時候,裡邊用到了事件命名,在之前我的一篇部落格文章中也做過一點總結。試了一下,果然是我要的滑板鞋~

題外話

最近專案比較多,有段時間沒寫部落格了,也比較無奈,pm催的急,賠了好多週末進去無償加班(┬_┬)。身體也明顯感覺變差許多,經常頭昏眼花,前天又感冒了,人生多磨難啊~等把這些專案結了,要去找個茶餐廳包個包廂,去和小夥伴無憂無慮打一天的雙扣。

JavaScript學習之路《七》

object 建立和使用 object 所有類的基礎類 例項化物件 var obj new object var obj 設定屬性 方法 obj.name zhangsan obj.age 20 obj.say function 訪問物件的屬性或方法 obj.name obj.say delete操...

Javascript 學習筆記

如果在生成的html裡面有事件需要傳遞帶特殊字元的引數,處理如下 singletext 輸入 1.singletext value.escapehtml 為 將html編碼 2.singletext value.escapehtml inspect 為 3.在 jsdebugtext innerht...

JavaScript學習記事

1.函式可以巢狀,這樣有助於寄生函式利用宿主函式的內部變數。2.沒有塊級作用域。在函式內部任何位置生命的變數,都在整個函式內部有效。舉例如下 var s1 global function f1 object.defineproperty o,x 建立物件o的屬性x,可寫屬性為false,即不可寫 o...