唐宁石棉画法...
昨天我的头衔是Packt Publications,《使用JavaScript进行反应式编程》。它实际上不是以Node.js为中心的标题;前几章旨在介绍理论,而后几章则涵盖实践。因为我真的不认为这将是适当的失败给读者一个Web服务器,Node.js的似乎远远的不二之选。案件在打开之前就已经关闭了。
对于Node.js的使用经验,我本可以给出非常乐观的看法。相反,我对遇到的好点和坏点很诚实。
让我在这里提供一些相关的报价:
警告:Node.js及其生态系统很热,足以严重烧伤您!
当我是数学的助教时,有人告诉我一个不明显的建议,那就是不要告诉学生某些事情“容易”。回想起来,原因有些明显:如果您告诉别人一些简单的事情,那么没有看到解决方案的人可能最终会感到(甚至更多)愚蠢,因为他们不仅不知道如何解决问题,而且还解决问题他们太愚蠢了,不容易理解!
有些陷阱不仅惹恼了来自Python / Django的人们,如果您进行了任何更改,它们会立即重新加载源代码。使用Node.js,默认行为是,如果您进行了更改,则旧版本将一直处于活动状态,直到时间结束或您手动停止并重新启动服务器为止。这种不适当的行为不仅惹恼了Pythonistas;它还会激怒提供各种解决方法的本机Node.js用户。在撰写本文时,StackOverflow问题“在Node.js中自动重新加载文件”已超过200次投票和19个答案;编辑将用户定向到保姆脚本(节点主管),其主页位于 http://tinyurl.com/reactjs-node-supervisor。这个问题使新用户有很大的机会感到愚蠢,因为他们认为自己已经解决了问题,但是旧的越野车行为是完全不变的。而且很容易忘记弹起服务器。我已经做过多次了。我要传达的信息是:“不,您并不傻,因为Node.js的这种行为使您不寒而栗;只是Node.js的设计人员没有理由在此处提供适当的行为。请尝试解决它,也许会从节点主管或其他解决方案中获得一些帮助,但是请不要觉得自己很愚蠢。你不是那个有问题的人。问题出在Node.js的默认行为上。”
经过一番辩论后,本节留在了这里,正是因为我不想给人以“这很容易”的印象。在使事情正常进行的过程中,我反复伸手,我不想克服困难,而是让您相信让Node.js及其生态系统正常运行是一件容易的事,如果这对您也不是一件容易的事,您不知道自己在做什么。如果您没有在使用Node.js时遇到麻烦,那就太好了。如果这样做,我希望您不要走开,感觉到“我很愚蠢–我一定有什么不对劲。” 如果遇到Node.js带来的令人惊讶的惊喜,那么您并不傻。不是你!这是Node.js及其生态系统!
在上一章和结论不断上升之后,我并不想真正看到的附录,它讲述了我在生态系统中能够找到的东西,并为moronic文字主义提供了一种解决方法:
HTML5键值存储的服务器端实现是另一个看起来很合适但仍可以兑换的数据库。这种方法具有API的基本优势,大多数优秀的前端开发人员都足够了解。因此,它也是大多数不太出色的前端开发人员都足够了解的API。但是,使用node-localstorage包时,虽然不提供字典语法访问(您想使用localStorage.setItem(key,value)或localStorage.getItem(key),而不是localStorage [key]),但实现了完整的localStorage语义,包括默认的5MB配额- 为什么?服务器端JavaScript开发人员是否需要免受自身保护?
对于客户端数据库功能,每个网站5MB的配额确实是一个宽敞且有用的喘息空间,可让开发人员使用它。您可以设置一个低得多的配额,并且仍然可以为开发人员在cookie管理方面的改进提供不可估量的改进。5MB的限制并不能很快地将其用于大数据客户端处理,但是有足够的余地,足智多谋的开发人员可以用来做很多事情。但是,另一方面,5MB并不是最近任何时候购买的大多数磁盘的特别大的部分,这意味着,如果您和某个网站对合理使用磁盘空间的观点存在分歧,或者某个站点只是呆板,那么它实际上并不会花费除非您的硬盘已经太满,否则您将没有任何危险。
但是,可能会轻轻指出,当您是服务器的唯一编写代码时,不需要任何额外的保护就可以使数据库的大小超出可容忍的5MB。大多数开发人员既不需要也不想充当保姆的工具,也可以防止工具存储超过5MB的服务器端数据。而5MB的配额是客户端的黄金平衡行为,在Node.js服务器上显得有些愚蠢。(而且,对于本附录中所述的用于多个用户的数据库,可能会有些痛苦地指出,除非每个用户帐户在磁盘上创建一个单独的数据库,否则每个用户帐户不是5MB;在每个用户帐户之间共享5MB所有用户帐户在一起。痛苦如果您病毒式传播!)文档指出配额是可自定义的,但是一周前发给开发人员的电子邮件询问如何更改配额,但StackOverflow问题也是如此。我唯一能找到的答案是在Github CoffeeScript源代码中,该源代码作为构造函数的可选第二整数参数列出。这样就很容易了,您可以指定一个等于磁盘或分区大小的配额。但是,除了移植没有意义的功能外,该工具的作者完全没有遵循非常标准的惯例,即对于整数或整数来指定某些资源使用的最大限制,该变量将0解释为“无限”。最好的办法是将配额指定为Infinity:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
按顺序交换两个评论:
人们不必要地不停地使用JavaScript来作为整体,而JavaScript成为受人尊敬的语言的一部分实际上是道格拉斯·克罗克福德(Douglas Crockford)说的:这是好零件。只是忘记那里还有其他东西。” 也许炙手可热的Node.js生态系统将发展自己的 “ Douglas Crockford”,他会说:“ Node.js生态系统是编码狂野西部的代码,但仍有一些真正的宝石。这是一个路线图。这是几乎不需付出任何代价即可避免的领域。这是在任何语言或环境下都能找到的最丰富的薪水的领域。”
也许其他人可以将这些话当作挑战,并跟随克罗克福德的领导,为Node.js及其生态系统写下“好的部分”和/或“更好的部分”。我会买一份!
考虑到所有项目的热情程度和纯粹的工作时间,可能有必要在一年或两年或三年内,对撰写本文时有关未成熟生态系统的任何言论进行大幅度的调整。在五年内说“ 2015年Node.js生态系统有几个雷区”确实很有意义。2020年的Node.js生态系统具有多个天堂。”