“泡上”用户的三步法:如何提高网站黏度

作为一个网站,,最重要的是什么?对!就是用户,为了留住用户,,每个站长和设计者都在不断的尝试用各种方法来增加网站的黏度,但是在互联网大军中,成千上万的网站冒出来了,又有成千上万的网站倒下去了,今天我站在开发者的角度来谈谈怎么“泡上”用户,提高网站黏度。

在过去25年里,真正伟大的消费技术类公司都有一个共同的特点,他们创造消费习惯。这是将改变世界的商业企业与其他企业区别的关键。苹果、 Facebook、亚马逊、Google、微软以及Twitter都是用户日常使用率很高的产品,而这些公司的产品都具有足够的吸引人,这样我们许多人很 难想像没有他们的生活是怎么样的。

不过,创造习惯是说易行难之事。虽然已经有众多有着行为工程以及行为对网络的未来重要性的文章了,不过,关于创业者所需要的设计和测算用户行为的工具资源仍然不足。并不是这些技术不存在——事实上,对于在企业里工作的来说,这些技术非常熟悉。不过,对于新创业者来说,这些工具很是神秘。

所谓的“习惯测试”是一些行业内最优秀的公司采用的方法,并由一些消费网络公司用于打造用户爱不释手的产品。

习惯测试

习惯测试完全适合于创建、测算、学习方法论,并得到了精益创业运动的支持,而且它提供了一种新的方式,让数据可用于采取的措施之中。习惯测试能明确三个问题:1)你所服务的人是谁?2)如果可能的话,你的产品中的哪一部分能变成习惯?3)这些部分为什么能转变成习惯?

习惯测试的一个前提条件是有一种产品出现并运营。当然,在推出一款最简化可实行产品之前,一个好的办法是:尝试一下你的商业模式设想,并找到你的产品创造出用户期望的方式。

如果你有一个网站或应用上线,你可以开始收集数据。习惯测试并不要求收集所有东西的数据——只要是合适的,因此,关键是要设定适当的分析方式。为了让习惯测试达到目的,需要在用户使用你的网站的时候标记出用户路径的时间点。

步骤一:分辨用户

在有必要的网站和统计方法的前提下,你需要回答习惯测试的第一个问题是:“哪些用户拥有习惯性的动作?”首先,明确这对于要服务的用户的意义何在。 问问自己,一个用户要多久“才”会使用网站。这也就是说,假设有一天,所有的bug都清理了,产品也很完美地“随时待命”,你希望有习惯性用户多久来访问 网站?

要着眼现实和忠于自己。如果你的公司开发了一个移动社交网络应用,如Foursquare或Instagram,你希望习惯性用日元每天多次登陆应 用。不过,如果你在开发一个电影推荐网站,如la Flixster,你不会希望用户一周访问超过一至两次。不要对于通过计算过度依赖性的性而得到过于乐观的预期;你只要找到一个符合实际的想法,计算出用 户要多处才与你的网站互动。

一个简单有效的办法也许是:发现你和你的同事平均多久会使用你的产品。当然,越多越好。Twitter网站来是Odeo的一个内部产品,后者Biz Stone和Jack Dorsey最初创建的公司,因为工程师们一直都在使用这个网站。

需要注意一件事:你的产品使用的频率越高,用户习惯就越有可能形成。不过,这并不是说几乎不使用的网络产品就不是好的企业,他们只是没有形成习惯, 因而特别也各不相同。要有可行性,即使非习惯形成的公司有可能倾向于更具有交易性的,要求经常性地与客户交流,让用户常记于心。

例如,旅游行业残酷的斗争让我们不断地访问不同的网站。Expedia、Travelocity等等都频频被普通用户访问,形成了一种习惯,因此, 他们经常性地为争夺用户的注意力。这些是可行,甚至是盈利的企业,不过,由于这些网站是非习惯形成产品,他们总是面临更多的竞争威胁。日常使用的产品自然 而然地会对于市场进入创造障碍。

谁会养成习惯?

既然你已然了解用户“必须”访问网站的频率,就要对数据进行分析,了解有多少用户真正地做到了。这时使用一个统计工具就能表明这些数据超有帮助。不 用将工程师让放下他们核心的产品开发工作,或者甚至是让商务的人来做这事,而是可以考虑招一个擅长做数据统计的毕业生来做,计算有多少用户喜欢你的网站。 最好的办法是创造一批分析数据,设置一个底线,并以此来衡量未来的产品迭代开发。

