开发更大的JavaScript应用程序的最佳实践

mib*_*lma 61 javascript ide interface-design unit-testing system-design

拥有Java/C++的强大背景我想知道是否有可能开发一个更大的JavaScript应用程序而不必削减质量.

任何提示都受到赞赏:

  • 发展环境
  • 调试技术
  • 单元测试
  • 剖析
  • 仪表
  • 系统设计
  • 界面设计
  • 代码设计

我也很好奇JavaScript PC模拟器JavaScript游戏引擎等项目是如何处理这些问题的,以防有些人知道.

Arx*_*sos 40

开发环境 嗯,您需要一个Web服务器(取决于服务器端架构),如Apache或IIS来模拟AJAX通信.有时,javascript的编辑器包含在服务器端开发语言的编辑器中.

有一个关于javascript IDE的有趣问题:https: //stackoverflow.com/questions/209126/good-javascript-ide-with-jquery-support


调试技术和分析 使用内置的浏览器调试和分析工具,如Firebug.

您还可以查看分析工具.


单元测试 如果使用jQuery,我建议使用http://docs.jquery.com/Qunit.在javascrit应用程序的开发版本中,加载了javascript测试文件.发布应用程序时,不会加载测试文件.


安全

  • 验证并计算服务器端的所有内容
  • 防止XXS


设计

应用 - - - - - - - - - - - - - - - -

  • 应用组件
  • 自定义小部件

框架----------------------------------

  • 基本小部件
  • 基础AJAX通信
  • UI核心(帮助方法...)

该框架提供了基本功能.例如,基础框架是jQueryknockoutjs.在此框架之上构建了应用程序.当然,您可以为您的应用程序创建自己的框架.但是在选择jQuery时,你通常不需要处理跨浏览器的错误,因为jQuery会为你做这件事.


与服务器通信: 提供RESTful服务进行通信是个好主意.您还必须在JSON和XML之间进行选择.JSON比XML更轻量级,因此通常选择JSON.


设计模式:如果javascript应用程序非常大,那么实现MVC或MVVM等设计模式是个好主意.

javascript之外还有一些MVC/MVVM框架(例如knockoutjs).

这是一篇关于javascript设计模式的非常有用的文章:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/


但最后你必须自己决定你的应用程序应该如何构建等.设计模式可以向你展示一个好方法 - 但每个应用程序都是不同的,并不是每个解决方案都适用于所有问题.

不要忘记使用javascript时性能是一个大问题.因此,压缩和组合javascript文件是一个好主意:http://code.google.com/intl/de/speed/articles/.此时,Lazy Loading也可能有所帮助.


Joh*_*rug 14

我参与了用SproutCoreCappuccino编写大型JavaScript应用程序,而没有任何"Macroframework".这就是我的想法:

首先,您在使用Java时获得的所有"良好设计"原则仍然适用:不要编写Spaghetti代码,封装,单独关注并使用MVC.

很多人开始写"网络2.0"或"网络3.0"(这意味着什么)的应用程序,只需添加的jQuery它和下井痛苦和苦难的道路,因为他们的代码变得越来越大,完全不可维护.

像Cappuccino或SproutCore这样的"大"框架可以帮助您避免这样做.卡布奇诺非常适合桌面风格的应用程序,而SproutCore已将重点转移到2.0"新风格"等"网络风格"应用程序,同时仍然为您提供了构建应用程序和代码的绝佳方法.

现在针对您的具体领域或兴趣:

发展环境

我个人使用MacVim.我听说过有关Cloud9IDE的消息,这是一个用于JS开发的浏览器内部IDE.对于Cappuccino,您可以使用Apple的Xcode IDE,甚至可以设计UI(这非常酷).

Cappuccino和SproutCore应用程序都可以在浏览器中进行测试,而无需Web服务器.如果您确实需要与Web服务器(您可能会)进行通信,则通常使用Ruby on Railsnode.js来轻松启动并运行后端.

调试技术

在JavaScript开发方面,调试仍然是一个痛处.在谷歌Chrome开发者工具是目前有最好的了.您可以在浏览器中设置断点和各种简洁的东西.这是你想要使用的工具.

单元测试

SproutCore使用QUnit,Cappuccino附带OJUnit/OJSpec.然后有像JSDOMenv.js这样的项目,它们可以让您模拟服务器上的浏览器,并为您提供一个无需浏览器即可运行自动化测试的环境.

此外,SeleniumJasmine等项目值得一试.

剖析/仪器仪表

您可以使用Chrome开发工具进行性能分析. YSlow非常适合一般的Web应用程序分析(包括资产加载等).

系统设计

从一开始就使用MVC.很多人从一个小应用程序开始,并在这里添加一些JavaScript来读取字段中的值,并在那里添加一些JavaScript来更新标签.他们再次这样做.然后再次.晚餐供应:意大利面条代码.使用像SproutCorebackbone.js这样的框架来防止这种情况并构建代码.

这是SproutCore的一个很好的教程,这是一个backbone.js.

Cappuccino也是如此,这是我一年前写的一个教程.这有点过时,但给你一般的想法.这是我为5月份为MacTech杂志撰写的文章所做的最新演示应用程序.

因此,就像在任何其他开发环境中一样构建代码.也许也可以阅读本书本书.这些视频也是一个很好的资源.

界面设计

