管理忽隱忽現情形

嘗試呈現個人化內容時,SDK必須確定沒有忽隱忽現的情形。 閃爍也稱為FOOC (原始內容Flash),是指在測試/個人化期間出現替代專案之前,先短暫地顯示原始內容。 SDK會嘗試將CSS樣式套用至頁面的元素,以確保這些元素會隱藏,直到成功呈現個人化內容為止。

處理忽隱忽現情況的方式,取決於您要以同步或非同步方式部署Web SDK。 檢查 <head> 標籤您的部署位置 alloy.js 或標籤載入器。 是否存在 async 中的屬性 <script> 標籤會判斷Web SDK是否以非同步方式載入。

<!-- This tag loads synchronously -->
<script src="https://assets.adobedtm.com/[...]/launch-example.min.js"></script>

<!-- This tag loads asynchronously -->
<script src="https://assets.adobedtm.com/[...]/launch-example.min.js" async></script>

<!-- This library loads synchronously -->
<script src="https://cdn1.adoberesources.net/alloy/2.14.0/alloy.min.js"></script>

<!-- This library loads asynchronously -->
<script src="https://cdn1.adoberesources.net/alloy/2.14.0/alloy.min.js" async></script>

管理同步部署的忽隱忽現問題

同步閃爍管理分為三個階段:

  1. 預先隱藏
  2. 正在預先處理
  3. 呈現

期間 預先隱藏階段,SDK會使用 prehidingStyle 設定屬性,用來建立HTML樣式標籤並將其附加至DOM,以確保隱藏頁面的所需區段。 如果您不確定頁面的哪些部分將會個人化,建議設定 prehidingStylebody { opacity: 0 !important }. 這可確保隱藏整個頁面。 然而,這也有不利的一面,會導致Lighthouse、網頁測試等工具報告的頁面轉譯效能不佳。 若要獲得最佳的頁面轉譯效能,建議設定 prehidingStyle 至包含個人化頁面部分的容器元素清單。

假設您有一個類似以下的HTML頁面,而且您只知道 barbazz 容器元素將永遠個人化:

<html>
  <head>
  </head>
  <body>
    <div id="foo">
      Foo foo foo
    </div>

    <div id="bar">
      Bar bar bar
    </div>

    <div id="bazz">
      Bazz bazz bazz
    </div>
  </body>
</html>

然後 prehidingStyle 應該設定為類似以下的專案 #bar, #bazz { opacity: 0 !important }.

一旦SDK收到來自伺服器的個人化內容, 前置處理階段 開始。 在此階段中,會預先處理回應,確保隱藏必須包含個人化內容的元素。 隱藏這些元素後,已根據下列專案建立的HTML樣式標籤: prehidingStyle 組態選項已移除,且會顯示HTML本文或隱藏的容器元素。

成功轉譯所有個人化內容後,或如果發生任何錯誤, 演算階段 開始。 所有先前隱藏的元素都會顯示,以確保頁面上沒有已被SDK隱藏的隱藏元素。

管理非同步部署的忽隱忽現問題

建議一律非同步載入SDK,以獲得最佳頁面轉譯效能。 不過,這對個人化內容的呈現有一些影響。 非同步載入SDK時,必須使用預先隱藏的程式碼片段。 您必須在HTML頁面的SDK之前新增預先隱藏的程式碼片段。 以下是隱藏整個內文的程式碼片段範例:

<script>
  !function(e,a,n,t){
    if (a) return;
    var i=e.head;if(i){
    var o=e.createElement("style");
    o.id="alloy-prehiding",o.innerText=n,i.appendChild(o),
    setTimeout(function(){o.parentNode&&o.parentNode.removeChild(o)},t)}}
    (document, document.location.href.indexOf("adobe_authoring_enabled") !== -1, "body { opacity: 0 !important }", 3000);
</script>

為了確保HTML本文或容器元素不會隱藏很長時間,預先隱藏程式碼片段會使用計時器,預設情況下會移除之後的程式碼片段 3000 毫秒。 此 3000 毫秒是等待時間的上限。 如果更快收到來自伺服器的回應並加以處理,則會儘快移除預先隱藏HTML樣式標籤。

recommendation-more-help
ad108910-6329-42f1-aa1d-5920a2b13636