步骤二:规范化

你至少会有一些用户会经常性的与你的网站互动,成为你眼中的“爱好者”。不过,多少爱好者才算足够多呢?我的制订的规则是5%。即使活跃用户率需要更高才能维系你的业务,不过,5%会是开始习惯测试的合适基数。

不过,如果连5%的用户都没有发现产品拥有你所设想拥有的使用价值,那就是你的问题了。这时,重要开始设计,重塑你的设想。不过,假如你的用户人数超过了这个底线,那么你就找到习惯用于,下一步就是整理出他们使用你的产品的步骤,这样你就能了解让他们迷恋你的网站的东西。

每个用户与你的产品互动的方式略有不同。即使有一个标准的用户流程,用户对你的网站的参与程度会创造一种独特的数据轨迹,这能用于分析并发现模型。从数据转化到决定是否会出现类似的行为。你可能会希望发现一种“习惯路径”,即一系列大多数忠实用户共有的类似行为。

例如,在Twitter的早期,发现一旦新的用户关注足够多的其他用户,这些新用遍及不会达到一个爆发点,他们使用网站的机率就会急剧增多。对每一家公司而言,忠实用户所使用的行为各有不同;发现“习惯路径”的目标是用于决定哪里些步骤是创造忠实用户的关键。

了解用户的想法

在了解了“习惯路径”之后,一下步就是假设如何通过这个路径让“路过”的用户变成忠实用户。尽管如此,这一步看上去有点象是从相关性找出原因;不过,在新产品发布前夕,这是我们能做到的事。

在这一阶段,很合适亲自与用户交流,了解他们使用产品的原因以及方式。习惯测试可用于证明这些“道听途说者”的特别之处,发现可以对其他的用户进行总结的东西。

步骤三:调整

将这些新的假设放在心上,回到开发、测算、了解各个环节,将新用户引向忠实用户采用的相同的“习惯路径”。例如,Twitter现在的流程利用用户的“习惯路径”,引导新用户在一开始就立即关注其他用户。

习惯测试是一家持续流程企业用于对每一个新功能和产品迭代开发所采用的方式。追踪批量用户,将他们的行为与习惯性用户比较,就能引导产品进化、改进以及培育习惯养成等。

技术创业者经常性地发现自己的想法得不到认同,原因是他们没有意识到创造用户习惯重要性。不幸的是,如果产品不能习惯一种习惯,它有可能也生存不下去。使用“习惯测试”来明确产品的最大价值以及习惯形成,创业者以此就能更好地为用日元服务,增加创造改变世界级公司的机率。

MORE >>
标签:

Android游戏开发新手应准备的知识和技巧

如果你对开发Android平台游戏感兴趣,那么你需要了解很多东西。我开发过《Light Racer》、《Light Racer 3D》、《Antigen》、《Deadly Chambers》和《Wixel》,这些游戏在Android Market上都可以找到。在开发过程中,我学到了许多有关编写Android游戏的知识,我愿意同每个人分享。如果你有游戏开发经验,那么转向手机平台 不会很困难。你只需要学习框架和API即可。如果你是游戏开发新手,我在这篇文章中列举了许多起步必须了解的知识。它们可以运用到许多不同类型的游戏中, 包括动作、战略、模拟和解谜。

Android是个基于Java的环境。这对新开发者来说是个好消息,相对比C++来说,Java语言因其较为简单而广泛被人采用,成为目前手机开 发的常 用语言,也是目前我自己使用的语言。Google在编写API和提供范例方面的工作做得很好。该公司提供了一个展示API几乎所有功能的范例,称为 “API Demos”。如果你熟悉Java而且已经使用过Eclipse,那么让你的首款应用成功运转应该是相当简单的事情。如果你此前从未接触过代码编写,那么 你需要先掌握很多知识才能继续前进,但是也不要因此灰心。如果你有些许开发经验,想要以C++开发跨平台游戏或表现出色的Android游戏,可以查看 BatteryTech,这是个我编写的目前用于游戏开发的平台。

android-development(from android-video-player.com)android-development(from android-video-player.com)

获得SDK

开发Android平台的首个步骤是获得Android SDK(游戏邦注:即软件开发工 具包)。SDK包含核心库、模拟器、工具和代码范例。我强烈推荐使用Eclipse和Android Eclipse插件。如果你只面向Android平台,那么专门供Java Developers使用的Eclipse IDE是个很好的工具。如果这是你的首个Java开发项目,你可以下载整个Java SE Development Kit(游戏邦注:简称“JDK”),因为它包含你需要用于应用认证和部署的工具。

