我想设计一个Web应用程序,其唯一的接口是json,即所有的http请求只接收以json格式的响应,并且不在服务器端呈现任何html.所有表单帖子都将表单数据转换为json对象,然后将其作为字符串发布.所有渲染都是由客户端javascript完成的.
我知道这种方法的一个缺点是没有javascript的浏览器不能对这种架构做很多事情,但是网站上的交互很丰富,无论如何对非JavaScript浏览器都没用.
这种设计Web应用程序的方法还有其他缺点吗?
在研究了几个GAE应用程序(其中一些用于生产)之后,我得出的结论是,在这个平台上,备份生产数据的速度足够慢,而且价格昂贵,足以让我们转换到其他基于云的技术堆栈.
在我们的一个生产应用程序中,我们有大约一百万个实体,每个实体的平均大小为1KB.所以数据的总大小约为GB,这应该不是什么大问题,对吧?以下是使用默认选项从应用引擎获取实体后的bulkloader工具的输出:
[INFO] 948212实体(608342497字节)在47722.7秒内传输
那差不多是13个小时.因此,如果我们想为我们的生产数据建立一个每小时备份系统,那么使用当前的GAE工具集将无法实现.
成本是另一回事.我尝试使用数据存储管理员将实体复制到我认为可用于备份的其他应用程序.我首先将预算设置为每天2美元,快速耗尽大约5000个实体,然后我将预算增加到每天10美元,再次耗尽,而不是接近复制百万个实体.
我显然不打算每次需要支持100美元我需要支持1 GB数据时我也不想等待数小时(甚至数天)才能备份我的数据.所以要么我不知道某些东西,要么Google App Engine目前只是一种不切实际的方式来编写可以轻松备份和恢复的有意义大小的可扩展的生产质量应用程序.
从GAE应用程序备份数据是否有快速且经济高效的方法?
假设我们有5个实体:A,B,C,D,E,具有以下祖先层次结构:
A
/ \
B C
/ \
D E
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
这个coffeescript:
if typeof(groups) is undefined or groups.length == 0
Run Code Online (Sandbox Code Playgroud)
被编译成以下javascript:
if (typeof groups === void 0 || groups.length === 0)
Run Code Online (Sandbox Code Playgroud)
基本上我想检查groups数组是否为空或空,并希望如果第一个条件为真,则不会检查第二个条件(短路).但是,Chrome会引发以下错误:
未捕获类型错误:无法读取未定义的属性长度
关于它为什么不会发生短路的任何见解?