小编fwi*_*tra的帖子

如何使用RequireJS实现延迟加载?

我们正在使用Backbone,RequireJS和Handlebars构建一个非繁琐的Web应用程序,好吧,我只是很好奇.目前,我们的每个型号排序如下:

define(['Backbone', 'js/thing/a', 'js/thing/b', 'js/lib/bob'], function(a, b, bob) {
  return Backbone.Router.extend({
    // stuff here
  });
});
Run Code Online (Sandbox Code Playgroud)

其中thing/a,thing/b都有自己的依赖关系,例如Handlebars模板等.现在发生的是在我的main.js中,所有"顶级"路由器都被加载并初始化; 每个顶级路由器都有一组依赖项(模型,视图等),每个依赖项都有自己的依赖项(模板,帮助程序,工具等).基本上,一个大树结构.

这种情况下的问题是整个树在页面加载时被解析并加载.我不介意每个人,因为我们最终将通过优化器运行它并最终得到一个大的单个文件(将RequireJS简化为基本上模块化框架).但是,我很好奇你是否可以按需加载视图和模板等内容.

还有就是"简化CommonJS的包裹解释说:" 在这里,所以我试过了:

define(function(require) {
  Backbone = require('Backbone');
  return Backbone.Router.extend({
    doStuff: function() {
      var MyView = require('js/myView');
      new MyView().render();
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,看看Chrome的网络检查器,似乎RequireJS - 即使没有触发触发doStuff处理程序的路径 - 仍会加载myView依赖项.问题:

  • 这有可能吗?RequireJS中是否有黑色魔法,它们在require()没有实际触发doStuff路线的情况下寻找呼叫?
  • 这是理论上正确的"按需"方式,需要延迟加载RequireJS模块和资源吗?
  • 如果使用这种表示法,r.js优化器是否仍然像宣传的那样工作?

javascript requirejs backbone.js js-amd

61
推荐指数
1
解决办法
2万
查看次数

基于Actor的webservice - 如何正确地完成它?

在过去的几个月里,我和我的同事已经成功构建了一个服务器端系统,用于向iPhone设备发送推送通知.基本上,用户通过RESTful webservice(Spray-Server,最近更新为使用Spray-can作为HTTP层)注册这些通知,并且逻辑使用Akka的调度程序调度一个或多个消息以便将来调度.

这个系统,正如我们构建的那样,简单地工作:它可以每秒处理数百甚至数千个HTTP请求,并且可以以每秒23,000的速率发送通知 - 如果我们减少日志输出,可能会更多,添加多个通知发送方actor(以及与Apple的更多连接),并且可能在我们使用的Java库(java-apns)中进行一些优化.

这个问题是关于如何做对的(tm).我的同事,更了解Scala和基于演员的系统,注意到应用程序不是一个"纯粹的"基于演员的系统 - 他是对的.我现在想知道的是如何正确地做到这一点.

目前,我们有一个Spray HttpServiceactor,而不是子类,用一组指令来初始化,这些指令概述了我们的HTTP服务逻辑.目前,非常简化,我们有这样的指令:

post {
  content(as[SomeBusinessObject]) { businessObject => request =>
    // store the business object in a MongoDB back-end and wait for the ID to be
    // returned; we want to send this back to the user.
    val businessObjectId = persister !! new PersistSchedule(businessObject)
    request.complete("/businessObject/%s".format(businessObjectId))
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我做对了,那么来自演员的'等待回应'就是基于演员的编程中的禁忌(加上!!已被弃用).我认为"正确"的方法是将request对象传递persister给消息中的actor,并在request.complete从后端收到生成的ID后立即调用它.

我已经在我的应用程序中重写了其中一条路线来做这件事; 在发送给actor的消息中,还发送请求对象/引用.这看起来像是应该的:

  content(as[SomeBusinessObject]) { businessObject => request =>
    persister ! new …
Run Code Online (Sandbox Code Playgroud)

scala actor akka spray

22
推荐指数
1
解决办法
4149
查看次数

如何在为变量分配值的同时引用变量,同时保留不变性?

我在周日下午摆弄着,正试图创造一种"房间"结构.基本上,一个Room对象有许多出口,每个出口都指向其他Room的出口.现在,我要创建的第一件事是两个Room相互连接,最好是在一个赋值语句中.像这样:

case class Room(title: String, exits: Map[Direction.Direction, Room])

val firstRoom = Room("A room", Map(North -> Room("Another room", Map(South -> firstRoom))))
Run Code Online (Sandbox Code Playgroud)

Ergo:第一个房间有一个出口North到第二个房间,第二个房间有一个出口South回到第一个房间.

但是,正如您可以想象的那样,这是错误的:firstRoom在创建val时未定义val,因此在分配期间尝试引用它将不起作用.

对于大多数(如果不是全部)编程语言,我很确定这是正确的.我的问题:如何在使我的Room对象变为可变的情况下解决这个问题?我可以简单地创建一些Room对象并在之后添加出口,但这使得Rooms 变得可变,并且作为个人练习我试图避免这种情况.

scala immutability

21
推荐指数
1
解决办法
462
查看次数

如果内容未保存,则阻止导航到另一个视图

我们有一个backbone.js应用程序,它向用户显示许多表单.我们想要的是非常简单:如果用户转到另一个页面而不保存填写的表单,我们想要显示一个确认对话框.

在经典形式中,这很容易,只需在jQuerysh中实现window.onbeforeunload(或$(window).on('beforeunload')).但骨干应用程序通常只有一个视图.我尝试使用onHashChange,但在该回调中返回false并不会阻止Backbone仍然转到另一个视图.

指针表示赞赏.搜索互联网并没有找到任何有效的回复.

javascript backbone.js

12
推荐指数
3
解决办法
6060
查看次数

桥接头中导入的文件数量是否会影响编译时间?

我有一个理论,但我不知道如何测试它.我们有一个相当大的iOS项目,包括大约200个Swift文件和240个obj-C文件(以及相同数量的头文件).我们仍然使用Swift 1.2,这意味着整个项目都会经常重建.

我注意到每个.swift文件大约需要4-6秒才能编译; 在其他项目中,这最多为2.

现在,我注意到在构建输出中,头文件中生成的警告会针对每个.swift文件重复出现,这让我相信swift编译器会重新解析桥接头中包含的所有头文件.由于我们在桥接头中有~160个import语句,因此这种情况相加.

所以,基本问题:

  • 我们的桥接头的大小会影响构建时间吗?
  • 有没有办法优化它,所以它只解析标题一次?
  • Swift 2有同样的问题吗?
  • 还有其他任何优化技巧吗?除了重写Swift中的所有内容之外,这对我们来说是一个劳动密集型的项目.

ios swift

12
推荐指数
1
解决办法
794
查看次数

如何处理对Scala集合的并发访问?

我有一个演员 - 从本质上讲 - 维护一个对象列表.它有三个基本操作,一个是添加,更新和删除(有时删除是从add方法调用的,但除此之外),并且可以使用单个集合.显然,后备列表是同时访问的,添加和删除调用不断交错.

我的第一个版本使用了ListBuffer,但我在某个地方阅读它并不意味着并发访问.我没有获得并发访问异常,但我确实注意到从中查找和删除对象并不总是有效,可能是由于并发.

我正在重写它以使用var List,但是从Scala的默认不可变List中删除项目有点痛苦 - 我怀疑它适合并发访问.

所以,基本问题:我应该在并发访问情况下使用哪种集合类型,以及如何使用它?

(也许是次要的:一个Actor实际上是一个多线程实体,还是只是我的错误概念,它是否在一个线程中一次处理一个消息?)

(第三级:在Scala中,哪种集合类型最适合插入和随机访问(删除/更新)?)

编辑:对那些响应者:原谅我迟到的回复,我正在制作一个讨厌的习惯,因为在SO或邮件列表上倾倒问题,然后转到下一个问题,暂时忘记原始问题.

collections concurrency scala

11
推荐指数
1
解决办法
1万
查看次数

"调用目标不包含任何签名"用于调用super()而不包含打字文件

我正在努力使Polymer 2.0与Typescript一起工作,并且在制作构造函数时会遇到问题,其中库(包括Polymer 2)不会暴露正确的打字文件.在最简单的情况下:

class MyView1 extends Polymer.Element {
    public static is = 'my-view1';

    constructor() {
        super(); // [ts] Call target does not contain any signature
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使它在没有构造函数的情况下完全编译,我declare var Polymer: any;在一个主.d.ts文件中完成了一个.

现在,我有两个问题:

  1. 如何(如果有的话)我可以使用打字稿忽略这一点,并假设它可以调用一个超级构造函数?
  2. 如何(如果有的话)我声明一个包含超类签名的打字文件?我还没有找到正确的文档(以及我到目前为止遇到的各种用例).

typescript

7
推荐指数
1
解决办法
3073
查看次数

避免使用JSTL c:set语句中的空格

我有一个生成LI列表的JSP文件,其中列表中的第一个和最后一个项目分配给它们的特殊类.我目前使用以下位:

<c:set var="liclass">
    <c:if test="${rowStatus.first}">first</c:if>
    <c:if test="${rowStatus.last}"> last</c:if>
</c:set>

<%-- not very pretty --%>
<li<c:if test="${not empty liclass}"> class="${liclass}"</c:if>>
Run Code Online (Sandbox Code Playgroud)

在这种情况下的问题是,在只有一个结果的情况下,该类应该变为"第一个最后"(它起作用),但它变成了first [...] last,其中[...]代表了一堆SO过滤掉的空白.

似乎<c:set>也需要使用由缩进引起的空白.我可以通过键入它而不用空格来解决它:

<c:set var="liclass"><c:if test="${rowStatus.first}">first</c:if><c:if test="${rowStatus.last}"> last</c:if></c:set>
Run Code Online (Sandbox Code Playgroud)

但我更喜欢可读的变体.另一种方法是通过一个删除多余空格的函数来拉取结果.

问题:是否有一种方法或技术可以避免在<c:set>-tag中设置这样的空格?

whitespace conditional jsp jstl el

4
推荐指数
1
解决办法
6288
查看次数

从Actor向调用者发回None

我有一个简单的Actor使用ScalaQuery查询数据库,我已经嘲笑过对使用它的客户端的测试.

我想要的是(模拟)Actor Some(MyObject)如果ID匹配则回复,None否则.但是,我无法弄清楚如何使这项工作.这是我到目前为止的代码:

def receive = {
  case FetchSomething(someId) => {
    if (someId == 1234) self.channel ! someObject
    else self.channel ! None
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,它不会返回None客户端代码,而是返回Some(None)- 这当然会让我的客户端感到困惑.我希望客户端如何工作是这样的:

val object = persister !! FetchSomething(1337) match {
    case myObject: Some[MyObject] => myObject
    case _ => None
}
Run Code Online (Sandbox Code Playgroud)

(当然,以上可能只是错误 - 而不是Some,它可能是Option)

我怎样才能做到这一点?也许更具体一点,我如何None通过self.channel 发送回来,所以当匹配它时,它是None不是Some(None)

scala option actor akka

2
推荐指数
1
解决办法
210
查看次数