学习应用程序架构

理解Android应用程序架构也是件非常重要的事情。如果你不学习这个方面的内容,可能会使游戏完成后问题的修改变得很困难。你需要理解应用程 序、活动、意图以及它们之间的相互联系。Google在架构方面已经提供了许多有价值的信息。真正重要的是,要理解游戏为什么需要包含不止一个活动以及这 对设计良好用户体验的意义。我们接下来要探讨的就是活动生命周期。

学习活动生命周期

活动生命周期由Android操作系统管理。你的活动将根据操作系统的指令创建、回访、暂停和摧毁。正确处理这些事件对构建有着良好行为的应用程序 非常重要,这样应用才能正确地满足用户的意图。在你开始设计游戏之前,有必要先知道所有这些内容的运转方式,这会减少你将来调试和重新设计的时间。对于多 数应用程序来说,使用默认设置就可以了。但是对游戏来说,你可能需要考虑打开SingleInstance功能。当处在默认设置下时,Android会在 合适的时候自动创建新活动实例。对于游戏来说,你可能只想要单个游戏活动实例。这也等于提示你需要如何来管理内容状态,但是对我来说,它解决了某些资源管 理问题,所以应当考虑入列。

主循环

是否拥有主循环取决于你编写的游戏类型。如果你的游戏与时间无关,或者如果游戏只会对用户的行为做出反应,没有用户输入视觉场景就不会发生改变,那么你或许不需要主循环。如果你编写的是动作游戏或带有动画、计时器或其他自动运转内容的游戏,那么你应当认真考虑使用主循环。

游戏的主循环指以特定顺序运转子系统,通常会尽可能提升每秒主循环的次数。你的主循环需要在它自己的线程上运行。原因在于,Android有个主 UI线程,如果主循环不在自己的线程上运行,那么UI线程就会受游戏影响,导致Android OS无法完成普通的更新任务。执行顺序通常是:状态、输入、AI、物理、动画、音效和视频。

更新状态意味着管理状态改变,比如游戏结束、角色选择或下个关卡。通常情况下,你需要在一个状态上等待数秒钟时间,状态管理的任务应当是处理这个延迟并设置时间过后的下个状态。

输入是指来自用户的任意按键、滚动或触碰。在处理物理前完成这个方面的内容是很重要的,因为输入往往会影响到物理效果,所以先处理输入会让游戏显得 更为灵敏。在Android中,输入事件来自于主UI线程,所以你必须通过代码来缓冲输入,这样你的主循环才能适时将其捕获。这并不是个很困难的任务。所 有需要做的就是为下次用户输入确定区域,用onKeyPressed或onTouchEvent将下次用户动作设置到该区域中。在特定游戏状态下,所有的 有效输入都需要进行输入更新,让物理端处理针对该输入的响应问题。

AI更新类似于用户决定接下来要“按”的按键。学习如何编写AI不是这篇文章的主题,但基本想法是,AI将像用户那样按动按键。这也将被物理更新捕捉并做出响应。

物理更新可能是真正的物理,也可能不是。对于动作游戏而言,要点在于同时考虑上次更新时间、此次更新时间、用户输入和AI输入,决定游戏中所有内容 的位置以及是否有碰撞发生。对于你可以看到对象抓取和滑动的游戏,物理更新还需要处理对象的互动或者让它下落到指定的位置。对于问答游戏,它还需要决定答 案是否正确。或许你使用的是其他的名称,但是每款游戏的游戏引擎中都需要有处理上述内容的部分,在这篇文章中我将其称为“物理”。

动画并不只是在游戏中加入gif这么简单。你需要让游戏在恰当的时候播放每帧动画。但是,它也不像听起来那么难。要保持isDancing、 danceFrame和lastDanceFrameTime等状态区域允许动画更新以决定是否转向下一帧。这就是动画更新所做的所有工作。真正负责呈现 动画改变的是视频更新。

音效更新负责触发音效、暂停音效、改变音量和音调。通常在编写游戏时,音效更新会生成一连串字节传输给音效缓冲器,但是Android自行管理音 效,所以针对游戏开发,你可以使用SoundPool或MediaPlayer。它们都有一点敏感,但是要知道,由于存在某些低层次的执行细节,小而低位 速率的OGG也能产生最棒的运行表现和稳定性。

