SlideShare una empresa de Scribd logo
1 de 42
从问题开始 前端架构、框架与库的实战 周爱民 愚公 aimingoo aiming@gmail.com aimingoo.spaces.live.com ….
回顾 ,[object Object]
架构 = ?
有感、有理、有道:你在哪里?
我们在哪里?
什么是真相?
架构,把握问题的关键,平衡设计。,[object Object]
把握
问题
关键
平衡
设计
问题?
设计?
架构?,[object Object]
库
一行ajax代码 function(url) {   with (new XMLHttpRequest())     return open("GET", url, false), send(null), responseText; }
问题是什么? ,[object Object]
作为代码行重用
作为函数调用重用
……
我们能不能控制它?
环境限制/兼容性?,[object Object]
问题是什么? ,[object Object]
应用层的代码难于控制整个HTTP请求的全程
只支持特定的通讯协议
对Pool有过于明显的依赖
…
问题:
抽象只表达了应用的需要,而非对核心功能的封装,[object Object]
new Ajax(url).onreadystatechange = function(response) {  ...}
方案:设所有的调用都可以使用OnResponse的方式返回.,[object Object]
Qomo V2的设计 vardoRequest = function(url) {  // [,data] // $assert(!this.get('async'), ['need not async!']); varxmlHttp = this.get('XMLHTTP'); this.get('_open').call(this, xmlHttp, arguments); this.get('_send').call(this, xmlHttp, arguments); this.get('_resp').call(this, xmlHttp, …);   } vargetResult = function(url) {     return doRequest.apply(this, arguments);   } this.Create = function() { var AJAX = this.get('XMLHTTPOBJECT'); this.set('XMLHTTP', (typeof AJAX=='function') 	? new AJAX() : new ActiveXObject(AJAX)); this.getResult = getResult;   } });
Qomo V2的设计 THttpRequestAsync = Class(THttpRequest, function() { varonreadystatechange = function(url, state) {     if (state == 4) { this.get('_resp').call(this, xmlHttp, …);   … var _changer = function(req, url) {     return function() { req.OnReadyStateChange(url,  …);   … vardoRequest = function(url) {  // [,data]     // $assert(this.get('async'), ['need async!']); varxmlHttp = this.get('XMLHTTP'); this.get('_open').call(this, xmlHttp, arguments); xmlHttp.onreadystatechange = _changer(this, url); this.get('_send').call(this, xmlHttp, arguments);   } this.OnReadyStateChange = NullFunction; this.Create = function() { this.inherited(); this.getResult = …; // rewrite, call doRequest this.OnReadyStateChange.add(onreadystatechange);   } });
Qomo V2的设计 IHttpRequest = function() { this.getResult =  this.OnResponse = this.OnSetRequestHeader = Abstract } IHttpRequestAsync = function() { this.getResult =  this.OnResponse = this.OnSetRequestHeader = this.OnReadyStateChange = Abstract }
Qomo V2的设计 function _POST() {   _set('METHOD', 'POST');   _set('_send', function(ajx, args) { ajx.send(args[1] || '') }); }   } /* this.Create = function() { … */ } THttpPost = Class(THttpRequest, _POST); THttpPostAsync = Class(THttpRequestAsync, _POST);
Qomo V2的设计 // IHttpGet = IHttpPost = IHttpRequest THttpGet = Class(THttpRequest, NullFunction); THttpPost = Class(THttpRequest, _POST); // IHttpGetAsync = IHttpPostAsync = IHttpRequestAsync THttpGetAsync = Class(THttpRequestAsync, NullFunction); THttpPostAsync = Class(THttpRequestAsync, _POST); THttpRequest THttpGet THttpPost THttpRequestAsync THttpGetAsync THttpPostAsync
发生了什么? ,[object Object]
有没有设计过程?
有没有架构过程?
……
问题:我们还有什么没有做?,[object Object]

Más contenido relacionado

La actualidad más candente

LazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHPLazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHP
Lin Yo-An
 
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法
crasysatan
 
.Net 技術研討(linq與架構開發)
.Net 技術研討(linq與架構開發).Net 技術研討(linq與架構開發)
.Net 技術研討(linq與架構開發)
Gelis Wu
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
keelii
 
Shell脚本
Shell脚本Shell脚本
Shell脚本
bj
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
QLeelulu
 

La actualidad más candente (20)

论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。
 
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式
 
在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
 
Optimzing mysql
Optimzing mysqlOptimzing mysql
Optimzing mysql
 
Javascript Training
Javascript TrainingJavascript Training
Javascript Training
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
 
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
 
Maintainable Javascript
Maintainable JavascriptMaintainable Javascript
Maintainable Javascript
 
LazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHPLazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHP
 
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
Programming python - part 1
Programming python - part 1Programming python - part 1
Programming python - part 1
 
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
 
.Net 技術研討(linq與架構開發)
.Net 技術研討(linq與架構開發).Net 技術研討(linq與架構開發)
.Net 技術研討(linq與架構開發)
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
COSCUP: Metaprogramming in Julia
COSCUP: Metaprogramming in JuliaCOSCUP: Metaprogramming in Julia
COSCUP: Metaprogramming in Julia
 
Bash shell script 教學
Bash shell script 教學Bash shell script 教學
Bash shell script 教學
 
Shell脚本
Shell脚本Shell脚本
Shell脚本
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 

Similar a 从问题开始,谈前端架构

关于Js的跨域操作
关于Js的跨域操作关于Js的跨域操作
关于Js的跨域操作
王 承石
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
Zhi Zhong
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
香港六合彩香港六合彩
香港六合彩
aaveow
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
yiditushe
 
Introduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDKIntroduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDK
維佋 唐
 
GTest交流与经验总结
GTest交流与经验总结GTest交流与经验总结
GTest交流与经验总结
coderzh
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
jay li
 

Similar a 从问题开始,谈前端架构 (20)

关于Js的跨域操作
关于Js的跨域操作关于Js的跨域操作
关于Js的跨域操作
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
让我们的页面跑得更快
让我们的页面跑得更快让我们的页面跑得更快
让我们的页面跑得更快
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
ev2oik
ev2oikev2oik
ev2oik
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
 
javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当
 
Introduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDKIntroduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDK
 
GTest交流与经验总结
GTest交流与经验总结GTest交流与经验总结
GTest交流与经验总结
 
Glider
GliderGlider
Glider
 
YUI ─ 阿大
YUI ─ 阿大YUI ─ 阿大
YUI ─ 阿大
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
 
Arduino程式快速入門
Arduino程式快速入門Arduino程式快速入門
Arduino程式快速入門
 
Sun java
Sun javaSun java
Sun java
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skill
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 

Más de 裕波 周

白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
裕波 周
 
彪叔 [2010]webrebuild
彪叔 [2010]webrebuild彪叔 [2010]webrebuild
彪叔 [2010]webrebuild
裕波 周
 

Más de 裕波 周 (17)

web标准化交流会上海站bobby分享
web标准化交流会上海站bobby分享web标准化交流会上海站bobby分享
web标准化交流会上海站bobby分享
 
web标准化交流会bobby分享
web标准化交流会bobby分享web标准化交流会bobby分享
web标准化交流会bobby分享
 
前端架构漫谈
前端架构漫谈前端架构漫谈
前端架构漫谈
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
 
彪叔 [2010]webrebuild
彪叔 [2010]webrebuild彪叔 [2010]webrebuild
彪叔 [2010]webrebuild
 
Scrum敏捷项目管理
Scrum敏捷项目管理Scrum敏捷项目管理
Scrum敏捷项目管理
 
移动设备web重构
移动设备web重构移动设备web重构
移动设备web重构
 
重温网站重构
重温网站重构重温网站重构
重温网站重构
 
从问题开始,前端,架构、框架与库的实战
从问题开始,前端,架构、框架与库的实战从问题开始,前端,架构、框架与库的实战
从问题开始,前端,架构、框架与库的实战
 
Ie9 overview
Ie9 overviewIe9 overview
Ie9 overview
 
《一专多长》——Twinsen[梁璟彪]
《一专多长》——Twinsen[梁璟彪]《一专多长》——Twinsen[梁璟彪]
《一专多长》——Twinsen[梁璟彪]
 
浏览器兼容性问题简介 --- 黄昊
浏览器兼容性问题简介 --- 黄昊浏览器兼容性问题简介 --- 黄昊
浏览器兼容性问题简介 --- 黄昊
 
揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍
 
网站重构Whoami ---- 偷米饭
网站重构Whoami ---- 偷米饭网站重构Whoami ---- 偷米饭
网站重构Whoami ---- 偷米饭
 
分层语义化模板实践 ---- 张克军
分层语义化模板实践 ---- 张克军分层语义化模板实践 ---- 张克军
分层语义化模板实践 ---- 张克军
 

从问题开始,谈前端架构