2010-04-17 35 views
2

摘要:我喜歡他們的方式設計/建築,但我怎麼實現這個

我主頁上的不同組件和各種成分顯示了一些推廣給用戶。

我有購物車作爲一個組件,並根據購物車促銷內容顯示。 我必須跟蹤用戶在線活動並將該信息發送給Omniture以生成報告。

現在我的組件被異步加載,基本上在AjaxRequest被啓動時加載,所以沒有修復模式,或者更確切地說,組件將出現在網頁上的信息。現在爲了將信息傳遞給Omniture,我需要調用$(document).(ready)上的跟蹤功能併爲每個組件添加信息(每個組件需要Omniture需要7個參數)。

所以在每個組件的init:config功能正在呼叫的Omniture和傳球paramters但現在no. of Omniture calls is directly proportional to no. of Components on the webpage但每次調用的Omniture是非常昂貴這是不能接受的。

現在我正在尋找一種方法,在該方法中,我可以將有關7個參數的信息分發給Omniture,並在其中傳遞這些信息。

需要注意的是,我不知道什麼時候組件被加載,所以沒有預先定義的時間或沒有。將被加載的組件。

的事情是我打電話跟蹤功能,當文件已準備就緒,但組件調用的Omniture已經取得所以我的問題是

Q後裝:我怎麼能收集到的信息對所有組件和而不是僅僅致電Omniture發送這些信息?

如前所述,我不知道何時裝載組件,因爲它們是在Ajax請求上完成的。

希望我能解釋我的挑戰,並希望如果有一個人能夠從設計/建築師提供了挑戰解決方案。

+0

這個問題清楚了嗎? – Rachel 2010-04-17 00:39:57

+0

我這麼認爲。我還沒有答案;仍然在想它。記住,如果我編輯您的文章,包括幾個網站分析標籤? – doug 2010-04-17 02:26:33

+0

否。請更新我的問題以添加Web Analytics標記。 – Rachel 2010-04-17 03:22:05

回答

2

不要直接進入Omniture;去找一個獲取數據的「中間人」。

我從來沒有聽說過Omniture,但它聽起來像你的用戶界面直接進入數據層的senarios - 在這種情況下,你需要一個業務邏輯層。無論如何,這就是原則。

  1. 創建一個處理UI和Omniture之間所有通信的邏輯層。
  2. 第一次UI調用命中邏輯層/控制器,例如:Logic.GetPromotion()
  3. 當這種情況發生時,邏輯調用omniture - 讓它執行一次批量調用以獲取所有數據,就像您descibed。
  4. 將請求的數據(Logic.GetPromotion())傳遞給任何叫它的人。
  5. 當另一個調用邏輯層的熱時,它會從剛剛收到的信息中提取數據 - 而不是從全部收集。

基本上它是Lazy-Load模式;與各種各樣的問題分開 - 我不知道我是否將它稱爲MVC - 只是結構合理(?)。

這種方法存在的一個潛在問題是,您的呼叫是異步的 - 邏輯控制器可能會在第二次呼叫仍在等待結果從第一個回來時進行。我自己並沒有沿着這些線做任何事情,但有很多多線程/併發類型design patterns那裏會有幫助。

+0

這不會解決我的目的。 – Rachel 2010-04-19 14:19:21

+0

嘗試使用Http Proxy來查看在UI和Omniture之間來回發送的請求;這可能會給你一些見解,你需要做什麼。如果Omniture負責製作所有昂貴通話的用戶界面組件,那麼我認爲你可以做的事情不多。 – 2010-04-19 20:56:22

0

我假設所有組件在頁面加載時都會進行AJAX調用並異步加載。

考慮有N個被加載的組件。因此,將有N個對服務器進行的AJAX調用。

在當前的實現中,在成功加載每個組件時,調用Omniture。

大多數瀏覽器允許大約最多2-5個到服務器的活動連接。因此,上述N個呼叫將一次在2-5個併發呼叫中執行,並且不會保證此呼叫完成時的訂單。

我們需要有一個機制來攔截AJAX調用來加載組件,所以我們可以維護正在進行的這些調用的列表以及已完成調用的列表。

一旦正在進行的調用清單的計數爲零,所有組件都已加載,並且我們已經完成的AJAX調用列表中的每個已加載組件的信息。

使用每個加載組件的信息列表,如果它需要API,則對Omniture進行一次調用。如果Omniture沒有批量調用API,請在服務器上調用中間門面,這將反覆調用Omniture。

Have an API that will be used by components to make AJAX calls 
Each time AJAX request is made for a component to load [new Ajax.Request(...)], 
    API adds component request info entry to requestInProgressList 
Each time AJAX request is for a component is complete (function onComplete(...) callback), 
    API moves component request info entry from requestInProgressList to requestCompleteList 
    IF requestInProgressList.count == 0 // No more pending requests 
    THEN 
     From requestCompleteList, collect the information for all the components into variable dataOmniture 
     Clear requestCompleteList 
     Make a call to Omniture to send dataOmniture information 
    END 
+0

這是否編譯? – 2010-04-21 19:59:42

+0

你能更清楚地解釋你的算法嗎? – Rachel 2010-04-21 20:42:49

+0

@JC:這是一個算法,它不會編譯。你需要在JavaScript中實現它才能運行。 – 2010-04-22 16:03:29

相關問題