视频更新要考虑游戏状态、玩家位置、分数和状况等内容,在屏幕绘制所有内容。如果使用主循环,那么你可以考虑使用SurfaceView,进行“推 送”绘制。如果使用其他视图,视图本身能够调用绘制运转,这样主循环就无需负责这项工作。SurfaceView能够提供最高的每秒帧数,最适合带有动画 或在屏幕上有移动物体的游戏。视频更新应该做的工作是,获取游戏状态,并及时绘制在屏幕上。除此之外,其他的自动化内容最好由其他更新任务来完成。

以下是个代码范例:

public void run() {
while (isRunning) {
while (isPaused && isRunning) {
sleep(100);
}
update();
}
}

private void update() {
updateState();
updateInput();
updateAI();
updatePhysics();
updateAnimations();
updateSound();
updateVideo();
}

3D还是2D?

在你开始开发游戏前,你需要决定是制作3D还是2D游戏。2D游戏要学习的内容较少,通常更容易获得良好的表现。3D游戏需要更多的深层次数学技 能,如果不注意的话,可能会产生表现问题。如果你想要添加比方形和圆圈更加复杂的形状,那么无论选择3D或2D,都需要使用3D Studio和Maya等模型工具。Android支持使用OpenGL进行3D编程,网络上有许多很不错的OpenGL教程可供阅读。

构建简单且高质量方法

开发开始时,确保不要编写又大又长的方法。如果你采用我在上文中描述的主循环样式,这样得出的方法应当较为简单。你编写的每个方法都应当能够完成某 项特定任务,而且不可发生错误。比如,如果你需要在游戏中洗牌,那么就应当编写名为“shuffleCards”的方法,而且这个方法就是用来完成洗牌这 个动作。

这是个可用于所有软件开发的编程方法,但是在游戏开发中显得特别重要。在状态化的即时系统中,调试会变得非常困难。要保持方法简单轻巧,最好是保证 每个方法只有1个目标。如果你需要为场景绘制背景,那么你可能需要名为“drawBackground”的方法。这样会让你的游戏开发变得像搭建方块一 般,你可以随时根据自己的需要添加新方块,同时不会让代码变得难以理解。

效能是关键

运行效果是所有游戏遇到的主要问题。我们的目标是让游戏的反应速度尽可能快,游戏的运行看起来尽可能流畅。Canvas.drawLine等某些方 法可能执行较慢。而且,在每帧的主画布上绘制全屏位图也会耗费大量时间。要让应用实现最好的表现,平衡这些动作就成了必要之举。确保对资源进行良好的管 理,使用各种技巧,实现用最少的CPU完成任务。如果表现不好,即便是最棒的游戏也显得乏味无趣。通常情况下,人们不会对反应缓慢的应用抱有好感。

技巧

看看SDK中的《LunarLander》范例。它使用的是SurfaceView,这对需要每秒帧数达到最高值的游戏来说是个合适的视图。如果你 想要制作3D游戏,可以看下GLSurfaceView。它利用了OpenGL设备初始化,提供渲染机制。对于《LightRacer》,我需要优化游戏 中所有内容绘制的方法,否则帧率会相当低。我只在视图初始化时用位图绘制单次背景。轻轨的位图会随赛车手的移动而获得更新。这两个位图每帧都会绘制在画布 上。这种技术能让游戏以可玩的流畅度运行。

如果可以的话,将位图大小设置为与在屏幕上绘制的意向大小相同。这样,就无需对位图进行缩放,从而节省了CPU的使用。

在整个游戏中使用一致性的位图配置(游戏邦注:如RGBA8888)。这可以节省用于转换不同格式的图像库CPU。

如果你决定开发3D游戏,但没有3D的相关知识,你可以先阅读一两本有关3D游戏编程的书籍,学习线性代数。最少,你必须理解点积、叉积、矢量、单 位矢量、常数、矩阵和转换。我见过的阐述游戏相关数学内容的最棒书籍是《Mathematics for 3D Game Programming and Computer Graphics》。

保持音效容量较小且码率较低。加载的内容越少,加载的速度就越快,游戏使用的内存也就越少。

要用OGG作为音效格式,用PNG作为图像格式。

当活动结束后,确保关闭所有媒体播放器并移除所有资源。这将确保垃圾收集器能够获得所有东西,在游戏的两次开启间不会出现内存泄露问题。

