原:http://blog.csdn.net/liubinwyzbt/article/details/51446771

jQuery Mobile和Zepto是移动端的js库。jQuery Mobile相当于PC端的jQuery UI,它提供了很多页面的UI库,能够很快的开发出漂亮的界面,适合公司没有UI设计师的前端开发人员来进行移动端的开发。Zepto相当于PC端的jQuery,它提供了很多方法和功能,能够很快的实现各种需求和功能,适合公司有UI设计师的前端开发人员来进行移动端的开发。

jQuery Mobile性能上没有zepto好。

zepto.js是一个专为mobile WebKit浏览器(如:Safari和Chrome)而开发的一个JavaScript框架。它标榜自己在其简约的开发理念,能够帮助开发人员简单、快速地完成开发交付任务。更重要的是这个JS框架,是超轻量级的,只有5KB。zepto.js的语法借鉴并且兼容jQuery。

jQuery Mobile这个框架能够帮助你快速开发出支持多种移动设备的Mobile应用用户界面。

jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。虽然jQuery Mobile相对较新,但开发人员可以用jQuery Mobile为许多移动设备(包括智能手机和平板电脑)开发网站应用程序,RSS阅读器等应用。 
jQuery Mobile是目前最流行的一个移动开发的框架,文档丰富,社区活跃,有很多的UI控件供我们使用,并且提供对多页面的支持(通过Ajax方式读取内容,并提供页面切换的过渡动画)。我认为jQuery Mobile的最强大之处就在于其UI方面的支持,但这一部分恰恰不是我所需要的,它对UI的限制比较多。Sencha Touch是ExtJs的移动版,对于不熟悉ExtJs的人来说有一定的学习成本。

jQuery Mobile的缺点,主要有两点:一是重,二是UI限制太大。

我们选择了zepto.js作为底层库,使用sea.js进行模块的管理和发布,当然也可以使用requirejs来进行模块的管理和发布,

requirejs比seajs的对应的工具多一些,因为requirejs是外国的,而其他相应的工具也是外国的,因此使用seajs,相对应的工具会少一些。但是开发起来容易一些,都是中文资料。此外,我们使用backbone.js为基础的MVC架构,用来剥离应用的数据部分;使用underscore.js做为前端模板引擎(backbone重度依赖);使用iScroll.js为我们提供模拟滚动的功能(此库在低端移动设备上,反应慢)。这些都是一些专业的“小库”,很适合移动端的开发。当然,具体情况需要具体分析,没有万能的框架,只有万能的开发者。如果时间允许,也可以自己来定制一套满足自身需求的基础库。毕竟在移动端,一切以 “精简”为主。

对于单页应用来说,iScroll确实是一个非常优秀的解决方案,但是iScroll却有一个最大的缺陷——慢,滚动的性能与浏览器原生实现相比,在低端的移动设备上有明显卡顿。 
不过要兼容低端的移动设备,原生的滚动还是有优势的。尝试放弃使用iScroll组件,使用原生的Scroll。因为较新的浏览器已支持 {overflow: scroll; -webkit-overflow-scrolling: touch;}。

iScroll的诞生,主要是因为早期的webkit内核浏览器没有一种原生支持固定高度的容器。到目前为止,iScroll最大的问题就是慢,在千元以下Android设备上表现尤为突出。使用局部滚动来替代iScroll滚动是最好的一种方式,但很可惜,现在只有iOS5、6支持局部滚动,并且支持程度并不好,而Android压根就不打算支持。这样,我们就不得不使用iScroll。

问题来了,现在到底使用iScroll呢?还是不使用?使用的话,大部分Android设备在滚动时会很卡,如不使用,部分功能又实现不了。其实,这个问题也不必太纠结。 
首先, 对于header、footer需要固定位置的页面,可以直接使用position:fixed实现。部分不支持fixed定位的浏览器问题也不大,这部分设备一般都是Android2.x的系统,配置也较低,相对交互而言,速度显然更加重要;

对于需要依赖固定高度实现切换动画效果的交互,应尽量保证滚动条在页面顶部时处理。必要时做出一些牺牲,舍弃部分影响用户使用流畅的交互; 
尽量使用浏览器原生支持代替iScroll;

如果必须使用iScroll才能实现的功能,一定要控制在最小范围,不要在常用场景应用iScroll;

虽然iScroll在iOS下表现得非常出色,但是都应当尽量使用浏览器原生支持特性来实现功能,这样才能最大化保证交互操作的流畅性。

