我试图更好地理解optimizely是如何工作的。我是个新手。所以请原谅我在问一些很明显的事情。
但是我认为API的工作原理是使用一个optimizely对象,它有两个方法get和push,以及一个数据对象。但是,我在optimizely站点上看到了这段代码,它似乎在将t、窗口变量最优地分配给数组。不是应该是{}而不是。请帮帮忙
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']);
发布于 2017-08-17 18:46:23
(下面引用的是Optimizely片段JS。)
对于那些试图与最佳代码片段的API交互的人,有两个执行阶段需要记住:
<script>
中都有<head>
标记,并且它是同步计算的。在本例中,出现在script
标记上的所有JS代码都是处于此阶段的代码。script
标记下面的所有内容。nit:这实际上是一种简化;在初始化的生命周期钩子中,JS实际上更早一些可用。在某些情况下,人们希望在优化初始化之前(即在上面的第1阶段)之前,对API进行“预推”或排队调用。那时,您可以编写JS,将window.optimizely
设置为一个API调用数组(每个调用都是一个对象)。
在初始评估期间,优化片段将使用window.optimizely
数组中存在的任何预推API调用(如果存在的话),然后将包含在整个文档中的get
函数的对象分配给window.optimizely
。因此,对初始化后进行评估的代码应该与初始化的API optimizely.get(...)
交互。
还值得强调的是,在中进行API调用的方法从表面上看与阶段相似:pre选项是一个数组,push
方法也是如此;可用的API对象-init也有一个push
方法。它们都采用相同的参数:定义API调用的对象。
在您给出的示例中,向activated
生命周期挂钩注册的API调用被预推到预推API调用的window.optimizely
数组中。当浏览器评估代码段时,它将执行任何这样的调用。
请让我知道这是否有意义!
来源:我在Optimizely的团队工作,拥有这个代码片段。
https://stackoverflow.com/questions/45621293
复制相似问题