Suche senden
Hochladen
Javascript autoload
•
21 gefällt mir
•
2,193 views
jay li
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 62
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Node way
Node way
Ethan Zhang
學好 node.js 不可不知的事
學好 node.js 不可不知的事
Ben Lue
Koa 正在等一個人
Koa 正在等一個人
Fred Chien
advanced introduction to codeigniter
advanced introduction to codeigniter
Bo-Yi Wu
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
Django step0
Django step0
永昇 陳
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
Bo-Yi Wu
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
Empfohlen
Node way
Node way
Ethan Zhang
學好 node.js 不可不知的事
學好 node.js 不可不知的事
Ben Lue
Koa 正在等一個人
Koa 正在等一個人
Fred Chien
advanced introduction to codeigniter
advanced introduction to codeigniter
Bo-Yi Wu
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
Django step0
Django step0
永昇 陳
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
Bo-Yi Wu
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
Jackson Tian
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
Ching Yi Chan
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
Joseph Chiang
Laravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdf
NCUDSC
程式人雜誌 2015年三月
程式人雜誌 2015年三月
鍾誠 陳鍾誠
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
Shihpeng Lin
那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful
功豪 魏
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
Kejun Zhang
PHPUnit 入門介紹
PHPUnit 入門介紹
Jace Ju
Android vs e pub
Android vs e pub
永昇 陳
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1
modou li
webpack 入門
webpack 入門
Anna Su
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
zhangdaiping
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
LiviaLiaoFontech
Script with engine
Script with engine
Webrebuild
My DevOps Tour 1.0
My DevOps Tour 1.0
Chu-Siang Lai
前端工程開發實務訓練
前端工程開發實務訓練
Joseph Chiang
JavaScript Code Quality
JavaScript Code Quality
Joseph Chiang
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
Joseph Chiang
Js doc toolkit
Js doc toolkit
jay li
赤骥 用户研究入门
赤骥 用户研究入门
jay li
Weitere ähnliche Inhalte
Was ist angesagt?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
Jackson Tian
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
Ching Yi Chan
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
Joseph Chiang
Laravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdf
NCUDSC
程式人雜誌 2015年三月
程式人雜誌 2015年三月
鍾誠 陳鍾誠
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
Shihpeng Lin
那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful
功豪 魏
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
Kejun Zhang
PHPUnit 入門介紹
PHPUnit 入門介紹
Jace Ju
Android vs e pub
Android vs e pub
永昇 陳
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1
modou li
webpack 入門
webpack 入門
Anna Su
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
zhangdaiping
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
LiviaLiaoFontech
Script with engine
Script with engine
Webrebuild
My DevOps Tour 1.0
My DevOps Tour 1.0
Chu-Siang Lai
前端工程開發實務訓練
前端工程開發實務訓練
Joseph Chiang
JavaScript Code Quality
JavaScript Code Quality
Joseph Chiang
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
Joseph Chiang
Was ist angesagt?
(20)
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
Laravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdf
程式人雜誌 2015年三月
程式人雜誌 2015年三月
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
PHPUnit 入門介紹
PHPUnit 入門介紹
Android vs e pub
Android vs e pub
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1
webpack 入門
webpack 入門
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
Script with engine
Script with engine
My DevOps Tour 1.0
My DevOps Tour 1.0
前端工程開發實務訓練
前端工程開發實務訓練
JavaScript Code Quality
JavaScript Code Quality
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
Andere mochten auch
Js doc toolkit
Js doc toolkit
jay li
赤骥 用户研究入门
赤骥 用户研究入门
jay li
卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎
jay li
潜意识设计
潜意识设计
jay li
F2e security
F2e security
jay li
Yui3简介
Yui3简介
jay li
Andere mochten auch
(6)
Js doc toolkit
Js doc toolkit
赤骥 用户研究入门
赤骥 用户研究入门
卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎
潜意识设计
潜意识设计
F2e security
F2e security
Yui3简介
Yui3简介
Ähnlich wie Javascript autoload
第三方内容开发最佳实践
第三方内容开发最佳实践
taobao.com
JavaScript Engine
JavaScript Engine
jay li
用Jquery实现拖拽层
用Jquery实现拖拽层
yiditushe
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
Joseph Chiang
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
Event proxy introduction
Event proxy introduction
mysqlops
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
Jackson Tian
Spring 2.x 中文
Spring 2.x 中文
Guo Albert
Kissy design
Kissy design
yiming he
Javascript primer plus
Javascript primer plus
Dongxu Yao
Node js实践
Node js实践
myzykj
Underscore
Underscore
cazhfe
Lucene 全文检索实践
Lucene 全文检索实践
yiditushe
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
wtxidian
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
鍾誠 陳鍾誠
程式人雜誌 2015年五月
程式人雜誌 2015年五月
鍾誠 陳鍾誠
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解
zany_hui
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
fangdeng
Javascript之昨是今非
Javascript之昨是今非
Tony Deng
jQuery介绍@disandu.com
jQuery介绍@disandu.com
Think hy
Ähnlich wie Javascript autoload
(20)
第三方内容开发最佳实践
第三方内容开发最佳实践
JavaScript Engine
JavaScript Engine
用Jquery实现拖拽层
用Jquery实现拖拽层
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Event proxy introduction
Event proxy introduction
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
Spring 2.x 中文
Spring 2.x 中文
Kissy design
Kissy design
Javascript primer plus
Javascript primer plus
Node js实践
Node js实践
Underscore
Underscore
Lucene 全文检索实践
Lucene 全文检索实践
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
程式人雜誌 2015年五月
程式人雜誌 2015年五月
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
Javascript之昨是今非
Javascript之昨是今非
jQuery介绍@disandu.com
jQuery介绍@disandu.com
Mehr von jay li
犀牛书第六版
犀牛书第六版
jay li
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
jay li
Jswebapps
Jswebapps
jay li
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
jay li
Responsive Web UI Design
Responsive Web UI Design
jay li
深入剖析浏览器
深入剖析浏览器
jay li
HTML/CSS/JS基础
HTML/CSS/JS基础
jay li
淘宝前端技术巡礼
淘宝前端技术巡礼
jay li
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟
jay li
编码大全 拔赤
编码大全 拔赤
jay li
小控件、大学问
小控件、大学问
jay li
Mobile UI design and Developer
Mobile UI design and Developer
jay li
Html5form
Html5form
jay li
Slide
Slide
jay li
新业务新员工培训 Banner设计
新业务新员工培训 Banner设计
jay li
夏之 专题设计
夏之 专题设计
jay li
Ecmascript
Ecmascript
jay li
2011彩票首页开发实践
2011彩票首页开发实践
jay li
Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器
jay li
Html&css培训 舒克
Html&css培训 舒克
jay li
Mehr von jay li
(20)
犀牛书第六版
犀牛书第六版
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
Jswebapps
Jswebapps
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
Responsive Web UI Design
Responsive Web UI Design
深入剖析浏览器
深入剖析浏览器
HTML/CSS/JS基础
HTML/CSS/JS基础
淘宝前端技术巡礼
淘宝前端技术巡礼
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟
编码大全 拔赤
编码大全 拔赤
小控件、大学问
小控件、大学问
Mobile UI design and Developer
Mobile UI design and Developer
Html5form
Html5form
Slide
Slide
新业务新员工培训 Banner设计
新业务新员工培训 Banner设计
夏之 专题设计
夏之 专题设计
Ecmascript
Ecmascript
2011彩票首页开发实践
2011彩票首页开发实践
Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器
Html&css培训 舒克
Html&css培训 舒克
Javascript autoload
1.
JavaScript Autoload
更好的组织你的 JavaScript文件 拔赤 – F2E@Taobao 2011-08
2.
ongoingproject http://ued.taobao.com/javascript
http://jayli.github.com/jswebapps @jayli F2E & Translator htt[p://jayli.github.com bachi@taobao.com
3.
4.
静态语言 vs 动态语言
5.
如何载入外部文件/包?
6.
PHP <?php
inlcude(‘config.php’); include(‘head.php’); include(‘sidebar.php’); include(‘main_content.php’); Include(‘sth_section.php’); //other logic ?>
7.
C++ #include
<fstream> #include <sstream> #include <time.h> #include <stdio.h> #include <string.h> int main(int argc,char **argv){ //main logic… }
8.
Python import dump.log import io.xml import
io.json from bean import * From mod1 import * # main logic…
9.
PHP文件依赖
config.php sitenav.php index.php header.php channel.php content.php section.php
10.
JavaScript? <script src=‘core.js’ /> <script
src=‘dom.js’ /> <script src=‘util.js’ /> <script src=‘selection.js’ /> <script src=‘editor.js’ /> <script> //main logic… </script>
11.
JavaScript文件依赖 ?
selection.js dom.js style.js editor.js plugin.js event.js editor‐util.js core.js browser.js
12.
JavaScriptLoader YUI Loader
http://developer.yahoo.com/yui/3 Yepnope.js http://yepnopejs.com SeaJS http://seajs.com
13.
YUILoader http://developer.yahoo.com/yui/3
14.
Loader.add({ ‘base’:{
path:’base.js’, requires:[‘dom’,’node’,’io’] }, ‘pagination’:{ path:’pagination-v121.js’, requires:[‘page-skin’,’node’,’base’] } //… });
15.
异步载入文件 Loader.use(‘pagination’,‘dump’,function(Y){
//main logic… });
16.
Why异步?
17.
function getScript(url,callback){
var el = $.createElement(‘script’); el.src = url; el.onload = function(){ callback(); }; document.head.appendChild(el); }
18.
除了html中的<script>标签 JavaScript文件载入都是异步
19.
并行 or串行 ?
20.
并行载入文件 getScritp(‘file1.js’); getScript(‘file2.js’); getScript(‘file3.js’); … //main logic ?
21.
串行载入文件 getScritp(‘file1.js’,function(){ getScript(‘file2.js’,function(){
… getScript(‘fileN.js’,function(){ //main logic… }); }); });
22.
可以这样串行! getScritp( ‘file1.js’,
‘file2.js’, ‘file3.js’,… function(){ //main logic… } );
23.
Yepnope.js http://yepnopejs.com
24.
Yepnope.js串行载入文件 yepnope([{ load:[’file1.js’,’file2.js’]
complete:function(){ //main logic… } }]);
25.
有条件载入文件?
26.
PHP <?php
if(condition1){ include(‘file1.php’); } else if (condition2){ include(‘file2.php’); } else { include(‘file3.php’); } //main logic… ?>
27.
Yepnope.js yepnope([{ test:condition,
yep:’file1.js’, // condition == true nope:’file2.js’,// condition == false complete:function(){ //main logic… } }]);
28.
任意条件 if(condition1){ getScript(‘file1.js’,foo); }else
if(condition2){ getScript(‘file2.js’,foo); }else{ getScript(‘file3.js’,foo); } function foo(){ //主逻辑必须写入回调中 //main logic… }
29.
可不可以不写回调?
30.
CommonJS http://www.commonjs.org
31.
CommonJS http://www.commonjs.org
32.
CommonJS ∈ServerSide JS
define(function(require){ require(‘./mod1’); //阻塞式载入 require(‘./mod2’); //阻塞式载入 //main logic… });
33.
CommonJS ∈Client SideJS?
34.
SeaJS http://seajs.com
35.
SeaJS Demo- Calculator
http://seajs.com/docs/demo/calculator/
36.
JavaScript文件依赖
jquery.js stdin.js calculate.js init.js math.js stdout.js
37.
init.js define(function(require){
require(‘./stdin’); //输入的逻辑 require(‘./stdout’); //输出的逻辑 }); stdin.js define(function(require){ require(‘./jquery’); //载入jQuery require(‘./calculator’); //计算器的逻辑 });
38.
JavaScript加载过程
39.
闭包的重要性 http://seajs.com/docs/commonjs-modules.html#why-wrapped
40.
SeaJS 伪阻塞 (init.js) define(function(require){
return; require(‘./mod1’); require(‘./mod2’); });
41.
Whatever GoodIdea!
42.
GoodIdea! •
串行加载JavaScript文件 • 统一的沙箱结构 • 对沙箱逻辑的“预解析” • 动态加载JavaScript文件
43.
降低 JS文件之间的耦合
44.
Problem!
45.
define(function(require){
require(‘./dom’); //必须手动引入文件? DOM.get(‘#id’); }); 使用某个类的前提是 必须知道它所在的模块/文件名称! 并手动载入模块/文件!
46.
Iwantthis! define(function(require){
require(‘./dom’); //知道了方法名,何必再需知道文件名? DOM.get(‘#id’); });
47.
CommonJS 文件名 =>命名空间
48.
PHPautoload http://cn.php.net/__autoload
49.
<?php function
__autoload($class_name) { if($class_name == ‘MyClass1’){ require_once(‘MyClass1.php’); }else if($class_name == ‘MyClass2’){ require_once(‘MC2_v102.php’); } } $obj = new MyClass1(); $obj2 = new MyClass2(); ?>
50.
Sandbox.JS https://github.com/jayli/sandbox
51.
autoload map function __autoload()
{ return { 'S.Carousel':'carousel.js', 'S.ColorPicker':'colorpicker-v1.js', 'S.Editor':'article.js' }; }
52.
SandboxJS Demo- autoload http://jayli.github.com/sandbox/examples/autoload/test/mojo.html
53.
<script src=“种子文件.js &
配置文件.js” /> <script> Sandbox.ready(function(S){ // 旋转木马模块 S.Carousel.init(‘bid’); //选择颜色模块 S.ColorPicker(‘cid’); //编辑器 S.Editor(‘eid’,'淘宝UED'); }); </script>
54.
JavaScriptAutoload •
代码解耦更充分 • 开发者记忆负担最低 • 免除基础库升级更改文件名的麻烦 • 享受动态语言编程 • …
55.
Ok,开始享受编程?
56.
Warning !!!
57.
JavaScriptAutoload 的不足 •
串行加载JS- 速度是个问题 • 伪阻塞 - 客户端无“真”阻塞 • 对包装器的支持不好(Wrap(dom)) • 对链式调用支持不好
58.
适用 JavaScriptAutoload 的场景
• 内部系统 – 对性能要求不高 • ServerSideJavaScript • 当你想要更纯粹的编程时 • …
59.
优化JS加载器的手段
SeaJS - spm YUI3 - configurator CDN - Combo Handler
60.
Enjoyit,Justforfun~
61.
ref http://developer.yahoo.com/yui/3 http://yepnopejs.com http://seajs.com https://github.com/seajs/spm https://github.com/jayli/sandbox http://www.commonjs.org http://cn.php.net/__autoload
62.
@jayli
F2E & Translator htt[p://jayli.github.com bachi@taobao.com
Jetzt herunterladen