移动开发流量省起来之Zepto

2024-03-17 06:48

本文主要是介绍移动开发流量省起来之Zepto,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

移动开发流量省起来之Zepto

转载于深蓝的镰刀



事情是这样的:最近开发的一个手机网站客户反应访问起来特别慢,刷了半天才能看到页面,然后问我们是不是网站出问题了。于是我赶紧找了各种手机测试一下,没有问题,首先排除程序错误的问题,然后服务器用的又是云服务器,只要不是在国外应该不会太慢才对,打听了一下,原来是该客户用的是2G网络访问的,说是在信号不好的地方几乎刷不出页面。。。

虽然说客户的网络质量令人堪忧,不过作为一个有点追求(强迫症)的攻城狮还是决定帮他优化一下。

页面另存为,打开一个页面所需要加载的所有资源包括图片、js、html一共才300K(jquery库特地使用了压缩版的,只有100K左右。。。),将图片各种压缩,最终还是有160多K,看来只有把jquery库给去了,但是将所有的jquery代码改写成原生js又有一种想死的感觉,而且很多兼容问题层出不穷,那么有没有一个既像jquery这么好用的,又能省流量的js库呢?答案是: Zepto

一张图说明Zepto.js的优势:

jquery 1.x最新版284KB,压缩后94KB;jquery2.x最新版247KB,压缩后84KB;Zepto最新版54KB,压缩后9KB!!!

然后看看功能方面。

选择器

 <html><body><ul id="items"><p>This is it!</p></ul><script src="http://www.cnphp6.com/archives/zepto1.1.6.js"></script><script>alert($("#items").html());</script></body></html>

追加

 <html><body><ul id="items"><p>This is it!</p><p>Hello</p></ul><script src="http://www.cnphp6.com/archives/zepto1.1.6.js"></script><script>$('ul').append('<p>new list item</p>')   </script></body></html>

克隆 (注:zepto的clone()方法不能像jquery的clone()可以同时克隆data和绑定事件)

 <html><body><ul id="items"><p>This is it!</p><p>Hello</p></ul><script src="http://www.cnphp6.com/archives/zepto1.1.6.js"></script><script>$('ul').append($("#items").clone())   </script></body></html>

ajax

 $.ajax({type: 'GET',url: '/projects',data: { name: 'Zepto.js' },dataType: 'json',timeout: 300,context: $('body'),success: function(data){this.append(data.project.html)},error: function(xhr, type){alert('Ajax error!')}})$.ajax({type: 'POST',url: '/projects',data: JSON.stringify({ name: 'Zepto.js' }),contentType: 'application/json'})

因为Zepto是jQuery-compatible的,所有如果你会使用jquery,那么你已经会了Zepto。以上这些用法基本与jquery一致,下面说几个我看到的与jquery不同的地方。

1.Zepto基础库不支持很多css选择器

比如很常用的$(“:selected”),$(“p:eq(1)”),$(“li:first”)这类,不过Zepto的库提供很多拓展的模块,你只需要在他的官网上按需要编译你需要的模块然后保存为zepto.js即可,或者直接使用在线编译,其中如果开启了selector模块,你就能支持大部分的css选择器了。

2.如果你开启了detect模块,那么你就可以用Zepto判断用户设备、操作系统和浏览器的功能(测试了几个还算可以用,不知是否准确)

<html><body><ul id="items"><p>This is it!</p></ul><!-- 该js必须开启了detect模块 --><script src="http://www.cnphp6.com/archives/zepto.js"></script><script>// general device typealert($.os.phone);alert($.os.tablet);// specific OSalert($.os.ios);alert($.os.android);alert($.os.webos);alert($.os.blackberry);alert($.os.bb10);alert($.os.rimtabletos);// specific device typealert($.os.iphone);alert($.os.ipad);alert($.os.ipod); // [v1.1]alert($.os.touchpad);alert($.os.kindle);// specific browseralert($.browser.chrome);alert($.browser.firefox);alert($.browser.safari); // [v1.1]alert($.browser.webview); // (iOS) [v1.1]alert($.browser.silk);alert($.browser.playbook);alert($.browser.ie); // [v1.1]</script></body></html>

3.如果开启了form模块,就可以对你的表单进行数据序列化,类似jquery的jquery form插件

<html><body><form><input name="user" value="xxx" type="text"/><input name="password" value="123" type="password"/></form><!-- 该js必须开启了form模块 --><script src="http://www.cnphp6.com/archives/zepto.js"></script><script>var formData = $('form').serializeArray();alert(formData[0]['name']);alert(formData[1]['name']);alert(formData[0]['value']);alert(formData[1]['value']);</script></body></html>

4.如果开启了touch模块,你就可以使用tap(触屏点击) 和 swipe(触屏滑动),类似Jquery mobile 插件

<html><body><style>.delete { display: none; }#items{font-size:30px;}</style><ul id="items"><li>List item 1 <span class="delete">DELETE</span></li><li>List item 2 <span class="delete">DELETE</span></li></ul><!-- 该js必须开启了touch模块 --><script src="http://www.cnphp6.com/archives/zepto.js"></script><script>$('#items li').swipe(function(){$('.delete').hide()$('.delete', this).show()})$('.delete').tap(function(){$(this).parent('li').remove()})</script></body></html>

注:Zepto的swipe事件在某些Android手机(如安卓4.4)仍存在不起作用的情况。期待Zepto修复这个bug。

这么多有用的模块如果用jquery来实现,除了需要加载那个压缩后还有90多KB的核心库外,我还要加载各种插件诸如jquery mobile,jquery form,jquery detect等等,这个大小不用我说,要多臃肿多臃肿,而Zepto全部开启模块后只有39KB,所以说作为业绩良心省流量的手机网站还是使用Zepto吧。

总的来说,Zepto像是一个Jquery体系的一个精简版,专注于移动端,兼顾主流PC浏览器,对于Jquery库的文件大小问题我猜想Jquery在发展的同时可能因为很多历史遗留问题还有需要兼顾各种并不是主流的浏览器导致代码略臃肿。

这篇关于移动开发流量省起来之Zepto的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818148

相关文章

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.