SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Downloaden Sie, um offline zu lesen
JavaScript Autoload
  更好的组织你的 JavaScript文件
       拔赤 – F2E@Taobao




                          2011-08
ongoingproject




http://ued.taobao.com/javascript   http://jayli.github.com/jswebapps

                                                                    @jayli
                                                        F2E & Translator
                                                 htt[p://jayli.github.com
                                                       bachi@taobao.com
静态语言
  vs
动态语言
如何载入外部文件/包?
PHP

<?php
   inlcude(‘config.php’);
   include(‘head.php’);
   include(‘sidebar.php’);
   include(‘main_content.php’);
   Include(‘sth_section.php’);

     //other logic
?>
C++
#include   <fstream>
#include   <sstream>
#include   <time.h>
#include   <stdio.h>
#include   <string.h>

int main(int argc,char **argv){
     //main logic…
}
Python

import dump.log
import io.xml
import io.json
from bean import *
From mod1 import *

# main logic…
PHP文件依赖

            config.php
                            sitenav.php

index.php
               header.php     channel.php



            content.php        section.php
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>
JavaScript文件依赖 ?

              selection.js
                                dom.js
                                 style.js
editor.js
                  plugin.js       event.js



               editor‐util.js      core.js
                                   browser.js
JavaScriptLoader

YUI Loader
  http://developer.yahoo.com/yui/3
Yepnope.js
  http://yepnopejs.com
SeaJS
  http://seajs.com
YUILoader




http://developer.yahoo.com/yui/3
Loader.add({
  ‘base’:{
      path:’base.js’,
      requires:[‘dom’,’node’,’io’]
  },
  ‘pagination’:{
      path:’pagination-v121.js’,
      requires:[‘page-skin’,’node’,’base’]
  }
  //…
});
异步载入文件

Loader.use(‘pagination’,‘dump’,function(Y){
     //main logic…
});
Why异步?
function getScript(url,callback){
  var el = $.createElement(‘script’);
  el.src = url;
  el.onload = function(){
     callback();
  };
  document.head.appendChild(el);
}
除了html中的<script>标签
JavaScript文件载入都是异步
并行 or串行 ?
并行载入文件
getScritp(‘file1.js’);
getScript(‘file2.js’);
getScript(‘file3.js’);
…
//main logic ?
串行载入文件
getScritp(‘file1.js’,function(){
  getScript(‘file2.js’,function(){
      …
      getScript(‘fileN.js’,function(){
           //main logic…
      });
  });
});
可以这样串行!
getScritp(
  ‘file1.js’,
  ‘file2.js’,
  ‘file3.js’,…
  function(){
     //main logic…
  }
);
Yepnope.js




http://yepnopejs.com
Yepnope.js串行载入文件

yepnope([{
  load:[’file1.js’,’file2.js’]
  complete:function(){
     //main logic…
  }
}]);
有条件载入文件?
PHP
<?php
   if(condition1){
      include(‘file1.php’);
   } else if (condition2){
      include(‘file2.php’);
   } else {
      include(‘file3.php’);
   }

     //main logic…

?>
Yepnope.js

yepnope([{
  test:condition,
  yep:’file1.js’, // condition == true
  nope:’file2.js’,// condition == false
  complete:function(){
     //main logic…
  }
}]);
任意条件
if(condition1){
  getScript(‘file1.js’,foo);
}else if(condition2){
  getScript(‘file2.js’,foo);
}else{
  getScript(‘file3.js’,foo);
}

function foo(){ //主逻辑必须写入回调中
  //main logic…
}
可不可以不写回调?
CommonJS




http://www.commonjs.org
CommonJS




http://www.commonjs.org
CommonJS ∈ServerSide JS

   define(function(require){
     require(‘./mod1’); //阻塞式载入
     require(‘./mod2’); //阻塞式载入

     //main logic…
   });
CommonJS ∈Client SideJS?
SeaJS




http://seajs.com
SeaJS Demo- Calculator




   http://seajs.com/docs/demo/calculator/
JavaScript文件依赖
                      jquery.js
           stdin.js

                      calculate.js
init.js


                                      math.js
                          stdout.js
init.js
define(function(require){
     require(‘./stdin’); //输入的逻辑
     require(‘./stdout’); //输出的逻辑
});


             stdin.js
define(function(require){
     require(‘./jquery’); //载入jQuery
     require(‘./calculator’); //计算器的逻辑
});
JavaScript加载过程
闭包的重要性




http://seajs.com/docs/commonjs-modules.html#why-wrapped
SeaJS 伪阻塞 (init.js)
define(function(require){
     return;
     require(‘./mod1’);
     require(‘./mod2’);
});
Whatever
GoodIdea!
GoodIdea!

•   串行加载JavaScript文件
•   统一的沙箱结构
•   对沙箱逻辑的“预解析”
•   动态加载JavaScript文件
降低 JS文件之间的耦合
Problem!
define(function(require){
     require(‘./dom’); //必须手动引入文件?
     DOM.get(‘#id’);
});




    使用某个类的前提是
 必须知道它所在的模块/文件名称!
   并手动载入模块/文件!
Iwantthis!

define(function(require){
     require(‘./dom’);

      //知道了方法名,何必再需知道文件名?
      DOM.get(‘#id’);
});
CommonJS


文件名 =>命名空间
PHPautoload




http://cn.php.net/__autoload
<?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();
?>
Sandbox.JS




https://github.com/jayli/sandbox
autoload map

function __autoload() {
  return {
     'S.Carousel':'carousel.js',
     'S.ColorPicker':'colorpicker-v1.js',
     'S.Editor':'article.js'
  };
}
SandboxJS Demo- autoload




http://jayli.github.com/sandbox/examples/autoload/test/mojo.html
<script src=“种子文件.js & 配置文件.js” />
<script>
Sandbox.ready(function(S){
  // 旋转木马模块
  S.Carousel.init(‘bid’);

 //选择颜色模块
 S.ColorPicker(‘cid’);

  //编辑器
  S.Editor(‘eid’,'淘宝UED');
});
</script>
JavaScriptAutoload

•   代码解耦更充分
•   开发者记忆负担最低
•   免除基础库升级更改文件名的麻烦
•   享受动态语言编程
•   …
Ok,开始享受编程?
Warning !!!
JavaScriptAutoload 的不足

 •   串行加载JS- 速度是个问题
 •   伪阻塞 - 客户端无“真”阻塞
 •   对包装器的支持不好(Wrap(dom))
 •   对链式调用支持不好
适用 JavaScriptAutoload 的场景

    •   内部系统 – 对性能要求不高
    •   ServerSideJavaScript
    •   当你想要更纯粹的编程时
    •   …
优化JS加载器的手段

    SeaJS - spm

YUI3 - configurator

CDN - Combo Handler
Enjoyit,Justforfun~
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
@jayli
       F2E & Translator
htt[p://jayli.github.com
      bachi@taobao.com

Weitere ähnliche Inhalte

Was ist angesagt?

淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 GradleJustin Lin
 
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 ShanghaiJackson Tian
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradleChing Yi Chan
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 
Laravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdfLaravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdfNCUDSC
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月鍾誠 陳鍾誠
 
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息Shihpeng Lin
 
那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful功豪 魏
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)Kejun Zhang
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹Jace Ju
 
Android vs e pub
Android vs e pubAndroid vs e pub
Android vs e pub永昇 陳
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1modou li
 
webpack 入門
webpack 入門webpack 入門
webpack 入門Anna Su
 
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程zhangdaiping
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3LiviaLiaoFontech
 
Script with engine
Script with engineScript with engine
Script with engineWebrebuild
 
前端工程開發實務訓練
前端工程開發實務訓練前端工程開發實務訓練
前端工程開發實務訓練Joseph Chiang
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code QualityJoseph Chiang
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練Joseph Chiang
 

Was ist angesagt? (20)

淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
 
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
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
Laravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdfLaravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdf
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月
 
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
 
那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
Android vs e pub
Android vs e pubAndroid vs e pub
Android vs e pub
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1
 
webpack 入門
webpack 入門webpack 入門
webpack 入門
 
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
 
Script with engine
Script with engineScript with engine
Script with engine
 
My DevOps Tour 1.0
My DevOps Tour 1.0My DevOps Tour 1.0
My DevOps Tour 1.0
 
前端工程開發實務訓練
前端工程開發實務訓練前端工程開發實務訓練
前端工程開發實務訓練
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code Quality
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
 

Andere mochten auch

Js doc toolkit
Js doc toolkitJs doc toolkit
Js doc toolkitjay li
 
赤骥 用户研究入门
赤骥 用户研究入门赤骥 用户研究入门
赤骥 用户研究入门jay li
 
卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎jay li
 
潜意识设计
潜意识设计潜意识设计
潜意识设计jay li
 
F2e security
F2e securityF2e security
F2e securityjay li
 
Yui3简介
Yui3简介Yui3简介
Yui3简介jay li
 

Andere mochten auch (6)

Js doc toolkit
Js doc toolkitJs doc toolkit
Js doc toolkit
 
赤骥 用户研究入门
赤骥 用户研究入门赤骥 用户研究入门
赤骥 用户研究入门
 
卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎
 
潜意识设计
潜意识设计潜意识设计
潜意识设计
 
F2e security
F2e securityF2e security
F2e security
 
Yui3简介
Yui3简介Yui3简介
Yui3简介
 

Ähnlich wie Javascript autoload

第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Enginejay li
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层yiditushe
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型Jackson Tian
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introductionmysqlops
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianJackson Tian
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
Underscore
UnderscoreUnderscore
Underscorecazhfe
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架wtxidian
 
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號鍾誠 陳鍾誠
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解zany_hui
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架fangdeng
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
jQuery介绍@disandu.com
jQuery介绍@disandu.comjQuery介绍@disandu.com
jQuery介绍@disandu.comThink hy
 

Ähnlich wie Javascript autoload (20)

第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Engine
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introduction
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
Kissy design
Kissy designKissy design
Kissy design
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Node js实践
Node js实践Node js实践
Node js实践
 
Underscore
UnderscoreUnderscore
Underscore
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
jQuery介绍@disandu.com
jQuery介绍@disandu.comjQuery介绍@disandu.com
jQuery介绍@disandu.com
 

Mehr von jay li

犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版jay li
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践jay li
 
Jswebapps
JswebappsJswebapps
Jswebappsjay li
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascriptjay li
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器jay li
 
HTML/CSS/JS基础
HTML/CSS/JS基础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 DeveloperMobile UI design and Developer
Mobile UI design and Developerjay li
 
Html5form
Html5formHtml5form
Html5formjay li
 
新业务新员工培训 Banner设计
新业务新员工培训   Banner设计新业务新员工培训   Banner设计
新业务新员工培训 Banner设计jay li
 
夏之 专题设计
夏之 专题设计夏之 专题设计
夏之 专题设计jay li
 
Ecmascript
EcmascriptEcmascript
Ecmascriptjay li
 
2011彩票首页开发实践
2011彩票首页开发实践2011彩票首页开发实践
2011彩票首页开发实践jay li
 
Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器jay li
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克jay li
 

Mehr von jay li (20)

犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
Jswebapps
JswebappsJswebapps
Jswebapps
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器
 
HTML/CSS/JS基础
HTML/CSS/JS基础HTML/CSS/JS基础
HTML/CSS/JS基础
 
淘宝前端技术巡礼
淘宝前端技术巡礼淘宝前端技术巡礼
淘宝前端技术巡礼
 
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟
 
编码大全 拔赤
编码大全 拔赤编码大全 拔赤
编码大全 拔赤
 
小控件、大学问
小控件、大学问小控件、大学问
小控件、大学问
 
Mobile UI design and Developer
Mobile UI design and DeveloperMobile UI design and Developer
Mobile UI design and Developer
 
Html5form
Html5formHtml5form
Html5form
 
Slide
SlideSlide
Slide
 
新业务新员工培训 Banner设计
新业务新员工培训   Banner设计新业务新员工培训   Banner设计
新业务新员工培训 Banner设计
 
夏之 专题设计
夏之 专题设计夏之 专题设计
夏之 专题设计
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
2011彩票首页开发实践
2011彩票首页开发实践2011彩票首页开发实践
2011彩票首页开发实践
 
Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器Web设计的画纸深入了解我们的显示器
Web设计的画纸深入了解我们的显示器
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克
 

Javascript autoload