Upgrade to Pro — share decks privately, control downloads, hide ads and more …

广告投放代码和创意代码持续优化

d2forum
July 19, 2012
19k

 广告投放代码和创意代码持续优化

即便是JQuery对于第三方内容来说都过于庞大了,各种类库又有哪些功能最吸引第三方内容开发者?我们开发了一些小类库,又凭借着近两年社区中的一股小型化风潮选择了一些,对很多以往的代码进行了重构。这样我们解决了一系列问题,比如第三方代码阻滞页面部分无法长时间缓存,比如如何做到产品线之间广告创意共享,数据源切换问题。这里会重点介绍一个特别适合第三方内容的轻巧的Loader,因为在解决这些问题中它其发挥了至关重要的作用,而辅以Loader的各种离线预编译工具同样提高性能和开发效率的利器。

d2forum

July 19, 2012
Tweet

Transcript

  1. 关于我 李穆 花名: 李牧 邮箱: [email protected] 博客: http://limu.iteye.com 微博: @lenel

    迚入阿里系一直在广告线做前端 2007.01 雅虎 广告引擎团队 2007.05 阿里妈妈 广告引擎团队 2008.09 淘宝 广告技术部架构组 2011.06 一淘 UX北京团队 Velocity北京2010的分享:第三方广告代码稳定性和性能优化
  2. Tanx广告埋点代码 1.普通埋点 <script src="http://{host}/{path}?i={pid}"></script> 2.无阻埋点 <script> document.write('<a style="display:none !important" id="t-a-{id}"></a>');

    t_h = document.getElementsByTagName('head')[0]; t_s = document.createElement('script'); t_s.async = true; t_s.src = 'http://{host}/{path}?i={pid}'; if(t_h)t_h.insertBefore(t_s,t_h.firstChild); </script>
  3. 前提:第三方代码 速度<稳定<安全 问题:去除单点故障 方案:无阻加载 defer domScriptElement iframedJS 验证:兼容性 稳定性 速度

    解决附带新问题:广告所在位置,dom安全操作,html插入,css 冲突,埋点代码可读性 http://www.slideshare.net/leneli/ss-6084804 2010Velocity北京的分享集中在这个改变上
  4. 真的无解么? function iframedJS(s){ document.write("<iframe id= 'i'></iframe>"); var d = document.getElementById("i").contentWindow.document;

    d.write(‘<!doctype html><html><body>代码</body></html>'); window.setTimeout((function(){d.close();}),0); } 没有src的iframe的location和父页面相同,所以不存在跨域问题. iframe内的脚本下载对父页面其他内容而言是无阻滞的.
  5. 包内无限可扩展 => 模块名由包名,路径,文件名.三部分构成. {packagename} - [ {path_0} - ... -

    {path_n} - ] {filename} S.Config.lt_pkgs={ inf:"http://a.alimama.cn/kslite/", test:"http://demo.taobao.com/tbad/kslite/" } 模块"inf-a“: http://a.alimama.cn/kslite/inf/a.js 模块"test-t-1“: http://demo.taobao.com/tbad/kslite/test/t/1.js KsLite只有一种基于包前缀的模块命名规则
  6. 可扩展无限包 => package root router 在一个地址记录所有可用的包以及对应的class root. S.Config.lt_pkgrouter = http://a.alimama.cn/kslite/router.js

    S.mix(S.Config.lt_pkgs,{ pkg1:"http://a.alimama.cn/pkg1/", pkg2:"http://demo.taobao.com/tbad/pkg2/" }); 当自带S.Config.lt_pkgs没有相关配置时询问pkgrouter. KsLite对于包的无限扩展支持
  7. 当Loader遇到第三方内容开发  简化功能,求得Loader体积最小化  模块名至文件路径解析方法固定与Loader位置无关, 支持在一个文件中定义多个模块  Loader可以载入多次,首次载入之后的每次载入仅 做包路径配置扩展 

    Loader本身支持异步载入,提供onload事件  Loader代码可以永不改变 KsLite@Github: https://github.com/etaoux/kslite 当前版本的SeaJS同样满足这些要求 SeaJS@Github:https://github.com/seajs/seajs
  8. 高性能的创意轻盈稳定如一张静态图片 基础类库:  Loader:SeaJS  模板引擎:Mustache 高复用:  一个模块来自创意定制平台定制产生 

    其余模块皆可重用 性能:  只有一个纯静态http请求(动态数据源的 创意多一个动态数据请求)  整体加载量<10k,小于任一张商品图片 稳定性:  创意不依赖统一展现核心,稳定性如CDN 上一张普通商品图片