以前曾提出过密切相关的问题:
但是这些问题的答案仍然让我在某些方面不清楚.
第一个问题的提问者询问多线程是否有助于提高性能,而回答者大多说它不会,因为GUI不太可能成为现代硬件上2D应用程序的瓶颈.但在我看来,这是一个偷偷摸摸的辩论策略.当然,如果您仔细构建了应用程序,除了UI线程上的UI调用之外什么都不做,那么您将不会遇到瓶颈.但这可能需要大量工作并使您的代码更复杂,如果您有更快的内核或可以从多个线程进行UI调用,那么可能不值得这样做.
一个普遍提倡的架构设计是让视图组件没有回调,除了他们的后代之外不需要锁定任何东西.在这样的架构下,你不能让任何线程使用每个对象的锁来调用视图对象上的方法,而不用担心死锁吗?
我对UI控件的情况不太自信,但只要它们的回调仅由系统调用,为什么它们会导致任何特殊的死锁问题?毕竟,如果回调需要做任何耗费时间,他们将委托给另一个线程,然后我们回到多线程的情况.
如果您可以阻止UI线程,您将获得多线程UI的多少好处?因为异步的各种新兴抽象实际上允许你这样做.
我所看到的几乎所有讨论都假定使用手动锁定来处理并发性,但人们普遍认为手动锁定是在大多数情况下管理并发性的一种不好的方法.当我们考虑专家建议我们使用更多的并发原语(如软件事务内存)或避免共享内存支持消息传递(可能具有同步,如go)时,讨论如何改变?
(注意:我的问题没有写清楚,而且我正在考虑一些错误.当前版本的问题只是尝试编写一些可以使被接受的答案对尽可能多的人有用的东西.)
我想要一个动作,将一个项目添加到商店并使用外部依赖项注册它.
我可以使用thunk中间件并编写
export function addItem(item) {
return dispatch => {
dispatch(_addItemWithoutRegisteringIt(item));
externalDependency.register(item);
};
}
Run Code Online (Sandbox Code Playgroud)
但是在注册项目之前会通知订阅者,他们可能依赖于注册.
我可以改变订单并写
export function addItem(item) {
return dispatch => {
externalDependency.register(item);
dispatch(_addItemWithoutRegisteringIt(item));
};
}
Run Code Online (Sandbox Code Playgroud)
但是我通过一个唯一的id来跟踪外部依赖项中的项目,它只能在reducer中分配.
我可以在减速器中注册该项目,但我明白在减速器中进行副作用是非常糟糕的形式,并可能导致问题.
那么最好的方法是什么?
(我的结论是:有许多方法可行,但对我的用例来说最好的方法是将句柄存储到Redux中的外部依赖项中,而不是外部依赖项中的Redux句柄.)
我注意到,在使用路由解决方案,如创建时的温泉,尤其是ngRoute和ui-router对angularjs或react-router进行反应,实现POST导致一个URL,当您使用Post重定向消息获取模式(pushState的)变化是简单.也就是说,它更简单
(A)设置路由器始终推迟状态转换,直到完成GET
比它更好
(B)还要让POST负责从GET中检索我们想要的相同信息,然后让路由器跳过GET,如果有那些信息的话.
请注意,更复杂的模式(B)只使用一个POST,而更简单的模式(A)使用POST和GET.(A)实例化Post-Redirect-Get模式; (B)没有.
使用传统的多页面网站,PRG模式用于防止意外重新提交表单数据.但在SPA中,重新提交不是问题.
但是,(A)比(B)更容易实现.这个理由足以让它更喜欢吗?在SPA中使用PRG还有其他原因吗?
在SPA中发布数据时,最佳做法是什么?
我们训练了模型的许多变体,这些变体具有不同的配置,并且需要不同的输入预处理(其中预处理是在 TensorFlow 之外完成的)。我想将我们的模型导出为 SavedModels,并且我认为我们将拥有一个 API 服务器,它将提供对模型的访问并处理预处理并使用配置与 TensorFlow 服务器进行通信,该配置将通过 TensorFlow 从模型元数据中检索服务器。模型元数据可能采用 JSON 结构,或者可能使用协议缓冲区。我不清楚这方面的最佳实践是什么。特别是,MetaInfoDef 协议缓冲区具有三个不同的字段,这些字段似乎旨在保存元数据(meta_graph_version、any_info和tags)。但除了现场之外,我找不到任何使用任何例子的例子tags。
// User specified Version string. Can be the name of the model and revision,
// steps this model has been trained to, etc.
string meta_graph_version = 1;
[...]
// A serialized protobuf. Can be the time this meta graph is created, or
// modified, or name of the model.
google.protobuf.Any any_info = 3;
// User supplied tag(s) on the …Run Code Online (Sandbox Code Playgroud) 我从不喜欢post-redirect-get模式,因为它需要在客户端和服务器之间进行额外的往返,它通常需要使用有状态和(在我看来)hacky flash 模式,而且,尽管主要原因之一是used 是为了防止重复提交表单,它实际上并没有很好地完成这项工作,因为在重定向完成之前,窗口中仍然可能出现重复提交。(这可以通过在客户端采取预防措施来防止,但这些预防措施使得 post-redirect-get 变得不必要,除非浏览器关闭 JavaScript 的情况极为罕见。)
然而,使用该模式的一个令人信服的理由是,人们通常希望客户端看到的 URL 与发布后的 URL 不同。我最近尝试删除 post/redirect/get 模式并仅history.replaceState用于在客户端上设置所需的 URL。我知道这不适用于 IE9 及更低版本,但我对此表示同意。但是,我忽略了这种方法是否存在其他一些重大问题?
javascript ×3
angularjs ×1
concurrency ×1
erlang ×1
locking ×1
reactjs ×1
redirect ×1
redux ×1
swing ×1
tensorflow ×1