编写单页客户端专用网页

时间:2010-09-20 20:33:54

标签: javascript

我正在考虑尝试一个想法,主要是为了好玩,我的问题是,如果这是合理的,如果有任何库或框架可以使这个实验更容易。

所以,这个想法:基本上是为我开发的网站编写一个新的UI,但仅使用客户端代码。我可以使用ajax读/写数据,因为我现有的网站有一个API,允许我执行各种查询。这允许我在整个过程中使用JavaScript,理论上将所有代码放在一个文件中。

显然,规避是有限制的;书签,页面刷新,后退按钮等。但这些限制使它变得有趣,对吧? :)我不是那么担心搜索引擎索引,因为无论如何都必须登录才能使用该网站。

网站本身并不复杂,但也不简单。有四种不同级别的用户,多种语言和相当多的数据。

这是个坏主意吗?如果是这样,你为什么要反对呢?您是否知道任何可以使这更容易的JavaScript框架或库? (不,我不是在寻找像Google Web Toolkit这样的抽象;我想要一些纯粹的JavaScript)

6 个答案:

答案 0 :(得分:2)

我的一位同事做到了这一点。这个概念的一个很好的特点是,当用户“更改页面”时,你没有大量的POSTS,因为他们实际上在最后一次提交数据之前不会更改页面。他为产品注册软件做了这个,这很好。我们的服务器只在用户最初请求页面时受到影响,然后在他们提交时。

这个概念的主要缺点是,大多数Web开发人员并不期望这样。我的同事(和你)有一个很酷的想法 - 但除非它得到很好的实施,评论,100%有效的HTML,以及许多其他良好的设计原则,它可能会令人困惑,因为大多数Web开发人员基本上从未见过这个之前做过。他的网站是一个与之合作的噩梦,因为他实际上并不知道工程网络软件是什么意思,而且它们都被打成了一片。我的组织从未追求过这个(可能有用)的想法,因为他的实施非常糟糕。

所以,当我看到这个想法时,我想出了一个权衡:

1。)在中间页面中不能要求任何服务器端交互。 2.)初始页面加载较长,但没有中间页面请求(更好的优化)。 3.)这与通常做的任何事情都有很大的不同,这意味着您需要特别注意文档。 4.)这种设计概念有助于在没有网络的情况下轻松部署完全独立的Web软件。 5.)您可能会增加避免页面加载的复杂性,但可能不会。我不确定。

总之,我认为这取决于你想要实现的目标。我的同事真的只是想看看他能否做到,他可以做到。然而,他是如何做到这一点的确非常糟糕,以至于其他所有人都将他糟糕的实施与糟糕的想法联系起来,这是相当悲伤的。

大多数情况下,我认为如果你遵循良好的网页设计实践,这不是一件容易追求的事情。你的目标是什么?

对不起,我无法直接回答你的所有问题。如果我认为这是一个坏主意,我希望我的经验仍然有助于回答。

-Brian J. Stinar -

答案 1 :(得分:2)

SproutCore是真正为单页,可能复杂的应用程序构建的最佳选择之一。与其他像GWTCappucino不同,SproutCore实际上是直接使用JavaScript。但他们不是唯一的。您可能还想查看JavaScriptMVCqooxdoo

就个人而言,我使用JavaScript构建了一个非常庞大且复杂的单页面应用程序。目前大约有100,000行(包括评论/空白)。为了给出规模感,jQuery约为6000。为了达到这个规模,我构建了自己的框架,构建工具等,并且它非常易于维护。你问它是否可行,我可以告诉你确实如此,但是如果你正在寻找做大事的话,你确实需要一些基础设施。 (顺便说一句,有很多延迟加载 - 一次不是100,000行!)

除了Web应用程序之外,我也不会真正推荐这种方法。正如所指出的那样,SEO仍然很难,对某些用户来说可能很奇怪。

答案 2 :(得分:1)

您正在寻找ExtJS

答案 3 :(得分:0)

我在jquery中做了我的网站,由spring mvc 3支持。对我来说它工作得很好,你可以在它上面轻巧,华丽的feling。 如果你有时间认真挖掘javascript ......那真是个好运动。 我唯一需要添加的是SEO,因为蜘蛛只能看到初始的html。如果它对您来说很重要,我认为后端静态文件和站点地图将是足够好的解决方案。

答案 4 :(得分:0)

我发现了一些非常轻巧的东西,它提供了功能上基本的功能,而不会强迫你进入整个框架。它被称为Sammy,受到Ruby的Sinatra的启发:http://code.quirkey.com/sammy/

非常推荐!

答案 5 :(得分:0)

替代方案:Java中的代码相同。看看ItsNat

在JavaScript中思考但在服务器中使用相同的DOM API在Java中使用相同的代码,在服务器中更容易管理您的应用程序,而无需自定义客户端/网桥,因为UI和数据在一起。

关于单页中的SEO,书签等有解决方案,请看Single Page Interface Manifesto