响应式HTML5+CSS3 网站开发测试实践

news/2024/5/20 12:31:47/文章来源:https://blog.csdn.net/weixin_34252686/article/details/93714488

仅仅利用media query适配样式是远远不够的,并没有考虑触屏下的行为和特有的内容组织方式的不同。简单在桌面版基础上叠加mobile版的代码,会带来请求增多、流量、性能、代码冗余等诸多方面问题。有统计说86%的手机站看起来small其实体积比桌面版还大。

我们这次充分发挥“响应”的灵活性,实现one web。

响应式开发就为了实现one web:

 

1. 响应性的模块
原本网站的模块化程度越高越便于做响应性开发。一个page例如是这样组织的:
<%include file=”path/mod1.html” args=”data=data” />
<%include file=”path/mod2.html” args=”data=data” />
如果在手机下访问,模板系统在生成这个页面时,会在path/下找mobile.mod1.html,有则加之,否则加mod1.html。也就是说在同一目录下,会存在多个版本的模块,当前只有2种:mod1.html(桌面版),mobile.mod1.html(mobile版)

响应部分的代码,跟主站代码是放在一起的,这样更便于维护。一个页面模板的结构是这样的:

page1.html:

<%inherit file=”/base.html” />

<%def name=”main”>

桌面版主要内容

<%include file=”path/mod1.html” args=”data=data” />

</%def>

<%def name=”sidebar”>

桌面版边栏内容

</%def>

<%def name=”mobile_main”>

<%block filter=”collect_css”>

mobile版css

</%block>

mobile版主要内容。如果可以复用,直接调${self.main()}

很多情况下内容是不同的,比如去掉不必要的模块。

</%def>

<%def name=”mobile_sidebar”>

mobile版底部内容

</%def>

这意味可以同时开发/维护两个版本。(同样,设计师在设计一个页面,也需要秉承mobile first的原则)
在同一目录、同一文件维护比分布在不同的仓库中要方便的多。

 

 

2. 响应性的css/js
mobile版的变化很大,在样式上并不是桌面版css+mobile版css的关系。这得益于我们之前对静态文件管理系统的改造。传统的css的组织方式是集中式的,集中在几个通用文件中,形如base.css + product.css。而我们现在的方式是base.css + mod_1.css(inline) + mod_2.css(inline) + mod_3.css(inline) … 是按需组合的形式。

这样,加上设备判断后就可以轻易变成:
mobile.base.css + mobile.mod_1.css(inline) + mobile.mod_2.css(inline) + mobile.mod_3.css(inline) …

css/js文件跟模板一样,在同一目录下分别有桌面版和mobile版。根据访问端的情况,自动适配、按需组合。这样可以得到一个更优化的mobile站。

 

 

3. 增强触屏行为和兼容桌面事件
前者是指附加触屏上特有的事件:touchstart/touchmove/touchend以及手势swip/pinch/rotate/shake。这个不是难点。

mobile浏览器和桌面浏览器的事件模型有明显差异,为了完全复用桌面版的各种js组件,首要问题是设法兼容桌面事件(click和mouse事件)。

mobile上的click和mouse事件有几个需要注意的地方:
a. click和mouse事件不会发生在不可点击的元素上,意味绑在document上的事件代理完全失效
b. mouse事件是发生在手指离开屏幕后,且顺序是mouseover > mousemove > mousedown > mouseup
c. click事件最后触发。从手指离开屏幕起,有约300多毫秒延迟,而且有可能不会被触发

见下图:

“If the user taps a clickable element, events arrive in this order: mouseover, mousemove, mousedown, mouseup, and click. The mouseout event occurs only if the user taps on another clickable item. Also, if the contents of the page changes on the mousemove event, no subsequent events in the sequence are sent.”(出处)

android/ios不支持beforeunload事件,对unload事件的支持有些怪异,需要用pageshow/pagehide事件替代。

