2009-09-30 31 views
8

您是否尝试过使用单页网络应用程序,即浏览器只从服务器'GETs'一页形成,其余部分由客户端JavaScript代码处理(这是一个'应用程序页面的一个很好的示例'是Gmail)?仅限一页javascript应用程序

对于更简单的应用程序(例如博客和CMS),这些方法有哪些专业人员和控制台?

你如何去设计这样的应用程序?


编辑:正如在响应中提到的,很难处理后退按钮,刷新按钮,书签/复制url。后者可以使用location.hash解决,其余两个问题的任何线索?

回答

5

我把这些单页的应用程序“长住”的应用程序。

对于“简单应用”为你把它是可怕的。这项工作的开箱即用的浏览器突然需要特别照顾和关注的事情:

  • 后退按钮
  • 刷新按钮
  • 书签/复制网址

注意我不是说你不能用单页面应用程序做这些事情,我说你需要努力将它们构建到应用程序代码中。如果您只是在不同的网站上拥有不同的资源,这些工作无需额外的开发人员。

现在,对于复杂的应用程序,如Gmail,谷歌地图,好处有:

  • 用户感知的应用程序的响应能力可以提高
  • 的应用程序的可用性会上浮(如滚动条唐“在HTTP请求 - >应答

一个过程中什么样的用户认为,当点击了一个小小的动作)

  • 没有白色屏幕闪烁T跳到顶部的新页对长寿命应用的担忧是内存泄漏。为每个用户操作请求新页面的传统网站还有一个额外的好处,即浏览器会丢弃DOM和任何未使用的对象,以使内存可以被回收。较新的浏览器对此有不同的机制,但以IE为例。 IE需要特别注意在长期应用程序的生命周期中定期清理内存。这些日子,图书馆变得更容易一些,但决不是一件小事。

    与很多东西,混合方法是很大的。它允许您利用JavaScript来延迟加载特定内容,同时通过页面/网址分隔部分应用程序。

  • 3

    一个专业人士可以获得JavaScript的完整表现力,而不是非JavaScript网站,浏览器可能会在网页和类似的小麻烦之间闪烁。您可能会注意到较低的带宽使用以及只处理需要刷新的直接重要部分而不是从服务器获取完整网页的结果。

    这背后的主要障碍是无障碍问题。没有JavaScript的用户(或那些选择禁用它的用户)不能使用你的网站,除非你做了一些认真的服务器端编码来确定要做出什么反应,具体取决于请求是否使用AJAX进行。根据您使用的(服务器端)Web框架,这可能很简单,也可能非常繁琐。

    这是不是一般认为有一个好主意,有一个完全依赖于JavaScript的用户的网站。

    +0

    是否有JavaScript禁用主要关注?绝大多数用户不会启用它吗?这些天最受欢迎的网站需要JavaScript(Gmail,但也包括Facebook,Youtube)。我相信这些日子使用的功能较差的浏览器会是IE 6. –

    +0

    Google Mail不需要JavaScript AFAIK。如果您尝试使用Lynx等浏览器访问GMail,或使用Firefox的NoScript插件访问GMail,它将优雅地降级为仅HTML体验。 –

    0

    我正在创建这些类型的网页作为iPhone的webapps。我的方法是将所有内容都放在一个巨大的index.html文件中,并隐藏或显示某些内容。这显示和隐藏,即页面的导航,我控制在一个特殊的JavaScript文件,其中处理页面中的部分显示所需的功能。

    Pro:一切都在开始时加载,您不需要再向服务器请求任何内容,例如, “切换”内容和执行操作非常快。如果你有很多内容需要立即显示,那么所有内容都需要加载......。

    另一个问题是,如果连接断开,用户在真正需要服务器端之前不会注意到。您也可以在Gmail中注意到这一点。 (虽然它有时可能是一件积极的事情)。

    希望它有帮助!迎接

    +0

    为什么要硬编码第一页上的所有内容?!?你不能懒惰通过Ajax加载你的内容吗?这会减少您的初始加载时间,并且在实际需要时可以加载小块内容。 – moxn

    +0

    在我的情况下,在开始时全部加载是件好事,但是,你完全正确,加载ajax是自然而然的事情。 – cssmaniac

    0

    通常,你会采取像GWT,Echo2或类似的框架。

    这种方法的优点是,应用程序感觉更像是一个桌面应用程序。当服务器足够快时,用户不会注意到来回传输的很多小数据包。另外,从头开始加载页面是一项昂贵的操作。如果您只是修改其中的一部分,浏览器可以在内存中保留很多现有模型,只需更改已更改的部分即可。

    这些框架的另一个优点是您可以在纯Java中开发您的应用程序。这意味着你可以调试它在IDE中,就像任何其他Java应用程序,你可以编写单元测试,并自动运行它们,等

    3

    一个主要CON,并已经采取AJAX或许有点过于网站的主要投诉很远,你是否丧失了对网站内容“深入”的页面进行书签的能力。当用户为该页面添加书签时,他们将始终获得该站点的“前”页面,而不管他们在制作书签时看到的是什么内容。

    +3

    最近已经通过使用URL的'hash'部分来允许为JavaScript应用中的页面添加书签。 Gmail就是一个很好的例子。尽管使用JavaScript生成每个电子邮件都可以添加书签。 ASP.NET(以及其他framworks,我敢肯定)已经将此功能构建到了AJAX应用程序的框架中。 –

    +0

    URL的哈希部分?这与查询字符串是一样的吗?不会更改父页面的URL强制重新加载该页面?我很好奇 - 有一个例子的链接? – Matt

    +0

    使用jQuery的人可以利用历史记录插件的功能来实现:http://www.mikage.to/jquery/jquery_history.html – James

    1

    主要的原因,以避免它是采取单独这是非常搜索不友好。对于像GMail这样的webapps来说,这并不需要公开搜索,但对于您的博客和CMS驱动的网站来说,这将是一场灾难。

    你当然可以创建简单的HTML版本,然后渐进式增强它,但一次可以在两个版本中很好地工作可能是一堆工作。

    0

    我要补充的是在较慢的机器,一个con是,大量的JavaScript会带来浏览器来个急刹车。由于所有的渲染都是在客户端完成的,如果用户没有更高端的计算机,它将破坏体验。我的工作电脑是P4 3.0GHZ,内存为2GB,而JavaScript重度网站导致它比糖蜜慢,这真的会让我失去用户体验。

    2

    也许你应该检查SproutCore(苹果用它的MobileMe)或Cappuccino,这些都是JavaScript框架,使正是这样,设计类似于桌面的接口,只有通过JSON或XML从服务器获取响应。

    将两者用于博客并不是一个好主意,但设计良好的类似桌面的博客管理区域可能是一种喜悦的使用方式。

    +0

    正是我想到的,谢谢你的框架! –

    相关问题