我试图理解一些有些"神奇"行为的根本原因,我看到我无法完全解释,而且从阅读ReactJS源代码中看不出来.
setState在响应onChange输入事件时同步调用方法时,一切都按预期工作.输入的"新"值已经存在,因此DOM实际上没有更新.这是非常需要的,因为它意味着光标不会跳转到输入框的末尾.
但是,当运行具有完全相同结构但setState 异步调用的组件时,输入的"新"值似乎不存在,导致ReactJS实际触摸DOM,这导致光标跳转到结束输入.
显然,value在异步情况下,某些东西正在干预将输入"重置"回其先前的情况,而在同步情况下它并没有这样做.这是什么机制?
同步示例
var synchronouslyUpdatingComponent =
React.createFactory(React.createClass({
getInitialState: function () {
return {value: "Hello"};
},
changeHandler: function (e) {
this.setState({value: e.target.value});
},
render: function () {
var valueToSet = this.state.value;
console.log("Rendering...");
console.log("Setting value:" + valueToSet);
if(this.isMounted()) {
console.log("Current value:" + this.getDOMNode().value);
}
return React.DOM.input({value: valueToSet,
onChange: this.changeHandler});
}
}));
Run Code Online (Sandbox Code Playgroud)
请注意,代码将登录render方法,打印出value实际DOM节点的当前值.
在两个Ls"Hello"之间键入"X"时,我们看到以下控制台输出,并且光标保持在预期的位置:
Rendering...
Setting value:HelXlo
Current value:HelXlo
Run Code Online (Sandbox Code Playgroud)
异步示例
var asynchronouslyUpdatingComponent =
React.createFactory(React.createClass({
getInitialState: function () {
return …Run Code Online (Sandbox Code Playgroud) 采用常用的二进制哈希函数 - 例如,SHA-256.顾名思义,它输出256位值.
设A是所有可能的256位二进制值的集合.A非常大,但有限.
设B是所有可能的二进制值的集合.B是无限的.
设C是在B的每个成员上运行SHA-256获得的值集.显然这在实践中无法完成,但我猜我们仍然可以对它进行数学分析.
我的问题:根据需要,Ç ⊆ 一个.但C = A吗?
编辑:正如一些答案所指出的,这完全取决于有问题的函数.所以,如果您知道任何特定哈希函数的答案,请说出来!
在我的工作中,我们使用Weblogic Server来托管企业门户.哪个好.
但是,我最近有机会使用Tomcat进行一些项目,我对速度上令人难以置信的差异感到震惊.Tomcat启动需要3-5秒,部署中型项目需要10-15秒.Wewblogic 启动需要3-5 分钟,部署最多需要10 分钟.这会杀死任何迭代开发.
我是不是必须让自己放慢速度和臃肿,或者我能做些什么来加快速度?有人有这方面的经验吗?
我正在使用org.jruby.embed.ScriptingContainerAPI 在JVM进程内运行JRuby上的Middleman(使用Webrick)服务器.
如果我干净地关闭并从JVM内部停止服务器,一切都按预期工作.
但是如果我将一个SIGTERM发送到JVM进程(例如,通过在命令行中按ctrl + C),控制台将返回但JVM进程不会终止 - 它会无限期地挂起,直到我发送一个SIGKILL.
我尝试注册JVM关闭挂钩来终止ScriptingContainer实例,但挂钩永远不会触发.我不知道为什么......也许JRuby不知怎的吞下了SIGTERM?
即使它包含正在运行的Webrick服务器,如何让JVM完全关闭,干净利落地关闭?
以下查询旨在按用户接收未读消息的列表.它涉及3个表:recipients包含用户与消息ID的关系,messages包含消息本身,并message_readers包含哪些用户已阅读哪些消息的列表.
查询可靠地需要4.9秒 - 这严重损害了我们的性能,尤其令人担忧,因为我们希望数据库最终会增加几个数量级.当然,这是一个固有的重要查询,但数据集很小,直观地说它似乎应该快得多.服务器有足够的内存(32gb),整个数据库应始终加载到RAM中,并且盒子上没有其他任何东西在运行.
这些表都很小:
recipients: 23581
messages: 9679
message_readers: 2685
Run Code Online (Sandbox Code Playgroud)
查询本身:
SELECT
m.*
FROM
messages m
INNER JOIN recipients r ON r.message_id = m.id
LEFT JOIN message_readers mr ON mr.message_id = m.id
WHERE
r.id = $user_id
AND (mr.read_by_id IS NULL OR mr.read_by_id <> $user_id)
Run Code Online (Sandbox Code Playgroud)
解释计划非常简单:
+----+-------------+-------+--------+-----------------------------------+-----------------------------------+---------+--------------------------------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-----------------------------------+-----------------------------------+---------+--------------------------------+-------+-------------+
| 1 | SIMPLE | …Run Code Online (Sandbox Code Playgroud) 我没有参加任何基础大学微积分的数学课程.然而,在我的编程工作过程中,我从博客和阅读中学到了很多数学和能力科学,我真的相信我有一个不错的数学思维.例如,我喜欢Project Euler并且取得了成功.
我想潜入并真正开始学习一些很酷的数学,特别是离散数学,集理论,图论,数论,组合学,范畴论,lambda演算等.到目前为止,我的印象是我很有能力接受这些在概念层面,但我在数学语言和符号方面遇到了很多困难.我只是不"说语言",虽然我正在努力学习它,但我的进展非常缓慢.甚至一个公式或术语重段也可能需要几个小时才能完成.是的,我可以查找术语和定义,但这是一个非常繁重的过程,它极大地模糊了我正在努力学习的理论简单性.
我真的害怕我不得不回到我离开的地方,获得一本中级数学教科书,并投入一些时间进行练习,以这种思维方式训练自己.这听起来非常无聊,所以我想知道是否有其他人对此有任何想法或经验.
我在Java中编写一个不可变的DOM树,以简化从多个线程的访问.*
但是,它确实需要尽快支持插入和更新.并且由于它是不可变的,如果我对树的第N级节点进行更改,我需要分配至少N个新节点以返回新树.
我的问题是,每次修改树时预先分配节点而不是创建新节点会快得多吗?这将是很容易做的事情 - 保持几百个未使用的节点池,并拉一出池,而不是创建一个每当被要求修改操作.当没有其他事情发生时,我可以补充节点池.(如果不明显,在这个应用程序中执行时间比堆空间要高得多)
这样做是否值得?关于加速它的任何其他提示?
或者,有人知道一个不可变的DOM库吗?我搜索过,但找不到任何东西.
*注意:对于那些不熟悉不变性概念的人来说,它基本上意味着在对更改它的对象的任何操作中,该方法返回对象的副本,其中包含更改,而不是更改宾语.因此,如果另一个线程仍在读取对象,它将继续愉快地操作"旧"版本,不知道已经进行了更改,而不是崩溃可怕.请参阅http://www.javapractices.com/topic/TopicAction.do?Id=29
我正在使用OSGi作为我工作中的最新项目,就模块化和功能而言,它非常漂亮.
但我对开发工作流程并不满意.最终,我计划在依赖图中安排30-50个独立的捆绑包 - 据说,这就是OSGi的设计目标.但我无法弄清楚在编译时管理依赖项的简洁方法.
示例:您具有捆绑包A和B. B依赖于A中定义的包.每个捆绑包都是作为单独的Java项目开发的.
为了编译B,A必须在javac类路径上.
你呢:
5号听起来最干净,但也有很多开销.
例如,
x = "foo"
%{foo => 1}
**(CompileError) iex:11: illegal use of variable x in map key
Run Code Online (Sandbox Code Playgroud)
显然它正在编译时构建映射,这可能更有效,但为什么它不会像大多数具有数据结构文字的语言一样回退到运行时构造函数?有兴趣知道是否有关于Elixir中地图特征的一些内容,我很遗憾.
令人困惑的是这一年来Google Groups的消息,其中JoséValim说:
Variable keys in maps will be available in the next Erlang release.
Run Code Online (Sandbox Code Playgroud)
但那是一年前,现在,我找不到任何其他的参考.他指的是Erlang版本?我现在正在跑18,但它肯定还没有到位.
我正在编写一个基本的文字处理应用程序,并尝试采用一种本机的“内部”格式,该格式是我的代码解析以呈现到屏幕上的格式。我希望它是XML,以便将来可以编写XSLT转换为ODF或XHTML或其他格式。
在寻找要使用的现有标准时,唯一有希望的标准就是ODF。但是,对于我所需要的来说,这看起来像是过大的杀伤力。我所需要的只是段落标签,字体选择,字体大小和装饰...仅此而已。即使是最小的ODF渲染器,我也要花费很长时间,而且我不确定是否值得这样做。
现在,我正在考虑制作自己的XML格式,但这并不是真正的好习惯。最好使用一个标准,尤其是从那时起,我也许可以找到以后可能已经需要的XSLT。
还是我应该硬着头皮实施ODF?
编辑:关于答案
我以前知道XSL-FO,但是由于规格过重,所以并没有真正考虑它。但是您是对的,一个子集将为我提供与我合作所需的一切,并为我提供成长的空间。非常感谢提醒。
另外,通过包含FOP或RenderX之类的渲染库,我可以免费生成PDF。不错...
java ×3
math ×2
performance ×2
xml ×2
ant ×1
compilation ×1
concurrency ×1
cryptography ×1
dom ×1
elixir ×1
graph-theory ×1
hash ×1
javascript ×1
jruby ×1
jvm ×1
mysql ×1
osgi ×1
reactjs ×1
sql ×1
sql-tuning ×1
standards ×1
tomcat ×1
weblogic ×1
webrick ×1