很长一段时间都有一个争论,有页面跳转是不是WebApp?我认为单独讨论single page webapp还是页面跳转是没有意义的,所有产品都是建立在用户需求之上。对于现有的single page webapp产品,浏览器没有准备好,硬件配置也没有准备好,函数运算效率、页面渲染都跟不上,尤其是Android设备。基于用户需求出发,一些意识形态的东西该抛弃就抛弃,放开的使用页面跳转,只要能让程序运行流畅的东西,就应该毫不犹豫的使用。

但凡事也没有绝对,在一定的功能范围之内,也可以使用炫一些的切换动画,在一个页面实现多个子功能。

基于以上对移动端浏览器混乱程度的理解,移动web产品要做到全平台适配,工作量无遗是巨大的,并且,由于HTML5的支持程度,也会导致大部分低端用户无法使用到一些高级特性,或表现效果不佳。而且,没必要为了适应低端Android用户让高端iOS用户也忍受着简陋无比的交互及界面。那么,将iOS、Android、Windows Phone分为不同的版本,做相应的功能适配还是很有必要的。

在iOS下,自由度比较高,能随意发挥,很多有创意的交互及设计,都能在Safari下表现得比较好;

Android下由于设备硬件配置及浏览器版本差异比较大,就会选择相应保守的方式,舍弃部分影响用户使用流畅的交互,以及影响页面渲染的界面设计;

对于Windows Phone我们是从WP8起步,这样会更好做浏览器兼容。 做分版本适配的目的,是为了在保证功能交互的前提下让每个用户都能得到最流畅的操作体验。 
用原生控件做外壳和交互,保证流畅的用户体验和完整的推广渠道;使用Html5来展示内容,保证内容的迅速迭代更新,即时响应用户需求。于是就诞生了Hybrid App,这也是目前最流行最合适的一种App形式。

下面提出我个人的建议:

  1. 如果你的团队刚刚组建或者框架知识了解不深入,那么开发移动端,使用单一的库就行了。 
    比如:jQuery mobile或Zepto。 
    使用jQuery mobile可以省略很多UI设计或者说重构的一些工作,在公司团队中,如果没有这方面的成员时,可以使用此库。但是此库性能不好,兼容性一般,UI限制大,请慎重使用。 
    使用Zepto开发,性能上最好的,而兼容性比较好,跟jQuery有同样的API,只是需要自己设计UI,以及重构。touch功能上有一定的兼容性问题。推荐使用此库,这样你可以任意发挥你的想法。

  2. 如果你的团队,个个都是高手了,那么就可以进行mvc模式的开发了。在你的项目中,加入backbone+underscore,这是目前为止,最简单的mvc模式的开发组合。但是大家都知道,使用backbone,你就必须按照backbone的模式来进行项目的开发,具有一定的限制。也就是说,开发和维护,都需要了解backbone这个框架。

  3. 如果你的团队,个个是大牛的话,那么就可以使用AngularJS或React了。这种模式的开发,现阶段是前端开发的最新研究成果了。此种框架,学习成本大,但是代表着公司的实力和创新。 
    当然,除了以上这些基础库和基础框架,我们可能还需要添加一些第三方库,比如iscroll,此库兼容性好,唯一缺点就是在低端设备上,会卡,所以项目不能全局使用iscroll实现滚动效果。我们需要添加原生的scroll来实现项目中的滚动效果,如果使用原生scroll不能实现的,那么才使用iscroll来实现。 
    比如:faskClick,它解决点击事件延迟的bug,当然zepto的touch模块也可以解决。 
    比如:模板引擎,像underscore,handlerbars等。 
    比如:HTML5的application cache本地缓存机制。 
    移动开发总结: 
    (1)jQuery mobile或者Zepto+自己设计UI 
    (2)seajs或requirejs+Zepto 
    (3)seajs或requirejs+Zepto+Backbone+underscore 
    (4)angularjs或react 
    我个人希望能够使用第三种,然后项目成熟了,再使用第四种。毕竟新技术的实践,还是很有想象空间的。 
    当然,如果对技术不需要深入,只要实现功能,那么使用第二种我觉得还是不错的。 至于第一种,我个人觉得模块化开发还是非常必要的,之前在公司里面看之前的前端负责人开发的一套系统,代码写的太混乱了,简直看不得,维护起来非常不方便,所以模块化开发,我个人觉得,必须使用。 
    关于移动端的UI组件,我推荐腾讯的frontUI。百度的gmu很久没更新了,也没人维护了,而且耦合性比frontUI大,不推荐。 
    关于移动端的调试工具,我暂时只用过weinre。由于公司网络不行,我使用的是低版本的weinre,只支持safari调试,而且反应比较慢。但是,还是能够解决问题的,只是效率不高。网上有很多教程,百度一下就知道怎么用了。 
    扩展阅读

