精华内容
下载资源
问答
  • 2012年中国系统架构师大会PPT\2 WebApp开放平台的系统架构设计-
  • webapp平台开发

    2018-10-31 13:39:27
    mui开发web开发app教程是Hbuilder+MUI App开发视频教程!MUI开发app是一个简单容易上手的APP开发工具,小编这里就给大家带来用MUI开发app的视频教程,简单易懂,适合入门,配合官方文档学习,更容易上手 课程目标 ...
  • webapp开发

    2018-05-02 15:29:21
    主要用于webapp开发代码编辑,主要用于手机网页版转换成webapp
  • WebApp开发要点

    2013-09-12 14:00:03
    WebApp开发要点 ,Webapp开发的特点等
  • webApp开发

    千次阅读 2017-10-06 11:26:36
    webApp介绍   App(native原生态的):指的是原生态app直接运行在操作系统上运行。 主流的移动端操作系统: Andriod:Java eclipse iOS:object-c(oc)、swift:xcode:苹果电脑 webApp:用HTML5编写的...

    1 webApp介绍

     

    App(native原生态的):指的是原生态app直接运行在操作系统上运行。

    主流的移动端操作系统:

    Andriod:Java  eclipse

    iOS:object-c(oc)swiftxcode:苹果电脑

    webApp:用HTML5编写的移动web运用,依赖于浏览器(微信浏览器、qq浏览器),可以不加修改,直接运行在Android、iOS、pc端。

    优势:一套代码到处运行(跨平台运行,兼容性)

    劣势:运行速度不如native App ,某些底层功能缺失。

    微信浏览器(iOS):UIWebView   WXWebview

    2像素基础

    1)物理像素(physical pixel)

    一个物理像素就是显示器上的最小物理显示单元。在操作系统(os)的调度下,每一个物理像素都有自己的颜色值和亮度值。

     2)设备独立像素(density-independent pixel)又称为css像素或者逻辑像素。他是浏览器使用的抽象单位,主要用来在网页上绘制内容,也就是css px是专门为web开发者提出的一个抽象概念,也就是我们平时写的css 的样式相关。也分辩率(720*1280px)没有关系。

    3)设备像素比(简称dpr)

          设备像素比=物理像素/设备独立像素

    一般在pc端,设备像素比值是1

    一般在移动端,设备像素比值是2

    结论:美工设计图 pc端的设计图,你量到多少,css就写多少

    手机端,你量到多少,css写一半,比如你宽度是640 代码就写320px

    一般情况下,美工提供的效果图是640px*xx(iPhone5)或者750px*xx(iphone6)

    代码里面对应就是320px或者375px。

    用户统计(umeng,腾讯统计)

    通过window.devicePixelRatio来获取设备像素比

     

     

    3 viewport

    Viewport(视口)就是设备的屏幕上用来显示我们的网页的哪一块区域,也就是浏览器用来显示网页内容的那部分区域。

    Viewport不限于浏览器可视区域的大小。一般情况下,移动端viewport都大于浏览器的可视区域。一般情况下viewport的宽度是980px或者1024px

    获取viewport的宽度:document.documentElement.clientWidth

    开发环境:

    jdk

    Tomcat 8.0

    Cdn

    文件(静态文件)存储:七牛、OSS

    1)将项目移动到tonmcat下面webapps下面——》用webstorm打开webapps下面该项目。--》点击bin/startup.bat启动Tomcat

    2)查看电脑ip win+r —》输入cmd ——>出现命令框——》输入ipconfig》查看ipv4关键字,后面的ip

    3)、如果有没修改tomcar的任何配置,(http://localhost:8080)就是对应Tomcat下面的webapps的路径。

     

     

     正是因为viewport的宽度比屏幕的宽度大,当页面内容比较多,宽度比较大的时候,需要左右滚动,上下滚动才能看完所有的信息,这个交互很不友好的,

    4 meta

    我们可以通过meta标签,对viewport进行控制

    一般我们的设置之后想要的效果

    1)viewport的宽度==屏幕的宽度

    2)同时不允许用户手动缩放

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">

     

    属性名称

    作用

    width

    设置viewport的宽度device-width

    initial-scale

    初始缩放比例,也即是当页面第一次 load 的时候缩放比例。

    maximum-scale

    允许用户缩放到的最大比例。

    minimum-scale

    允许用户缩放到的最比例。

    height

    一般不设置。

     

    5 rem

    Rem是什么?

    rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素一个是依赖父元素计算。

    Rem的特点:

    默认情况lrem==16px当然,这和浏览器默认字体相关。(坑:cheome最小字体是12px)。

    设定了HTML标签的font-size,1rem对应的值自动变化。1rem==font-size的值。

    Rem的使用:

    动态设置html元素的font-size,即可实现一个元素(div,p//)高度、宽度、字体等动态变化。

    2)动态设置html元素font-size的方法:css媒体查询、js;

    3)测试效果图得到的是xxpx,我们需要装换成rem

         代码里写具体的px,然后将代码上次到指定网点http://www.520ued.com/tools/rem

    Sass函数

    @function pxToRem($px) { @return $px /23.4 * 1rem; }

     

    6 Flex

    一、Flex布局是什么

     在之前我们的布局方式:dipayl+position+float,这种方式布局基本可以解决所有的布局,但是,对于一些特殊布局实现起来却不容易,比如垂直方向居中。

    Flex的弹性布局,用来为盒子模型提供最大的灵活性。

    所有的元素都可以设置为flex布局

    注意:如果使用了flex布局,所有的子元素float、clear、vertical-align等属性将失效。

     

    二、容器的属性

    只要一个元素设置为flex布局,该元素我们成为flex容器,它所在的所有子元素将成为容器成员,也成为flex项目。

    也就是,一个大的div,嵌套这2个小的div,如果大的div设置了flex布局

    大的叫容器,小的叫项目。

    2.1 flex-direction

    flex-direction属性决定主轴的方向(即项目的排列方向)。

    .box {

      flex-direction: row | row-reverse | column | column-reverse;}

     

    它可能有4个值。

    row(默认值):主轴为水平方向,起点在左端。

    row-reverse:主轴为水平方向,起点在右端。

    column:主轴为垂直方向,起点在上沿。

    column-reverse:主轴为垂直方向,起点在下沿。

     

    2.2 flex-wrap

    默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。


    .box{

      flex-wrap: nowrap | wrap | wrap-reverse;}

    (1)nowrap(默认):不换行。

    (2)wrap:换行,第一行在上方。

    (3)wrap-reverse:换行,第一行在下方。

    2.3 flex-flow

    flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

    .box {

      flex-flow: <flex-direction> || <flex-wrap>;}

     

     

    2.4 justify-content

    justify-content属性定义了项目在主轴上的对齐方式。

    .box {

      justify-content: flex-start | flex-end | center | space-between | space-around;}

    }

     

     

    它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。

    flex-start(默认值):左对齐

    flex-end:右对齐

    center: 居中

    space-between:两端对齐,项目之间的间隔都相等。

    space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

     

     

    2.5 align-item

    align-items属性定义项目在交叉轴上如何对齐。

    .box {

      align-items: flex-start | flex-end | center | baseline | stretch;}

     

    它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。

    flex-start:交叉轴的起点对齐。

    flex-end:交叉轴的终点对齐。

    center:交叉轴的中点对齐。

    baseline: 项目的第一行文字的基线对齐。

    stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

     

    2.6 align-content属性

    align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

    .box {

      align-content: flex-start | flex-end | center | space-between | space-around | stretch;}

     

    该属性可能取6个值。

    flex-start:与交叉轴的起点对齐。

    flex-end:与交叉轴的终点对齐。

    center:与交叉轴的中点对齐。

    space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

    space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

    stretch(默认值):轴线占满整个交叉轴。

     

    三、项目的属性

    3.1 order

    3.2 flex-grow

    3.3 flex-shrink


    四、综合小案例

    草料二维码chrome插件。

    7 touch

    一、什么是触摸事件?

     触摸事件是移动端浏览器特有的HTML5事件,他和pc的端鼠标类似,同时由于一些事件存在一定的延迟,比如click事件有300毫秒的延迟时,这个延迟很影响用户体验。所有那。Touch事件就出现了,为了解决移动端特有事件。

     

    、常用触摸事件

    注意:触摸事件有很多,但是目前很多事件只有部分浏览器支持,我们只学习几个。

    解决click事件延迟

    事件名称

    描述

    touchstart

    开始触摸的时候触发,也就是手指放到屏幕的一刻

    touchmove

     

    手指开始移动的时候触发,而且是一直触发,。也就意味的

    touchend

     

     

     

     

     

     Event 对象存在的touch相关属性

    touches:表示当前跟踪的触摸操作的touch对象的数组。

    targetTouches:特定于事件目标的Touch对象的数组。

    changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组。

      每个Touch对象包含的属性如下。

    clientX:触摸目标在视口中的x坐标。

    clientY:触摸目标在视口中的y坐标。

    identifier:标识触摸的唯一ID。

    pageX:触摸目标在页面中的x坐标。

    pageY:触摸目标在页面中的y坐标。

    screenX:触摸目标在屏幕中的x坐标。

    screenY:触摸目标在屏幕中的y坐标。

    target:触目的DOM节点目标。

     

    展开全文
  • iPhone WebApp 开发指南

    2012-06-27 21:46:06
    iPhone WebApp 开发指南
  • webAPP开发教程

    2014-08-14 10:01:18
    webAPP开发教程,视频代码教程请下载
  • webapp开发综合案例

    2016-11-17 11:20:49
    1.了解Web工程概念及与传统软件工程的区别 2.理解WebApp的概念、特点和开发过程 3.掌握WebApp的分析、设计和测试方法 4.掌握WebApp综合开发方法及课程设计过程
  • webapp

    千次阅读 热门讨论 2021-06-02 14:46:36
    Hbuilder中开发webapp前言开发流程 你好! 本篇文章主要讲解 webapp 在 Hbuilder 初始化构建流程。可以仔细阅读这篇文章,熟悉一下 webapp 开发的配置,让你快速开启属于你的第一个 webapp 项目。 前言 编辑器:...

    Hbuilder中开发webapp

    你好! 本篇文章主要讲解 webappHbuilder 初始化构建流程。可以仔细阅读这篇文章,熟悉一下 webapp 开发的配置,让你快速开启属于你的第一个 webapp 项目。

    前言

    开发流程

    Hbuilder 构建一个 webapp 项目

    • 新建项目 - 移动app
    • 选择 - mui项目
    • 文件结构
      在这里插入图片描述
    • unpackage 打包文件记录

    开发准备

    在右上角调整开发模式为 边改边看模式 ,按照 H5 的开发方式进行开发
    index.html 中加入测试内容

    <header class="mui-bar mui-bar-nav">
     	<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
     	<h1 class="mui-title">我的标题</h1>
    </header>
    <div class="mui-content">
    	Hello webapp
    </div>
    

    打包配置

    • 发行 - 云原生安装包
    • 打包 - 完成后会生成 .apk 文件(可选择 iosAndroid
    • 注意: 在打包前会有开发者账号登录,实名认证,按照 Hubilder指引完成操作即可。
    • 在手机上安装 .apk文件,查看你的第一个 app
    展开全文
  • 本文主要介绍webapp开发与调试的相关知识和经验,以及给出几种可选的解决方案。CSSpixels:浏览器使用的抽象单位,主要用来在网页上绘制内容。devicepixels:显示屏幕的的最小物理单位,每个dp包含自己的颜色、...
  • webApp开发心得

    万次阅读 2018-08-29 12:38:53
    从事单页相关的开发一年有余,期间无比的推崇webapp的网站模式,也整理了很多移动开发的知识点,但是现在回过头来看,webapp究竟是好还是不好真是一言难尽哟! webapp使用JavaScript修改页面;紧接着再从服务器传递...

    从事单页相关的开发一年有余,期间无比的推崇webapp的网站模式,也整理了很多移动开发的知识点,但是现在回过头来看,webapp究竟是好还是不好真是一言难尽哟!

    webapp使用JavaScript修改页面;紧接着再从服务器传递更多数据然后再修改页面,如此循环。

    从性能的角度看,在现代浏览器中单页面Web App已经能够和普通native应用程序相媲美,而且几乎所有的操作系统都支持现代的浏览器。

    所以,很多人认为webapp是HTML5流行过程中最大的赢家,那么他有哪些特定呢?

    SPA(single page application),即单页webapp,它具有以下优点:

    用户体验,对于内容的改动不需要加载整个页面。这样不会出现白页情况,页面与页面无缝切换,甚至带有一定动画效果。

    请求量少,请求内容无需服务器解析,对服务器压力较小,消耗更少的带宽,比如每次不需要接收完整的html结构,而只需要json数据。

    当然,单页应用也不是完美无瑕的,他也具有以下问题:

    由于历史原因,单页应用对SEO支持不是太好,需要对SEO做特殊处理。

    首次加载量过大,首屏加载慢,所以首屏需要做特殊处理。

    本身入门门槛就高,加之view编码需要释放资源,以免heap值过高,对编码人员的要求较高。

    现状

    传说中的webapp足以媲美native app,事实上这个足以还有很大的距离,预计这个“足以”需要用2-3年时间填平,所以事实是什么呢?

    事实上移动端的webapp模式的网站很少很少,一淘半年前还是,这两天一看又变回来了,小钗虽然对webapp抱有信心,但是信心从何而来呢?

    携程webapp独树一帜,去哪儿ipad介入webapp,但是国内主流网站依旧是传统网站,主要原因不过有二:

    ① SEO

    ② 不想吃螃蟹

    所以,携程的webapp在国内,何其可贵,说到这里,我都要哭出来了......

    优劣之分

    孰优孰劣非是小钗可以论断,求稳,webapp不比传统网站;求SEO,webapp需要其它解决方案;说垃圾收集,webapp需要自己释放资源。

    说体验,webapp需要考虑首屏加载;说动画,webapp要考虑低端手机,所以webapp还有很长一段路需要走!

    现在的webapp效果不可媲美native app,总有一天,当webapp不再制约于网络、设备,那么webapp的春天不会远。

    虽说如此,现阶段webapp也会有许多优化心得、奇技淫巧可以拿出来说说的,这里小钗做一次分享,希望可以对webapp的同学有所帮助。 

    网络传输优化

    综述

    前端优化分为两个切入点:网络传输与DOM操作,而网络传输是制约一个网站速度的主要因素。

    网络传输的优化要点是,零请求,无流量,其意是最大程度的减少请求数,降低请求量。

    对webapp模式的应用来说,首屏加载慢是一个不可避免的问题,所以提升webapp首屏加载速度是提升整体网站速度的关键。

    fake页-首屏加速

    以上是一个网站首页的加载时间,我们分别取其150kb与30kb网速的加载速度,可以看出会慢!若他是webapp,我们可以做一些优化

    我们应该避免页面长时间白页,这个时候便提出了fake页的概念。页面渲染只需要完整的HTML以及CSS,这个便是第一个优化点。

    从数据请求数以及请求量来说,webapp首页的响应应该比较慢,若是任由js加载完成再渲染页面,用户很有可能失去耐心。

    但是从DOMContentLoaded来看,首页事实上页面响应比较迅速,所以这个加载结束后页面第一屏便渲染结束,然后再异步加载js,当js改变后再动态改变dom结构中的一些关键点

    这个时候一个静态HTML页面,装载首屏的基本内容,让首页快速显示

    然后js加载结束后会马上重新渲染整个页面,这个样子,用户就可以很快的看到页面响应,给用户一个快的错觉,给人感觉快得多。

    降低请求数

    由webapp首页来说,不可避免的使用的js文件较多,这些文件分为两类:

    ① 框架js-css

    ② 各个业务团队js-css

    所以可以限定每个业务团队只会加载这四个文件,以最小降低请求数,这里又涉及到并行加载,数量与容量有一个临界值,如何取这个临界值需要各位自己去实验 

    降低请求量

    虽说图片压缩是不必说的事情,但是总会有些时候你会发现一些网站的图片尺寸很大,这个需要处理,而且必须处理。

    以框架库为例,除了核心包以外,不需要的UI或者功能库可以剔除,用到了再动态加载,减少首次加载量,这个一开始就得做好,做不好后期就不好改

    以业务团队为例,首次加载的js与html模板会将常用的几个页面压缩合并,其它页面访问时再请求,若是想提升首屏加载便可以只下载需要的页面文件。

    另外,以下两点尤其需要注意:

    ① 若是你们是要的还是jQuery库的话,可以考虑换成zepto了

    ② 勿胡乱引用第三方库,若是要引用一定是读懂源码的情况下重写使用之,这样的好处是,吃得透,万一有问题,能改,而不是没办法又换库

    缓存Ajax/localstorage

    该方案的原理与前面类似,我们发送Ajax请求时候,应该缓存一些非实时数据,比如城市信息和常用联系人,但是我们只能缓存非敏感信息,

    产品搜索页至列表页的请求数据会缓存30s-60s,若是过期时间内用户回到列表页的话不会重新请求数据

    这对服务器压力,页面响应皆是有利的,这个在30s内事实上意义不大,可以减少一次请求。

    另外,对于get和post的效率,曾经有人做过一次测试:

    get100次平均耗时323ms;post100次平均耗时589ms,所以post方式是比get慢的,但post请求的优点是安全,并且参数没有长度限制。

    是选择post还是选择get,皆需要处理,避免截断url,或者处处post。-

    lazyload

    只显示首屏页面,其它内容需要时再加载,比如列表页、图片lazyload,皆需要做

    DOM操作优化

    综述

    DOM操作主要分为页面渲染与资源清理(heap控制),两者之间又相辅相成,若是DOM操作一块处理不好,其产生的感觉就不再是慢,而是卡

    所以DOM操作优化的主要目的就是消灭页面卡的问题,这个在移动端尤为重要。

    关于页面渲染

    浏览器会解析三个东西:HTML、Javascript、CSS

    浏览器首先会根据HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,javascript可以通过DOM API与CSS API操作DOM Tree与CSS Rule Tree,从而引起页面变化。

    浏览器解析结束会通过DOM Tree与CSS Rule Tree形成render tree,只有display不为none的元素才会形成render Tree,render Tree形成后浏览器会调用GUI绘制页面,在此之前做的一件事情便是layout或者说reflow。上面的描述简单而言可以分为以下流程:

    l  生成DOM树

    l  计算CSS样式

    l  构建render tree

    l  reflow,定位元素位置大小

    l  绘制页面

    在这个过程中,若是javascript动态改变DOM Tree便会引起reflow

    页面中的元素改变,只要不影响尺寸,比如只是颜色改变只会引起repaint不会引起回流

    否则,reflow不可避免,这个时候便需要重新计算形成render Tree

    reflow分为局部回流与全局回流,会影响下面的,不会影响上面的元素

    reflow耗用的系统资源较大,DOM Tree中受到影响的节点皆会reflow,然后影响其子节点最坏的情况是所有节点reflow,该问题引发的现象便是低性能的电脑风扇不停的转,手机变得很热,并且非常耗电,以下操作可能引起reflow

    l  操作dom结构

    l  动画

    l  DOM样式修改

    l  获取元素尺寸的API

    减少使用定位属性(fixed/absolute)

    static元素处于文档流中,其渲染速度是最快的,我们做过一个测试:

    100个absolute元素与100个static元素渲染时差在0.01-0.007ms

    100000个元素渲染差距便增至30ms左右,这个微小的时差在移动端变得尤为明显,比如:

    小米/三星手机(1000左右),便存在明显的渲染问题,具体表现为:

    l  定位元素在手机上不能显示。

    l  定位元素动画效果失效。

    以上问题便是UI渲染失效多导致,最好的解决方案是减少使用定位元素,否则只能引起强烈reflow才能解决。

    另外,产品经常会有fixed的相关需求,比如支付按钮一直出现在低端,这个需求会造成两个问题:

    l  fixed元素遭遇文本框时失效,可能会飘到页面中间阻挡输入

    l  影响效率

    问题一原因与移动端的实现有关,暂时没有完美的解决方案,问题二便与渲染直接关联

    滚屏时,页面上所有的像素会跟着滚动,显卡对全屏幕上下移动的处理很快,但是若是出现一个fixed元素或者有元素不跟着一起滚动,那么滚动对手机浏览器来说就是一个负担,这种滚动的性能甚至体现在了iphone 4s,因为滚动可能会造成reflow,这个现象体现在:

    使用absolute配合javascript模拟fixed效果时,会有断片的效果,该问题在iphone5s便不会出现这个问题。

    奇技淫巧

    当然,我们不能忽略产品的需求,fixed类需求应该在技术上得到解决,还用户一个良好的体验。

    虚拟键盘导致fixed元素错位

    fixed元素一定会伴随虚拟键盘的出现,但是虚拟键盘只是“贴”在了viewport上,表面上不会对dom产生“任何”影响,但是这个时候fixed元素表现却变得怪异起来,会错位。

    应用层面解决问题方案是,虚拟键盘弹出时将fixed元素设置为static,虚拟键盘消失时候设置回来。

    由于虚拟键盘出现并未抛出事件,而检测scroll或者resize事件,皆会有一定延迟,会出现闪烁现象,所以现有最好的方案是setinterval定时器监控当前获取焦点元素是否为文本元素,若是是的话便需要处理,如此便可解决fixed元素错误问题。

    fixed元素滑动惯性平滑度

    我们常常遇到这种产品需求,tab标签栏开始固定,当滚动向下超过该标签栏后便会变成fixed元素,一直出现在头部,这样的需求在电脑上没有问题,但是在iPhone5s以下的手机常常会出现小范围错位或者快速移动大范围错位的问题。

    这个时候我们可以引起reflow迫使浏览器重绘以解决这个问题,这里推荐一个奇怪的hack写法:同时设置三个image元素的src属性,便可以全范围解决该难题,  该方案被团队证实并得到应用。

    //三图片src,引发reflow,处理fixed方案惯性问题

    var el = this.els.ctlc.find('img');

    $(el[0]).attr("src", 'http://res.m.ctrip.com/html5/Content/images/144.png');

    $(el[1]).attr("src", 'http://res.m.ctrip.com/html5/Content/images/144.png');

    $(el[2]).attr("src", 'http://res.m.ctrip.com/html5/Content/images/144.png');

    另外,上图中的tab标签下面的蓝线具有动画,但是在小米或者三星手机上可能不会移动,这个时候也可以动态引起reflow解决这个BUG。

    其它

    l  CSS选择器尽量使用id与class,避免过度层叠

    l  避免使用数值,比如:border: none不会引起渲染,而boder: 0会

    l  动画时候让元素脱离文档流,以免导致大量reflow

    l  避免逐条修改DOM样式,改以className实现同样功能

    l  操作DOM时将display设置为none,因为这种元素不会影响渲染,或者操作fragment对象取代操作显示在页面上的DOM

    l  避免将获取DOM样式属性的操作写在循环中,可能引起重复reflow

    内存资源优化

    移动端的javascript

    首先,移动端的性能与PC端的性能完全不在一个数量级上,比如,我哥做过一个测试,使用innerHTML绘制大段,之后想获取HTML的ID节点,事实上是获取不到的,这种问题在单页模拟多页,动态创建DOM会经常发生

    var element   = $('<div id = "test">...大量结构...</div>');

    $(root).html(element)

    $('#test)  //为空

    这类问题匪夷所思,因为页面UI渲染与DOM操作是互斥的,但是就算出现了这个问题,一个解决方案是使用settimeout,更好的方案是使用DOMNodeRemoved事件监控页面DOM改变,将我们的DOM操作回调放入以确保渲染结束。

    以上问题只是为了说明移动端的性能问题,这类性能问题会导致很多莫名其妙的问题,而且很多与渲染有关。但是这也从侧面说明了移动端资源的紧缺,若是heap值过大,会导致操作出现卡的现象,更有甚者,会引起页面假死直接退出。

    webapp的模式,完全依赖于浏览器的垃圾回收,基本就是作死,因为传统页面一旦刷新页面整个资源完全释放,而webapp没有刷新这类操作,只有一个状态到两一个状态,不相关的内存会保留,资源必须手动释放,或者说,框架必须提供垃圾释放的机制。

    这个由图表heap值变化可以清晰看出。

    而view切换过程中,不用的资源若是不手动设置为null会导致变量得不到回收便脱离框架控制而失控了。所以我们在webapp的过程中需要注意:

    l  释放没有使用的闭包

    l  观察者需要得到清理

    l  释放定时器

    l  view切换过程中,在destroy中释放view相关资源

    ——感谢艾伦友情支援

    闭包陷阱

    在我们工作过程中,滥用局部变量极有可能引起闭包陷阱,这个问题不止是性能问题,在逻辑上会引起错误,而且不易发现,比如,在AMD闭包中使用一个局部变量

    var _attributes = {};

    callback ($.extend(_attributes, opts));

    如此操作,会改变_ attributes对象,若是一个实例还无问题,但是两个实例的话便会发生变量污染。

    这只是一个例子,但是在代码中滥用局部变量可能会引起不必要的隐忧,戒之慎之。

    webapp资源释放

    根据前面的描述,我们可以得出一个结论:

    无论是view还是UI组件我们得提供统一的destroy接口,以便让用户继承释放资源。

    若是view的资源得不到释放导致heap值过高,webapp模式的网站其价值大减。这里有几点可以考虑:

    l  webapp中view实例保存不超过5个,多了便释放dom结构以及内存引用(临界值自己判断最优)

    l  view隐藏时释放内部资源,解除DOM事件句柄

    l  UI组件与view相同,需要统一释放机制

    但是单页应用由于页面不会刷新,总有一些资源得不到释放,此问题任重道远,平时编写过程可以做以下优化:

    l  使用函数替换逻辑

    让我们的函数产生一个返回值替换函数中的大段逻辑,这样的第一个好处便是逻辑清晰,第二个好处是这些函数在不同的函数中,这个函数被使用后便会自动得到释放。

    l  清理闭包引用

    当一个闭包函数或者什么使用结束后,若不会再使用,便需要手动清理该变量,以便解除闭包之间的引用关系,从而释放资源。

    l  使用对象属性或者方法

    一个对象可以引用其他对象的属性或者方法,比如obj.foo = thatObj;这种情况下,我们可以随时删除对象解除引用关系,然后便可以清理资源。

    动画与假死

    动画而言建议采用CSS3实现动画,CSS3中又推荐采用最新的接口,比如使用transform取代top/lelf操作,这样操作效率搞得多。

    若是采用动画可以将对应元素设置为absolute以减少回流,另外最关键一点还是

    避免移动DOM树过多的节点,这个时候需要驳回产品无理需求,比如:

    产品要求日期滚屏组件,显示半年的数据,这半年的数据便是180个DOM树

    这个级别的DOM一旦移动整个手机会直接卡死,甚至构建DOM树,渲染页面也会出现假死现象,该问题需要规避。

    Application Cache

    Application Cache是HTML5为webapp离线使用而增加的API,与localstorage、cookie等不同,Application Cache存储的是一系列请求资源允许浏览器在请求资源时不必通过网络,设计得当的话可以实现离线应用。

    使用Application Cache主要是在网络性能上提升,有效降低了网络延迟,提升请求加速

     

    但是也会有一些问题,比如新版本缓存不立刻生效;manifest中的请求路径相对于manifest文件,而非加载页面;更新/回滚等问题,所以使用与否还得论证。

    体验优化

    区域滚动

    移动端经常需要实现区域滚动的需求,成熟的也有IScroll解决方案,但是方案却不理想。

    就官方的例子便会出现以下问题:

    l  头部消失

    l  偶尔不能显示文本框焦点,或者焦点错位

    若是以上问题可忽略,但是文本框不见了这种事情,我是不会接受的

    导致的原因与组织浏览器默认事件有关,所以,我这里不太推荐各位大范围的使用区域滚动,而改在区域使用,

    就去哪儿的ipad版本在一个具有文本框的地方使用了IScroll,其提高的用户体验与导致的问题一样引人入胜。

    事实上,小钗及其推崇IScroll库,虽说他有这样那样问题,但是,IScroll是最有可能带来移动端革命的库,因为他可以:

    ① 解决webapp区域滚动

    ② 变相解决fixed问题

    ③ 解决动画过程带来的长短页问题

    总而言之,IScroll方案的提出,是让webapp媲美native app靠近了一大步,真正的平起平坐还需要浏览器的支援

    点击响应

    click本身在移动端响应是没有问题的,但是我们点击下来300ms 的延迟却是事实,这种事实造成的原因就是

    手机需要知道你是不是想双击放大网页内容

    所以click点击响应慢,而touch却不会有这样的限制,于是移动端的touch相当受欢迎,至于鼠标慢,他究竟有多慢,我会告诉你每次会慢300ms

    所以该问题需要处理,具体见:http://www.cnblogs.com/yexiaochai/p/3462657.html#_h2_7

    结语

    webapp不是一天两天的事情,总有一天,webapp会绽放其应有的风采!

    展开全文
  • webapp开发参考

    2017-12-04 11:21:58
    webapp开发参考: http://blog.csdn.net/zhuming3834/article/details/51706256
    展开全文
  • HBuilder webApp开发

    2018-09-03 13:14:25
    https://blog.csdn.net/zhuming3834/article/category/6307605 转载:互相学习,webApp相关的东西很全。 解决了我好多问题,大家有什么不会的也可以和我一起讨论。 共同进步    ...
  • WebApp开发实践

    2020-01-18 15:58:40
    webApp开发由Java实现,运用了 jdbc,jsp,servlet,jQueryFlot图表 等技术,数据库为SqlServer2008,仅供参考学习,转载文章需注明: 一、后台实现 (1)用户的登入: (2)修改密码: (3)软件管理: (4)软件上...
  • webapp开发框架

    千次阅读 2020-10-06 11:43:14
    快速增长的APP应用软件市场,以及智能手机的普及,手机应用:Native(原生)APP快速占领了APP市场,成为了APP开发的主流,但其平台的不通用性,开发成本高,多版本开发等问题,一直困扰着专业APP开发企业,和APP服务...
  • webkit webApp 开发技术要点总结.欢迎下载学习
  • WEBAPP开发技巧总结

    2013-03-19 11:26:40
    WEBAPP开发技巧总结 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词-WebApp(意为基于WEB形式的应用程序,运行在高端的移动终端设备)。 开发者们都知道在高端智能手机...
  • WebApp开发入门

    2015-03-27 17:00:07
    在此所说的移动平台前端开发是指针对高端智能手机(如Iphone、Android)做站点适配也就是WebApp,并非是针对普通手机开 发 Wap 2.0,所以在阅读本篇文章以前,你需要对webkit内核的浏览器有一定的了解,你需要对...
  • 据了解,BAE是具备运营商差异化能力的跨终端系统移动互联网应用平台,它支持MobileWidget(移动微技)的跨平台运行,能快速在手机上实现一般网页很难实现的功能和应用,例如多媒体播放功能、位置信息访问等。...
  • webapp开发插件

    2014-08-12 09:47:51
    整理平时用到的或者看到的一些适用移动web开发的js插件,长期更新。 1、touch.js 官方网站: http://touch.code.baidu.com/ 简介: Touch.js 是移动设备上的手势识别与事件库, 由百度云Clouda团队...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,869
精华内容 31,547
关键字:

webapp开发平台