Javascript 优化理解API

Javascript 优化理解API,javascript,api,optimizely,Javascript,Api,Optimizely,我试图更好地理解optimizely api是如何工作的。我是个新手。所以,如果我问一些非常明显的问题,请原谅 但我认为API是通过使用一个optimizely对象工作的,该对象有两个方法get和push,以及一个数据对象。但后来我在optimizely站点上看到了这段代码,它似乎在将变量窗口[optimizely]分配给数组[]。不应该是{}而不是[ ]。请帮忙 var activated = function(event) { // The Optimizely snippet has be

我试图更好地理解optimizely api是如何工作的。我是个新手。所以,如果我问一些非常明显的问题,请原谅

但我认为API是通过使用一个optimizely对象工作的,该对象有两个方法get和push,以及一个数据对象。但后来我在optimizely站点上看到了这段代码,它似乎在将变量窗口[optimizely]分配给数组[]。不应该是{}而不是[ ]。请帮忙

var activated = function(event) {
// The Optimizely snippet has been activated.
var visitorId = window.optimizely.get('visitor_id').randomId;
console.log("The visitor ID is: " + visitorId);
};

window["optimizely"] = window["optimizely"] || []; 
// SHOULDN"T THE ABOVE BE **window["optimizely"] = window["optimizely"] || {}
window["optimizely"].push({
type: "addListener",
filter: {
  type: "lifecycle",
  name: "activated"
},
// Add the activated function as a handler.
handler: activated
});

window["optimizely"].push(['trackEvent', 'watchedVideo']);
(以下是指Optimizely X snippet JS API。)

对于那些寻求与Optimizely snippet的API交互的人,有两个执行阶段需要记住:

  • 预初始化:浏览器评估Optimizely代码段之前的时间。大多数人在文档的
    中都有
    标记,并且它是同步评估的。在本例中,出现在
    script
    标记上方的所有JS代码都是属于此阶段的代码
  • 初始化后:计算Optimizely代码段后的时间。对于上面描述的常见情况,这是
    script
    标记下面的所有内容。尼特:这实际上是一种简化;JSAPI实际上在初始化的生命周期钩子之后的稍早时间就可用了
  • 在某些情况下,您希望在Optimizely初始化之前(即,在上面的第1阶段),对API的调用进行“预推”或排队。此时,您可以编写JS,将
    window.optimizely
    设置为一个API调用数组(每个调用都是一个对象)

    在初始求值期间,Optimizely代码段将使用
    窗口中存在的任何预推式API调用。Optimizely
    数组(如果存在),然后将其分配给
    窗口。Optimizely
    具有整个文档中记录的
    get
    函数的对象。因此,初始化后评估的代码应该期望与初始化的API进行交互,
    optimizely.get(…)

    同样值得强调的是,在两个阶段进行API调用的方法表面上彼此相似:pre-init选项是一个数组,因此有一个
    push
    方法;初始化后可用的API对象也有一个
    push
    方法。它们都采用相同的参数:一个定义API调用的对象

    在您给出的示例中,向
    激活的
    生命周期钩子注册的API调用被预推送到
    窗口。优化
    预推API调用数组。当浏览器计算代码段时,它将执行任何此类调用

    请让我知道这是否有意义

    来源:我在Optimizely的团队中负责代码片段。

    (以下是Optimizely X代码片段JSAPI。)

    对于那些寻求与Optimizely snippet的API交互的人,有两个执行阶段需要记住:

  • 预初始化:浏览器评估Optimizely代码段之前的时间。大多数人在文档的
    中都有
    标记,并且它是同步评估的。在本例中,出现在
    script
    标记上方的所有JS代码都是属于此阶段的代码
  • 初始化后:计算Optimizely代码段后的时间。对于上面描述的常见情况,这是
    script
    标记下面的所有内容。尼特:这实际上是一种简化;JSAPI实际上在初始化的生命周期钩子之后的稍早时间就可用了
  • 在某些情况下,您希望在Optimizely初始化之前(即,在上面的第1阶段),对API的调用进行“预推”或排队。此时,您可以编写JS,将
    window.optimizely
    设置为一个API调用数组(每个调用都是一个对象)

    在初始求值期间,Optimizely代码段将使用
    窗口中存在的任何预推式API调用。Optimizely
    数组(如果存在),然后将其分配给
    窗口。Optimizely
    具有整个文档中记录的
    get
    函数的对象。因此,初始化后评估的代码应该期望与初始化的API进行交互,
    optimizely.get(…)

    同样值得强调的是,在两个阶段进行API调用的方法表面上彼此相似:pre-init选项是一个数组,因此有一个
    push
    方法;初始化后可用的API对象也有一个
    push
    方法。它们都采用相同的参数:一个定义API调用的对象

    在您给出的示例中,向
    激活的
    生命周期钩子注册的API调用被预推送到
    窗口。优化
    预推API调用数组。当浏览器计算代码段时,它将执行任何此类调用

    请让我知道这是否有意义


    来源:我在Optimizely的团队中工作,该团队拥有该片段。

    这很有帮助,也很聪明。看起来google analytics使用了同样的技巧。对吗?var _gaq=_gaq | |[]_gaq推送(['''u setAccount','UA-XXXXX-X'])_gaq.push([''u trackPageview']);我现在明白了在初始化前推送的必要性。但是在后初始化阶段,为什么要使用push函数呢。为什么不简单地使用get函数从本地数据对象读取数据呢?我认为使用一个用于交互事件的公共接口更容易管理。当一个语法在所有情况下都有效时,为什么还要记录两个语法呢?这既有用又聪明。看起来google analytics使用了同样的技巧。对吗?var _gaq=_gaq | |[]_gaq推送(['''u setAccount','UA-XXXXX-X'])_gaq.push([''u trackPageview']);我现在明白了在初始化前推送的必要性。但是在后初始化阶段,为什么要使用push函数呢。为什么不简单地使用get函数从本地数据对象读取数据呢?我认为使用一个用于交互事件的公共接口更容易管理