zepto/jQuery、AngularJS、React、Nuclear的思考

[原创]zepto打造一款移动端划屏插件

移动设备web开发首选框架:zeptojs介绍

移动开发流量省起来之Zepto

移动端开发:使用jQuery Mobile还是Zepto的更多相关文章

  1. 史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

    书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战> ...

  2. wap开发使用jquery mobile之后页面不加载外部css样式文件/js文件

    场景: wap开发,使用jquery mobile之后不会加载外部自定义的css文件了,需要手动刷新才会加载,查看外部自定义的js文件也是一样. 解决办法: 1.在page下面添加css样式,就不要写 ...

  3. 【初探移动前端开发】jQuery Mobile 二

    本文例子请使用手机查看 List列表 在移动设备平台下,由于移动设备屏幕比较小,我们又是用手在上面点击的触屏方式,传统的列表模式在手机上就不太友好了. 虽然HTML5与CSS3提供了强大的界面实现方案 ...

  4. 手机开发类型jquery的框架Zepto(API)

    Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. http://www.html-5.cn/M ...

  5. Jquery Mobile转场特效之slide | 小小iPhone开发

    Jquery Mobile转场特效之slide | 小小iPhone开发 2012 Jquery Mobile转场特效之slide 作者:小小   发布:2012-12-12 14:03   分类:j ...

  6. Jquery Mobile 小结

    第一次做一个移动站点,当时纠结选Jquery Mobile还是Zepto,Zepto相对于JM更加轻巧,语法上面也很相似,但考虑到时间问题和JM自带了很多组件(Bootstrap惯出来的),还是选择了 ...

  7. 移动端开发demo—移动端web相册(一)

    本文主要是介绍开发移动端web相册这样一案例用到的前置知识. 一.移动端样式 移动端更接近手机原生的方式. 如下是一个angular mobile的demo的例子: 移动端demo做成这样的好处: 在 ...

  8. 一个简单的特效引发的大战之移动开发中我为什么放弃jquery mobile

    我本想安静的做一个美男子,可是,老板不涨工资,反而,一月不如一月. 我为什么放弃jquery mobile插件选择自己写特效? 在开发中大家都知道效率很重要,一个好的工具可以在开发中大大提升效率,工作 ...

  9. 【初探移动前端开发05】jQuery Mobile (整合版)

    前言 为了方便大家看的方便,我这里将这几天的东西整合一下发出. 里面的例子请使用手机浏览器查看. 什么是jQuery Mobile? jquery mobile是jquery在移动设备上的版本,他是基 ...

随机推荐

  1. win10安装mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed

    1.下载mongodb在windows下的安装文件 首先去官网https://www.mongodb.com/download-center?jmp=nav#community下载安装文件.mongo ...

  2. flask 重定向到上一个页面,referrer、next参数

    重定向会上一个页面 在某些场景下,我们需要在用户访问某个url后重定向会上一个页面,比如用户点击某个需要登录才能访问的连接,这时程序会重定向到登录页面,当用户登录后比较合理的行为是重定向到用户登录前浏 ...

  3. Class_third_实验报告

    设计思路:声明一个父类Shape并声明一个getArea()计算面积的空方法让子类Circle,Echelon,Triangle,Rectangle 继承父类的方法并根据类的不同重写getArea() ...

  4. Linux基础命令---杀死进程pkill

    pkill pkill可以给指定的进程发送信息,它可以结束某个执行的进程或者目录登录的用户. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedo ...

  5. 转:获得数据库自增长ID(ACCESS)与(SQLSERVER)

    转载自:http://www.cnblogs.com/chinahnzl/articles/968649.html 问题CSDN 里面不时有初学者疑惑:如何获取自增长列(标识列)的ID,并写入另一张表 ...

  6. AtCoder Beginner Contest 070 ABCD题

    题目链接:http://abc070.contest.atcoder.jp/assignments A - Palindromic Number Time limit : 2sec / Memory ...

  7. 常用正则表达式爬取网页信息及HTML分析总结

    Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取<tr></tr>标签之间内容 2.获取<a href..></a>超链接之间内容 3 ...

  8. Python读写docx文件

    Python读写word文档有现成的库可以处理.我这里采用 python-docx.可以用pip install python-docx安装一下. 这里说一句,ppt和excel也有类似的库哦,而且是 ...

  9. flask框架----基于flask的扩展实现的简单的页面登录

    废话不多说,直接上代码 from flask import Flask,render_template,request,redirect,session app = Flask(__name__,te ...

  10. IE haslayout的属性及其值

    haslayout是IE 渲染引擎的一个内部组成部分.在IE 中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容.为了调节这两个不同的概念,渲染引擎采用了hasl ...