SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
事件式编程

EVENTPROXY INTRODUCTION
About me

 @朴灵
 非资深前端工程师一枚
 就职于SAP Labs China
 从事Mobile Web App开发
 NodeJS痴迷者
 寄望打通前端JavaScript与NodeJS的隔阂,
 将NodeJS引荐给更多的前端工程师
Agenda

 史上最屎的代码
 单线程误解
 异步编程优势与问题
 用EventProxy来解决异步编程问题
  Assign
  AssignAlways
  After
史上最屎的代码




          http://www.douban.com/online/10917653/
JavaScript单线程的误解




              http://www.grati.org/?p=284
异步编程优势
 PHP
 $data = get_content(“foo”);
 $template = get_template(“bar”);
 JavaScript/NodeJS
 get_content(“foo”, function (data) {
    data = data;
 });
 get_template(“bar”, function (template){
    template = template;
 });
异步编程缺陷

get_content(“foo”, function (data) {
   var data = data;
   // bala….
   get_template(“bar”, function (template){
      var template = template;
      // bala….
      render(template, data);
   });
});
EventProxy设计目的


• 无阻塞/高性能
                                    避短
• 事件驱动/松散耦合          • 深度嵌套/代码耦合
• 并行执行               • 串行执行效率问题

     扬长

        项目地址 https://github.com/JacksonTian/eventproxy
EventProxy的assign方法
 var proxy = new EventProxy();
 proxy.assign(“template”, “data”, function (tmpl,
 data){
    render(tmpl, data);
 });
 proxy.trigger(“template”, template);
 proxy.trigger(“data”, data);



       分发 并行 合并 保证
       式  式  式  式
Assign的并行流程
EventProxy的assignAlways方法
 var proxy = new EventProxy();
 proxy.assignAlways(“template”, “data”, function
 (tmpl, data){
    render(tmpl, data);
 });

 适用于数据持续更新的场景
   前端搜索/排序
   数据更新(股票)
EventProxy的after方法
var proxy = new EventProxy();
var files = [“file1”, “file2”….];
proxy.after(“readfile”, files.length, function
(contents){
   combo(contents);
});
files.forEach(function (file, index){
   proxy.trigger(“readfile”, file);
});

 适用于相同事件多次触发,结果保证的场
 景
来点栗子




 Assign   AssignAlways   After
事件式编程问题

 阅读性
  N+1问题(一处合并,多处触发)
    逻辑代码分散性
 如何解决
  粒度划分
  模块隔离
  流程预规划
EventProxy introduction - JacksonTian

Mais conteúdo relacionado

Semelhante a EventProxy introduction - JacksonTian

从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
taobao.com
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
Frank Xu
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程
banq jdon
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
Cat Chen
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
jay li
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
Zhi Zhong
 
Script with engine
Script with engineScript with engine
Script with engine
Webrebuild
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
Dongxu Yao
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
Target Source
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
Jackson Tian
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
hua qiu
 

Semelhante a EventProxy introduction - JacksonTian (20)

从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
Mvc
MvcMvc
Mvc
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Berserk js
Berserk jsBerserk js
Berserk js
 
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js   Jackson Tian ShanghaiBrowser vs. Node.js   Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
 
Script with engine
Script with engineScript with engine
Script with engine
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
Ajax Lucence
Ajax LucenceAjax Lucence
Ajax Lucence
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 

Mais de Jackson Tian (9)

D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
(C)NodeJS
(C)NodeJS(C)NodeJS
(C)NodeJS
 
Mobile webapp&v5 html5_min
Mobile webapp&v5 html5_minMobile webapp&v5 html5_min
Mobile webapp&v5 html5_min
 
Nodejs异步原理和缺陷 - 赵成
Nodejs异步原理和缺陷 - 赵成Nodejs异步原理和缺陷 - 赵成
Nodejs异步原理和缺陷 - 赵成
 
Mongoskin - Guilin
Mongoskin - GuilinMongoskin - Guilin
Mongoskin - Guilin
 
MobileWebAppFramework_V5_design
MobileWebAppFramework_V5_designMobileWebAppFramework_V5_design
MobileWebAppFramework_V5_design
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
NodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 ShanghaiNodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 Shanghai
 
Ruby vs Node ShiningRay Shanghai
Ruby vs Node ShiningRay ShanghaiRuby vs Node ShiningRay Shanghai
Ruby vs Node ShiningRay Shanghai
 

EventProxy introduction - JacksonTian