以上事件的差异都是要尽力消除的。解决思路是利用jQuery的special event机制覆盖掉原本的事件绑定。即:node.click(fn),mobile上转向node.touchend(fn) 。实现的代码:https://gist.github.com/3358036

 

 

4. 优化和用户体验

a.去掉了apple-mobile-web-app-capable声明。单页应用要加上,用响应式开发的加上这句体验反而不好,跳转的链接会弹出窗口打开。

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<meta name="format-detection" content="telephone=no"/>
## <meta name="apple-mobile-web-app-capable" content="yes">

b. “If the user taps a nonclickable element, no events are generated.”(引自Apple Dev Center),所以:

body {
cursor:pointer;
}

c. 设定内容中图片的最大宽:

.topic-content img {
max-width:100%;
}

d. 加载提示,感觉像异步加载。

e. application cache本身是为web app设计的,在响应式开发中的应用是不同的。
把大文件在手机端cache起来:

CACHE MANIFEST
# version 0.0.1
CACHE:
${static('/js/jquery.min.js')}
${static('/js/do.js')}
${static('/css/mobile/base.css')}
${image_url('/pics/icon/dou.png')}
${static('/css/ui/dialog.css')}
${static('/js/ui/dialog.js')}
${static('/js/mobile/jquery.mobile.events.js')}

这个文件是动态生成的,好处是当文件更新后,文件名中的签名会跟着变,也就会触发手机端app cache的更新。

判断cache更新:

if (window.applicationCache) {
window.applicationCache.addEventListener('updateready',function(){
window.applicationCache.swapCache();
}, false);
}

为了避免动态页面被cache,在一个隐藏的iframe里指定它。(更改,还需要进一步测试)

f. mobile上的UI库,比桌面版更有必要。

 

 

5. 调试和监测

用了两个工具adobe shadow和自带的tcpdump,对android/ios均适用。

a. adobe shadow 出了一段时间了。原来的问题是它要走adobe的weinre server,慢!终于最新版4已经可以指定本地的weinre server了。怎么启用本地weinre server是另外话题自己去搜吧,我是用jar启动的,作者网站提供各种版本:http://people.apache.org/~pmuellr/weinre/builds/1.x/
>java -jar ~/weinre-jar/weinre.jar –boundHost 10.0.2.48  (ifconfig查具体ip是什么)
weinre server启动参数:

–httpPort [portNumber]改变HTTP服务器的端口号8080
–boundHost [hostname | ip address | -all-]改变主机名。如果使用默认的localhost,将无法从另一台机器访问该服务器localhost
–verbose [true | false]记录标准输出行为false
–debug [true | false]详细的操作日志输出到标准输出false
–deathTimeout [seconds]指定超时3

安装shadow,同时手机上安装shadow client。

指定本地server:
 手机打开shadow client直接找ip。shadow其实就是对weinre包装了一层,它的inspector其实就是weinre调web inspector调试。

 

b. 用tcpdump监测http请求(参考这里)。步骤:

step 1: 建一个wifi热点
step 2: 用tcpdump命令捕获tcp的traffic,命令:
sudo tcpdump -i en1 -n -s 0 -w group.pcap tcp or port 53
(参考tcpdump用法http://www.tcpdump.org/tcpdump_man.html)
step 3: 手机联上热点,打开网站(先清cache)
step 4: Ctrl+c停掉tcpdump,log保存到指定的group.pcap文件中。pcap(packet capture)
step 5: pcap转成har文件浏览,http://pcapperf.appspot.com 或导入到charles里查看也很方便,分别看下图:


c. 在线工具:mobitest.akamai.com (说是开源了)

 

转载于:https://www.cnblogs.com/sunshq/p/3808548.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_773242.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建动态网站 视频教程

2019独角兽企业重金招聘Python工程师标准>>> 1 第零讲 108分钟 2 第一讲 PHP 103分钟 3 第二讲 PHP(续) 101分钟 4 第三讲 XML …

网站或者api服务器,api服务器和web服务器

api服务器和web服务器 内容精选换一换调用接口出错后&#xff0c;将不会返回结果数据。调用方可根据每个接口对应的错误码来定位错误原因。 当调用出错时&#xff0c;HTTP请求返回一个 4xx 或 5xx 的HTTP状态码。返回的消息体中是具体的错误代码及错误信息。在调用方找不到错误…

html 优化速度,web前端html网站访问速度优化

web前端html网站访问速度优化&#xff0c;网站性能一般就指的是网站的访问速度&#xff0c;虽然很普通&#xff0c;但通过数据可以发现&#xff0c;网站速度对于用户体验的影响是相当巨大的&#xff0c;下面来研究下如何优化网站&#xff0c;使其下载速度更快的方法。首先检查一…

网站服务器需要备案,网站服务器需要备案

网站服务器需要备案 内容精选换一换域名注册(Domain Registration)是用户付费获取Internet上某一域名一段时间使用权的过程。华为云域名注册服务提供域名的注册、购买、实名认证以及管理功能。华为云的域名注册服务与新网合作&#xff0c;因此通过华为云注册的域名其注册商为新…

网站安全狗V3.5枸杞2版发布 解决优化多项问题

2019独角兽企业重金招聘Python工程师标准>>> 2015年8月27日&#xff0c;备受期待的网站安全狗V3.5枸杞2版正式发布。新版本补充之前V3.5枸杞1版的不足&#xff0c;同时新增了部分实用功能&#xff0c;解决了诸多历史遗留问题&#xff0c;更修复了近期网络上爆出的各…

web网站javascript前端加密,后端解密,防止明文传输

使用spring-boot项目写的demo&#xff0c;需要额外引入 security.js 用于js加密 bcprov-jdk16-146.jar 加密api 项目结构&#xff0c;代码已上传到CSDN资源库&#xff0c;需要的小伙伴可以下载&#xff0c;demo可直接运行 1.我是在项目启动时初始化公钥私钥&#xff0c;并放…

基于Google排名因素对Drupal进行SEO优化

2014年9月15日&#xff0c;SearchMetrics发布了《2014年搜索排名因素研究》&#xff08;2014 Ranking Factory Study&#xff09;。通过分析了10000条搜索结果&#xff0c;并为网站和它们的搜索排名建立联系而得出了一系列有关影响网站搜索排名的因素。本文我们便来看看使用哪些…

苹果的软件/系统盘 网站 http://www.panduoduo.net/u/bd-369186934/2

http://www.panduoduo.net/u/bd-369186934/2 UIViewController提供了一个基础的视图管理模型&#xff0c;可以用UIViewController管理视图的继承&#xff0c;及对view的管理。 属性&#xff1a; view&#xff1a;视图 &#xff08;UIViewController的一个属性&#xff0c;用于…

SEO艺术阅读笔记

SEO(Search Engine Optimization)搜索引擎优化 搜索引擎&#xff1a;反映认知&#xff0c;连接贸易搜索引擎基础百度搜索高级语法确定SEO目标&#xff0c;定义网站受众设定SEO目标开发前定制SEO方案理解受众&#xff0c;寻找利基高级计划评估方法SEO的准备阶段方案主要元素确认…

如何使用mysql(lamp)分离环境搭建dedecms织梦网站及apache服务器常见的403http状态码及其解决方法...

一、实验环境 centos6.5mysql5.5.32php5.3.27 软件&#xff1a;DedeCMS-V5.7-GBK-SP1本实验是使用lamp环境搭建&#xff0c;但mysql数据库与之分离&#xff0c;本实验成功的关键在于防火墙及其selinux关闭的前提下实现。 二、实验步骤 1&#xff09;下载产品&#xff0c;并解…

[.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(一)

一步步打造一个简单的 MVC 电商网站 - BooksStore&#xff08;一&#xff09; 本系列的 GitHub地址&#xff1a;https://github.com/liqingwen2015/Wen.BooksStore 《一步步打造一个简单的 MVC 电商网站 - BooksStore&#xff08;一&#xff09;》&#xff08;发布时间&#xf…

服务器打开_服务器网站打开速度慢怎样解决?

很多站长的网站建立起来之后&#xff0c;发现访问缓慢&#xff0c;有时候甚至要用十几秒才能打开&#xff0c;这无疑会影响网站的用户体验&#xff0c;还会影响网站的SEO优化&#xff0c;那么如何提升网站的打开速度呢&#xff1f;腾佑科技小编这里结合自己的建站经验教大家几招…

jpa jql 时间范围查询_SpringBoot入门建站全系列(五)使用Spring-data-jpa操作数据库...

SpringBoot入门建站全系列&#xff08;五&#xff09;使用Spring-data-jpa操作数据库SpringBoot操作数据库有多种方式&#xff0c;如JDBC直接操作:太古老了&#xff0c;没人愿意这样玩Mybatis插件&#xff1a;比较时髦&#xff0c;比较适合sql复杂&#xff0c;或者对性能要求高…

editor 插入图片之后将光标放到右侧_8个字,9张图教会你用PPT制作gif | 附赠3个gif图片网站...

首图送大家一个gif今儿想来和大家讲讲怎么用PPT做出你想要的gif动图&#xff0c;没错&#xff0c;就是PPT。简单来说&#xff0c;其实就是8个字&#xff1a;构思、作图、动画、录屏。就以这个首图为例吧方法一 < 构思 >知道自己想做什么风格的图&#xff0c;要起到什么作…

java与seo_学习seo和学习java哪个更好

SEO一个seo行业站点&#xff0c;科学的内容制作应该与seo相关&#xff0c;且内容本身是有人搜索的。seo和java哪个更好是有人搜索的语句&#xff0c;且与seo是强相关的&#xff0c;对于seo教程自学网来讲&#xff0c;这样的内容再适合不过了。任何一门技术&#xff0c;如果精通…

打开特定的网站特别慢_[独立站运营] 网站用户体验 — 可能是Google SEO最重要的部分...

前言&#xff1a;做独立站运营&#xff0c;SEO优化的重要性不言而喻。而做跨境电商独立站运营&#xff0c;更离不开SEO优化&#xff0c;尤其是针对Google搜索引擎。正文&#xff1a;Google拥有40多亿的网络用户&#xff0c;每天将近50亿的搜索量&#xff0c;每秒63000搜索结果显…

通过url账号密码登录其他网站_使用pyppeteer淘宝登录

使用pyppeteer淘宝登录&#xff0c;获取Cookies现在淘宝的商品搜索页必须要登录才能见&#xff0c;所以必须要cookies才能进行下一步操作。本期介绍如何使用pyppeteer登录淘宝&#xff0c;获取Cookies。pyppeteer介绍地址&#xff1a;https://github.com/miyakogi/pyppeteer介绍…

在线小说网站的设计与实现(附源码)

2019独角兽企业重金招聘Python工程师标准>>> 最近在做一个课程设计&#xff0c;在线小说网站的设计&#xff0c;以下是课题要求&#xff0c;需要项目练手的童鞋可以试试身手。 由于最近新学了JavaEE&#xff0c;所以采用了jspservlet来写&#xff0c;前端部分用了少…

ai png转矢量图_有哪些免费下载png图片的网站?

为了减少广大设计朋友们的工作量&#xff0c;Fotor懒设计给大家推荐9个免扣素材网站&#xff01;重要的是免费&#xff01;免费&#xff01;免费&#xff01;直接上干货&#xff01;01.PNGimg它还提供各种分类&#xff0c;有动物、电影、人物、电子产品、食物等等&#xff0c;需…

暂停服务器网站,服务器重启 iis网站暂停

服务器重启 iis网站暂停 内容精选换一换访问IIS搭建的网站不通&#xff0c;报错404。IIS上绑定的域名只填写了主机名&#xff0c;没有指定IP地址。本节操作指导用户修改IIS上绑定的域名&#xff0c;以Windows Server 2008 R2操作系统云服务器为例。登录服务器&#xff0c;选择“…