对于Cappuccino,您可以使用Apple的Xcode Interface Builder以图形方式布置您的UI.对于大多数其他系统,您将使用标准HTML和CSS设计UI.

如果您想开发移动设备,则必须阅读本文.

代码设计

请参阅我上面提到的书籍和视频.并参考这种通用编码风格.当然人们对该页面上所列风格的某些方面存在分歧,但这是一个很好的起点.

JavaScript是一个令人兴奋的开发环境,它拥有一个非常有活力的社区!你应该加入乐趣!我希望我的意见对你有所帮助.

  • 杰夫,谢谢!我认为Firebug是一个很棒的工具.它有时会为您提供比Chrome更详细的信息,特别是在出现问题时.您觉得哪些领域优越? (4认同)

Tha*_*Tyl 10

关于工具:

  • JSLint是Douglas Crockford在http://www.jslint.com/开发的在线工具.它告诉你为什么,即使可能性不大,你的代码也可能会中断.
  • JSMin是一个用C语言编写的单文件javascript minifier.编译它,把它放在你的$ PATH中,然后用它来为你的应用程序创建构建脚本.加载缩小的javascript被认为更快.在http://www.crockford.com/javascript/jsmin.html上获取.
  • 拥有JS Read-Eval-Print循环总是很方便.下载最多的是node.js,一个基于V8的REPL,Chrome javascript引擎.它允许您以交互方式测试javascript片段.它还通过一个机智的事件循环系统充当最强大的Web服务器之一.我们鼓励您这样使用它!
  • JS提示很好,但您确实需要一个出色的Web Inspector.它提供了丰富的调试和更好地理解您的代码.在该领域,谷歌Chrome和Firebug都被认为是一流的.不同的是,谷歌Chrome是内置的.右键单击>检查,您就完成了.
    但是那里最好的功能只能在这个色彩缤纷的备忘单中找到.
  • JSFiddle也是一个尝试片段的在线工具.
  • @mathias非常自豪能够维护jsPerf,这是一个测试JS片段的项目集合,可以告诉跨浏览器,哪种算法最快.
  • YSlow是另一个非常准确的工具,可以通过诙谐的建议告诉您网站是否快速,以及如何改进它.

IDE而言,没有任何单一的开发环境被证明更有效.该领域最优秀的人只使用他们最喜欢的文本编辑器(例如@phoboslab,ImpactJS背后的人,使用KomodoEdit.保罗爱尔兰使用TextMate,这很好,但仅限Mac.很多人使用Vim.我认为,JSLinux背后的人Fabrice Bellard使用他自己的Emacs版本.这一点并不重要.

单元测试很重要,但这绝不是问题.JavaScript是足够强大,你可以建立自己的几行比什么都在那里的一个更适合的单元测试软件.重要的是,感谢node.js(我上面推荐的JS提示),你可以通过将它们放在一个*.js脚本文件中来自动执行这些测试,并使用单行启动所有测试:$ node test.js.

什么真正计数有效是有MDN JavaScript的文档你的枕头下,和HTML规范一直开着.请注意,我指出的版本并不广为人知,但它是迄今为止最好的版本!它甚至采用了缓存清单,让您可以重新阅读您已经下载的网页,在离线状态!更不用说一个出色的搜索功能!

现在,既然我真的想要那个赏金,我会给你一个漂亮的页面,列出你构建一个Web应用程序所需的所有文档.它真的是一颗宝石.它包含指向您所需的所有信息的链接.这是所有圣经的索引.

最后,真正针对你想知道的问题是,你能用javascript做一个巨大的应用程序吗?
答案是肯定的.Javascript确实有Crockford所说的"坏部分",但是使用JSLint警告你不要使用它们.另一方面,Javascript有强大的武器:

  • 闭包:您可以在另一个函数内定义一个函数,即使在外部函数运行完成后,它也可以访问外部变量.
  • 一流的功能:你可以创建函数数组,将函数作为参数传递给其他函数,从另一个函数返回一个函数,这一切都是免费的!
  • 对象文字,数组文字:这是JSON的基础.这是非常容易使用.现在所有的javascript引擎都有JSON.parse(aString)一个JSON.stringify(anObject)内置对象.
  • 原型设计:对象可以继承您之前定义的任何变量.

这使得工作高效且容易.您可以在Javascript中使用一些特定的模式.我会让保罗爱尔兰人启发你.

最后一条建议,在浏览器中使用javascript:永远不要使用<script>/* some javascript here */</script>.一直用<script src="javascript-file.js"></script>.

还有几个链接.


Kei*_*ith 7

您可以查看Google的Closure库和编译器.他们也写了一些非常大的Javascript应用程序.


Mik*_*uel 6

您应该研究JavaScript的替代方案,它们仍允许您在类似JavaScript的环境中进行部署.

很多编写大型应用程序的工具链都使个人和团队能够轻松地让代码协同工作,而不必让每个人都与其他人沟通,这是一个O(n**2)问题.

GWT这样的东西允许你用Java编写,所以如果你有一个能够用Java或其他静态类型的应用程序开发语言协调开发的团队,他们可能会发现向JavaScript转换比使用JavaScript要容易得多.GWT还提供可靠的核心库,模板,in-java-IDE调试,每个浏览器最小化的代码以及许多其他好东西.

GWT还可以与java单元测试工具一起工作,即junit和许多java团队已经将junit集成到连续构建系统和测试仪表板中.