加入Android Google小组,寻求社区的支持。社区中有许多人会帮助你解决许多问题。

此外,花时间对游戏进行重复测试,确保游戏中所有内容的运转都与你的预期相同。润色游戏是开发过程中最漫长和最艰难的阶段。如果你匆匆将游戏推向市 场,它的表现可能会让你失望,你或许也会觉得自己的艰辛都付之东流。你不可能让100%的用户都喜欢你的游戏,但是你至少应当努力呈现最高质量的作品。

游戏邦注:本文发稿于2008年5月11日,所涉时间、事件和数据均以此为准。

MORE >>

开发者应该关注的五项Web新兴技术:WebGL和SVG名列其中

Bruce Lowson是Opera开放web标准的撰写人员之一,一些没有包含在HTML5之内的浏览器技术十分奇妙,包括WebGL和SVG,作者希望通过本文与共同爱好者们分享。

最近一位HTML5专家Rich Clark(作者的好朋友)为大家做了一个HTML5 APIs的简介,在文章中为大家指向了一个令人迷惑的网页(web平台:浏览器技术http://platform.html5.org/),其中包含两 个很长的专栏和小正文并提及到一些让人感到迷茫的技术,例如“window.crypto.getRandomValues”和“DOM Mutation observer”。

别担心,咱们不去管那些啦,因为有些还远远没有完成呢,在浏览器中见到它们还要等一阵子。然而,其它已经在浏览器中,或者距离您很近,或者马上就要 出现。人们可能将称之为“HTML5”,尽管它们并不是。其实,它们都属于令人激动的新兴Web技术(New Exciting Web Technology),值得每个开发者关注。

WebGL

WebGL是一种基于Web的Graphic库,由非盈利组织Khronos运营,目前结合HTML5<canvas>元素广泛应用在3D图形开发中。

学习WebGL比较困难,因为它是底层开发——它运行在GPU上面,而且它实际上是一个OpenGL的JavaScript port,是一种游戏开发者使用的已经长期建立的API集。WebGL的主要受众是哪些已经拥有丰富OpenGL经验的游戏开发者,他们可以通过 WebGL为web平台编写游戏。

好在有很多资源可以帮助您学习WebGL,这些资源不仅仅是关于游戏开发的,还有很多奇幻的图形、视觉和音乐视频等方面。作者个人比较推荐的是:

  • Introduction to WebGL。http://dev.opera.com/articles/view/an-introduction-to-webgl/作者Luz Caballero,简介可以获得的各种库。
  • Raw WebGL 101。http://dev.opera.com/articles/view/raw-webgl-part1-getting-started/适合那些不使用库的用户。
  • Learning WebGL。http://learningwebgl.com/一个非常好的引导网站。
  • WebGL 101。http://www.youtube.com/watch?v=me3BviH3nZc一个由Erik Moller制作的介绍视频(2.5小时)。
  • See Emberwind。http://operasoftware.github.com/Emberwind/一个由Erik Moller做的WebGL游戏port,您可以深入Github或看代码。

WebGL目前在所有桌面浏览器(发布版和开发频道)中都支持,除了IE10(微软表示不支持)。对于移动产品来说,已经在Opera Mobile 12中发布了,最终会出现在Android,BlackBerry Playbook 2.0,Nokia N900,SonyEricsson Xpertia Android Phones等以及Firefox移动浏览器中。

SVG

SVG(Scalable Vector Graphics)已经在Opera,Firefox,Chrome中存在多年了,但是直到IE9开始支持它之后才渐渐变得主流一些它在 HTML5<Canvas>的光环下显得有点暗淡,尽管SVG和HTML5<canvas>是面向不用应用的不同工具。

Canvas2D可以迅速paint图形到屏幕上面,这一点很犀利。但是其全部功能就是paint了,没有内存来做那些(位置,顶层或其他)其他功 能。如果您需要那种book-keeping工作,就只能自己用JavaScript实现,因为Canvas2D不会把DOM保存到内存中,也正因为如此 Canvas2D速度快,十分适合第一人称射击类应用。

与Canvas2D不同,SVG在您需要保存DOM的时候就给力了。使用JavaScript,所有的Objects都可以移动并且与动画无关。您 可以试试Daniel Davis做的复古类SVG游戏Inbox Attack(http://people.opera.com/danield/svg/inbox-attack.svg)来体验一下,并且看看源代 码来了解如何完成动画效果。

因为shape和path是用Markup来描述的,所以他们可以用CSS来定型。与<canvas>不同,text在SVG中保持 text格式并且更加的灵活,更加可扩展,更加易于访问。在Canvas中,text变成了像素,就像Photoshop中的图形text。

SVG最强大的特性是它基于矢量,这样您的插图,图形和UI图标等都是矢量图了,这样无论是在50英寸的电视屏还是手机屏幕桌面上,看上去感觉都是 一样的清晰。在当今这样一个web应用无处不在的时代,SVG图形甚至可以包括媒体查询(http://my.opera.com/ODIN/blog /2009/10/12/how-media-queries-allow-you-to-optimize-svg-icons-for- several-sizes),可以是响应式的,可以根据不同的目标设备做尺寸的调整。

综上所述,在最新的桌面浏览器中SVG已经能被广泛支持了。在移动产品方面的支持总体上来说也很好,以及预期在Android 3.0版本之前原生浏览器也会支持它了。

Daniel Davis有一些SVG 介绍性的资源(http://my.opera.com/tagawa/blog/learning-svg),作者个人也推荐一本免费的电子 书:Learn SVG(http://www.learnsvg.com/book-learnsvg/),您也可以看看《SVG or Canvas?Choosing Between the Two》(http://dev.opera.com/articles/view/svg-or-canvas-choosing-between- the-two/)来了解二者的区别。

getUserMedia

不像那些被错误地称为HTML5的API,getUserMeida(在下文中简写为gUM)有个相对正当的理由:起初它是HTML5<device>元素,之后它改名了然后离开了W3C WebRTC规范集合。

gUM允许访问用户的摄像头和麦克风,本来是在WebRTC规范中在浏览器中进行P2P视频会议的,当gUM拥有了其他的用途,就离开了WebRTC。

摄像头的访问最终在Opera12安卓版,Opera桌面实验室和Google Chrome Canary里面实现了,不过Opera和Chrome都还没有实现麦克风的接入。

W3C规范依然在用,所以Opera和Webkit有不同的语法规范,这样的麻烦被一个叫做The gUM Shield(https://gist.github.com/f2ac64ed7fc467ccdfe3)的小JavaScript片段搞定了。如果 您想更深入地了解这方面请看作者的另一篇文章:It’s Curtains for Marital Strife Thanks to getUserMedia(http://html5doctor.com/getusermedia/)

当视频从设备开始流传输的时候,源数据可以被做成变成了<video>元素,如果需要的话还可以被定为到屏幕外面,然后拷贝 到<canvas>里面进行所需要的操作。Paul Neave写的《HTML5 变成玩具!》(http://neave.com/webcam/html5/)为了方便操作把流媒体数据拷贝到WebGL中。作者在.net 杂志的226话有采访他的报导(http://www.netmagazine.com/shop/magazines/april- 2012-226)。

如果想把web app的功能做得像native app,gUM需要做很多的工作。试了一下Neaver的gum和WebGL 在Opera Mobile 12上面的demo,感觉和平台独有的app一样富有响应式并且很时髦。当在浏览器产品中其功能被广泛应用的时候,作者语言会有很多基于web的QR代码 阅读者以及很多增强现实的应用。

File APIs

W3C File APIs允许JavaScript访问本地文件,其中最常用的API是FileReader,可以从Opera,FireFox,IE10平台等的预览版看到(不包括Safari)。

这一份W3C规范“为了在web应用中提供API来代表文件对象,以及编程选择和访问数据”。例如:你可以上传文件到浏览器中,并本地查找相关信息 (例如文件名,尺寸,类型)而不需要到服务器端。您也可以打开文件,操作内容,这样可以加强基于浏览器的应用的交互性,用起来更像是本地应用。

另一个常用的用途是使传统的图像上传兑换狂更具有Web2.0特色:通过允许在浏览器内部的Drag and Drop,而不是本地文件系统中改变。

您可以通过使用一个普通的<input type=”file”>开始,然后循序渐进地提高。HTML5 Drag&Drop支持特征检测,如果存在的话就使用<div>替换<input>,那就是您的drag图像目标了。当 图像被drag到目标的时候,使用File Reader API来显示一个指甲盖大小的图像。您可以看一下Remy Sharp的demo(http://html5demos.com/file-api)。

还有很多写文件和操作文件系统的规范,不过这些对目前的跨浏览器应用来说还不太够:

W3C文件API:(http://dev.opera.com/articles/view/the-w3c-file-api/)非常基础的介绍。

开发文件系统API:(http://www.html5rocks.com/en/tutorials/file/filesystem/)HTML5 Rocks文章,(仅限Chrome)。

Feature-detecting, progressive enhancement and upgrade messages(特征检测,渐进式增强和消息通知)

诚然,在没有那些奇幻的API的时候,大家总是试图使用渐进式增强和HTML语义的方法让网站照常工作。然而有时候却不能这样,例如Paul Neaver的《HTML5变成玩具》中,如果gUM和WebGL现在不存在的话,其网站不能有什么补救措施了,整个网站的核心都没了。

在这样的情况下有两种典型的惯例:要么是显示一条消息说“你的浏览器太垃圾了,塞油哪啦”或者说“你必须用Chrome6/Firefox 4/Opera10等[插入能支持你应用的浏览器]才能访问”。第一种方法又没用又粗鲁,没有建议和补救措施;第二种方法是个临时办法,因为六个月之内所 有浏览器可能都能支持你现在使用的技术了,让你在网站上留下的信息过时:例如您写的解决方案是建议使用Firefox4来访问,可是半年后用户安装着 Firefox7回来访问你的页面了,这可就真的没救了。

如果您真的不能使用渐进式增强,那么就用新型的HTML 5 Please API吧(http://api.html5please.com/)。这是Jon Neal,Divya Manian和其他几位大虾创作的。通过使用它,可以先查询caniuse.com然后返回一个最新(能支持你的新特性的)的浏览器版本列表。

如果您已经做了一个需要Canvas或WebSQL DB技术的DEMO或者网站,恐怕你已经处在一个这样的尴尬境地了:您只是在告诉访问者们他们的浏览器不咋地。但是您不能只推荐他们使用一个能支持这些特 性的浏览器来补救,例如“找个支持WebRTC性能的浏览器再来吧”,这样对于大家都没啥效果。

HTML5 Please API把开发人员的语言(和特性)翻译成用户能理解的语言(浏览器)。通过调用这个API你就可以得到一些HTML返回值来告诉访问者,或者返回一个带有 相关数据的JSON对象(包括浏览器Logo及下载介绍等信息)。这样您可以根据不同的客户来显示不同的补救信息了。

使用这种方式最令人欣慰的是:如果所有新特性在客户当前浏览器的升级版都能支持的情况下,Please API值建议访客对浏览器升级,而不是让访客单纯为了访问你这个页面而更换浏览器。效果图如下:

结束语:

正如您所看到的,大量的令人惊喜的新技术正在接踵而至,您着手研究上述某项技术的时候恐怕又要担心更新鲜的技术到来了吧。希望您开发得愉快,请记得让您所开发的应用在尽可能多的浏览器上面测试一下。

———————————————————————————————

原文作者:Bruce Lawson2012年3月19日

图片整理:Rob Winter ;HTML5阐述: Mike Brennan

原文地址:http://www.netmagazine.com/features/developers-guide-new-exciting-web-technologies

关于Bruce Lawson :支持Opera开放标准,专注于HTML5,窗口小部件和接入性。他是一位HTML5专家,与Remy Sharp共同编写了《Introducing HTML5》。他的个人网站:http://brucelawson.co.uk/

MORE >>
标签:

建筑专业的同学千万不可错过这个群哦

建筑专业的同学可以来这这个QQ群看看,很好很强大噢,102310352,里面有很多的建筑方面资料都是免费大放送的哦,,先来先得,群主簿定时公布建筑相关专业最新信息!

 

MORE >>
标签:

WAP开发: WEB移动应用框架构想

iUI、jQTouch、WPTouch、PhoneGap、XUI、iWebkit、Rhodes、gwt-mobile…当我们已经开始惊叹 web移动应用充斥着各种各样框架与类库的时候,其实各大web框架才刚刚开始他们的移动领域:Yahoo的YUI3.2的Touch版、jQuery的 jQueryMobile、ExtJS整合JQTouch和Raphaël库推出的Sencha Touch框架。。。

ExtJs更名为Sencha的确让我震惊不少,毕竟自己也曾是ExtJs框架的粉丝,如此重量级的框架忽然掉头往mobile touch的方向发展,确实不是一件易事,我们也不禁惊叹移动应用所带来的重大改变。

OK,在这里我并不是想跟大家介绍各种web移动应用框架的用法介绍和性能对比。只是受ExtJs的影响,以及想知道自己到底去到一个什么程度,以 及更好 的积累沉淀下前端的经验,于是我开始构想一个好的web移动应用框架应该如何如何,并开始尝试着手实现。重复造轮子只是强迫自己更深入地去了解这个领域, 并不是自大到要挑战什么。于是分析对比了下,总结如下:

1.轻量级

这个应该是移动应用框架里最重要的一点,不要想着3G的普及还有wifi啥的,国情就是国情,要大部门用户在3秒内下载完你那100K的css和 js文件 是强人所难。因此我们的移动应用框架必须尽可能的轻量化,所有的命名和函数实现方法都要尽可能的简练和高度压缩。抛掉那些PC上web应用的特效和组件 吧,不要为了一个菜单效果把7,80K的jQuery.js加在你的页面上。

2.主流手机浏览器兼容性

面对如此多的手机平台和浏览器,要你的移动应用在所有浏览器上表现如一是很困难的,有时候你需要对不同浏览器加载不同的样式文件,又或是运行不一样 的函数 来实现效果。因此我们的框架必须有能识别各种主流浏览器的方法,具体点,你的框架必须能区分如iPhone、iPad、Android、Windows Phone等,OK,再国情化一点,QQ手机浏览器和UCWeb。最后要注意的是这里尽量不用UA的方法来判断,因为各浏览器的 avigator.userAgent都很不可靠,这里可以参考下mooltools判断浏览器的思路,应用到我们的移动领域上。

3.强大的选择器

选择器可以说是一个框架灵魂,在将来的web移动应用中会大量使用CSS3的高级伪类,因此我们的框架必须能尽快遍历定位到尽可能多的HTML5标签和CSS3的伪类,哪怕是像E:first-of-type这种jquery选择器都不支持的结构。

4.页面动画效果

与桌面web应用不同的是,移动应用在页面的切换效果方面要炫的多,比如:滑动切换,遮罩弹出,渐入渐出,闪屏,iPhone上的zoomin,zoomout效果等。看看CSS关于fadein和zoomin动画的定义:

再看看JS端对页面切换的处理:

5.Ajax解析

移动设备浏览器受性能和带宽限制,ajax的应用也与桌面应用有较大的区别,因此低带宽和易用性就成了ajax应用的目标,最典型的例子就是翻页,哈,一丝一毫的带宽都不能放过,这方面可以参考下iUI的思想。

6.手势操作

对,就是Touch,一个给移动互联网带来革命的事件。把mouseOut、mouseover这些桌面相关的鼠标事件从你的移动框架里去除吧,与之替换的是各种Touch和Gesture(手势)事件:

  • touchstart : 手指放在屏幕上时触发
  • touchend : 手指离开屏幕时触发
  • touchmove : 手指在屏幕上移动时触发
  • touchcancel : 取消Touch事件(这个貌似是系统触发的)
  • gesturestart : 开始手势事件
  • gestureend : 停止手势事件
  • gesturechange : 改变手势事件

监控Touch操作,我们需要利用Touch事件相对于整个页面视图的X轴和Y轴位置来定位(PageX、PageY),并重载默认的Touch事 件来扩 展我们的需求,对于没有Touch支持的浏览器,我们依然可以重载相应Mouse事件,而Gesture(手势)事件由于需要两根手指触发的放大、缩小、 旋转,鼠标是无法模拟,比如下面使用CSS3的webkitTransform样式属性缩放和旋转一个对象Box:

7.重力感应

当然,一般的应用很少会用到重力感应,它更适应于游戏方面。对于浏览器更多的是正屏与侧屏的区分。我们要做的就是重载浏览器默认的resize监控事件并对正屏和侧屏做出相应的操作处理。

8.离线存储

由于手机网络的特殊性,离线存储技术就变得相当重要,相关的API可以看看W3C提供的有关Client-Side的描述。Client-Side提供了3种离线存储的方案:

  • Database storage : 数据库
  • Local storage : 本地储存
  • Session storage : 区段储存

我们的框架必须能很好的封装这3种离线存储方式,提供一个方便易扩展的API,比如storage能直接储存JSON参数数据段,就好像下面的Demo:

恩,基本上是这样,然后就是构思整个框架的结构图了:

需要做的东西还蛮多的,构想归构想,这仅仅是个开始,如果你也有Touch框架这方面的兴趣和经验,欢迎一起来讨论下:)。

转自:http://wsd.tencent.com/2010/09/concept-mobile-web-framework.html

MORE >>
标签:

留言排行