在开发过程中,这些错误最终会出现在控制台中,其中很多都不会影响我的应用程序。但是一旦我投入生产,任何轻微的错误都会导致“这个应用程序崩溃了!”消息,唯一的选择是重新加载。为什么SproutCore会丢掉我的应用程序?
答案 0 :(得分:2)
Web开发人员习惯于能够忽略小错误。这是合适的:由于短期网站通常只有最小的本地状态需要维护,因此许多小错误不会影响用户体验,因此修复它们所需的开发时间可能不值得。
另一方面,应用程序开发人员习惯于必须小心处理错误。例如,在桌面.NET或Cocoa中,操作系统将主动崩溃引发未处理错误的应用程序。这是因为应用程序通常认为它们是长期存在的,并且必须管理内部一致的状态。错误表明这种内部状态可能变得无法管理。不稳定,并且为了防止意外(或更糟)的行为,必须终止该应用程序。SproutCore是用于浏览器的全功能应用程序开发框架的集合,SproutCore Web应用程序与短期的,基本上无状态的Web页面有许多不同之处。最重要的是,对于这个讨论,它们在长寿命和强大的内部状态方面非常适用。与桌面应用程序一样,未处理的错误表明您的SproutCore应用程序的内部状态可能变得不受管理且不可预测。由于SproutCore无法确定特定错误是否良性或有问题,因此它会关闭整个过程 - 就像其他应用程序系统一样。
SproutCore不会在开发模式下积极地崩溃应用程序,以便让您有机会检查错误的原因和后果以确定如何处理它。因此,要构建健壮,稳定的Web应用程序,只需关注控制台,并防止或处理弹出的任何错误。
答案 1 :(得分:2)
戴夫的回答很完美,但我只想补充一点技术细节:
在生产版本中,Sproutcore会将一个处理程序附加到浏览器的javascript onerror事件中。通过这种方式,用户可以获得存在问题的视觉反馈,而不是让应用突然停止响应任何输入。
但是,在某些浏览器中,onerror处理程序可以阻止开发人员查看原始问题的完整堆栈跟踪。因此,在开发模式(使用sc-server或类似服务器)中,不使用处理程序,Sproutcore根本不解决异常。然后浏览器会执行类似记录到控制台的操作,您可以在其中查看原因。我还建议将开发人员控制台设置为“中断未捕获的异常”,以便它可以检查发生错误的上下文。