22
为什么JavascriptJava更靠谱 11年10月21日星期五

09 julia 开源移动开发框架

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 09  julia 开源移动开发框架

为什么Javascript比Java更靠谱

11年10月21日星期五

Page 2: 09  julia 开源移动开发框架

Java/XML = Android

• Java本身的争议性

• Android类库设计:Subclassing

• XML事实上是为了机器间交流而设计的

11年10月21日星期五

Page 3: 09  julia 开源移动开发框架

Java

• 直到2.2才有了JIT,而且内存紧张的时候就不起作用

• Eclipse总有让人抓狂的理由

• met/src/cc/miankong/julia/...我们都是cd ../../../的“爱好者”

11年10月21日星期五

Page 4: 09  julia 开源移动开发框架

Javascript

• 要么正在使用,要么正在学习使用• 更好的跨平台兼容性• 动态类型,GUI开发表达能力更强

• 好用的编辑器很多• 使用Chrome就可以调试

• 缺点就是Julia的机会

11年10月21日星期五

Page 5: 09  julia 开源移动开发框架

Android类库

• ViewGroup到底是不是View?

• Subclassing:糟糕的选择

• Smalltalk没有选择subclassing

• iOS没有选择subclassing

11年10月21日星期五

Page 6: 09  julia 开源移动开发框架

Android类库setPositiveButton( android.R.string.ok, new AlertDialog.onClickListener() { public void onClick( DialogInterface d, int which) { ... }})

多余的onClickListener类。设计模式?其实这只是Java语言的限制带来的无奈选择。

11年10月21日星期五

Page 7: 09  julia 开源移动开发框架

Julia同样的功能只要在Controller里面写个方法就可以了touched: function(what) {

if (what === “1”) {

// ok

}

// cancel

}

11年10月21日星期五

Page 8: 09  julia 开源移动开发框架

XML

手工编写XML就是一种折磨<?xml version=”1.0” encoding=”utf-8”?><shape xmlns:android=”http://schemas.android.com/apk/res/android”android:shape=”rectangle”> <gradient android:startColor=”#414141” android:centerColor=”#202020” android:endColor=”#080808” android:angle=”270” /></shape>

11年10月21日星期五

Page 9: 09  julia 开源移动开发框架

Julia

HTML5/CSS3表达View<div class=”btn” data-touchable=”takePicture”>

<label class=”cam-gradient”></label>

</div>

11年10月21日星期五

Page 10: 09  julia 开源移动开发框架

Android的ListView

• Adapter模式反而造成编写大量重复的粘合代码

• 强类型特性造成了几乎每个ListView都需要编写自定义子类

11年10月21日星期五

Page 11: 09  julia 开源移动开发框架

11年10月21日星期五

Page 12: 09  julia 开源移动开发框架

Model + Template<ul class="table">

! ! {% for(var i=0; i < x.length; i++) { %}

! ! <li data-touchable="pushProfileView"

! ! ! data-user="{{ x[i].gid }}:{{ x[i].screenName }}">

! ! ! {% if (x[i].profileImageUrl) { %}

! ! ! ! <img src="{{ x[i].profileImageUrl }}">

! ! ! {% } %}

! ! ! <div><label>{{ x[i].screenName }}</label></div>

! ! ! <span class="more"></span>

! ! </li>

! ! {% } %}

</ul>

11年10月21日星期五

Page 13: 09  julia 开源移动开发框架

Model + Template

类似JSP一样的网页模版,实现了Model到View的灵活映射。

11年10月21日星期五

Page 14: 09  julia 开源移动开发框架

RESTful的ModelURL + 可选的Converter

refresh : function(postId, apiUrl) {

! ! var url = apiUrl

|| (appNamespace.HOST + "/api/met/get"),

! ! ! data = {id: postId};

! ! this.oauthREST(url, data, function(self, response) {

! ! ! self.patch(response);

! ! ! self.set({x: response});

! ! }, null);

! }

11年10月21日星期五

Page 15: 09  julia 开源移动开发框架

Julia的MVC

• 使用HTML5/CSS3描述View

• 支持REST的Model

• 类似JSP一样的Template

• 使用Delegation避免多余对象

11年10月21日星期五

Page 16: 09  julia 开源移动开发框架

Julia的SQLite接口

jsi.sqlInsert( "keyvalue", { key: appNamespace.SNAP_HINT_DISPLAYED_KEY, value: "1" }, function(lastRow){});

11年10月21日星期五

Page 17: 09  julia 开源移动开发框架

Julia的SQLite接口

• 异步操作,允许不同Table的并发读写

• 接口隐藏了多线程编程的大量重复代码• 比HTML5默认的Web Worker外加Web

Storage更加方便

11年10月21日星期五

Page 18: 09  julia 开源移动开发框架

Julia:速度优化• JS引擎的特点决定了多层次继承的代码运行速度慢,因此Julia在设计上尽可能避免了这种模式。

• 预编译的Template

• 缓存式的DOM修改方式。减少Webkit Reflow/Layout的时间

• 基于CSS3的动画

11年10月21日星期五

Page 19: 09  julia 开源移动开发框架

Julia:减低内存消耗

自动删除不显示的DOM片段。例如在NavigationView里面,除了当前正在显示的View以外,所有上级View都被清空,只保留一个DIV占位。

11年10月21日星期五

Page 20: 09  julia 开源移动开发框架

11年10月21日星期五

Page 21: 09  julia 开源移动开发框架

开源,与宣传无关

• 现在的开发者离不开开源(Python/Ruby/Apache的HttpClient)

• 任何文档都比不上源代码• 写程序就是写论文:不发表,就烂掉• 保守秘密?应用的开发不是航天科技

11年10月21日星期五

Page 22: 09  julia 开源移动开发框架

Julia

不是结束,刚刚开始开源项目不容易做。对此,做好开源项目的办法我们想到的就是和你,开发者交流探讨。 下一步我们将会把《见面》的源代码提交给大家分享。对于API定义、JS库设计的各个方面都欢迎交流。

移动开发中遇到的问题,或者是对不同开源版权的探讨,我们都欢迎。邮件列表:http://www.miankong.cc/julia/

11年10月21日星期五