我正在尝试总结我对最流行的JavaScript包管理器,捆绑包和任务运行器的了解.如果我错了,请纠正我:
npm
&bower
是包管理员.他们只是下载依赖项,不知道如何自己构建项目.他们知道的是在获取所有依赖项之后调用webpack
/ gulp
/ grunt
.bower
就像npm
,但是构建了扁平的依赖树(不像npm
递归那样).含义npm
获取每个依赖项的依赖项(可能会获取相同的几次),同时bower
期望您手动包含子依赖项.有时bower
并npm
分别用于前端和后端(因为每兆字节在前端可能很重要).grunt
并且gulp
是任务运行者自动化所有可以自动化的东西(即编译CSS/Sass,优化图像,制作捆绑并缩小/转换它).grunt
vs. gulp
(就像maven
vs. gradle
或配置与代码).Grunt基于配置单独的独立任务,每个任务打开/处理/关闭文件.Gulp需要的代码量较少,并且基于节点流,这使得它可以构建管道链(无需重新打开同一个文件)并使其更快.webpack
(webpack-dev-server
) - 对我来说,这是一个热门重新加载更改的任务运行器,可以让你忘记所有JS/CSS观察者.npm
/ bower
+ plugins可以替换任务运行器.他们的能力经常交叉,所以如果你需要使用gulp
/ grunt
over npm
+插件,会有不同的含义.但是,跑步者的任务是复杂的任务肯定更好(例如,"每个建设创建捆绑,从ES6 transpile到ES5,在所有浏览器模拟器中运行它,使屏幕截图和部署通过FTP收存箱").browserify
允许为浏览器打包节点模块.browserify
vs node
的require
实际上是AMD vs CommonJS.问题:
webpack
&webpack-dev-server
?官方文档说它是一个模块捆绑器,但对我来说它只是一个任务运行器.有什么不同?browserify
?我们不能对node/ES6导入做同样的事情吗? gulp …
我已经阅读了这个答案,减少了样板,看了几个GitHub示例,甚至尝试了redux(todo apps).
据我了解,官方redux doc动机提供了与传统MVC架构相比的优点.但它没有提供问题的答案:
为什么你应该使用Redux而不是Facebook Flux?
这只是编程风格的问题:功能与非功能?或者问题是在redux方法中遵循的能力/开发工具?也许缩放?还是测试?
如果我说redux对于来自函数式语言的人来说是一种变化,我是对的吗?
要回答这个问题,您可以比较实施redux在flux和redux上的动机点的复杂性.
以下是官方redux doc动机的动机点:
我读过SPA及其优点.我发现他们中的大多数都不能令人信服.有三个优点引起了我的怀疑.
问题: 你能否作为SPA的拥护者并证明我对前三个陈述有误?
=== ADVANTAGES ===
Run Code Online (Sandbox Code Playgroud)
1. SPA非常适合响应迅速的网站:
服务器端呈现很难为所有中间状态实现 - 小视图状态不能很好地映射到URL.
单页应用程序的区别在于它们能够重绘UI的任何部分而无需服务器往返来检索HTML.这是通过具有处理数据的模型层和从模型读取的视图层将数据与数据表示分离来实现的.
为非SPA持有模型层有什么问题?SPA是客户端唯一与MVC兼容的架构吗?
2.使用SPA,我们不需要对服务器使用额外的查询来下载页面.
哈,用户在访问您的网站时可以下载多少页?二三?相反,出现了另一个安全问题,您需要将登录页面,管理页面等分成单独的页面.反过来,它与SPA架构发生冲突.
3.可能还有其他优势吗?不要听到任何其他..
=== DISADVANTAGES ===
Run Code Online (Sandbox Code Playgroud)
PS我曾参与SPA和非SPA项目.我问这些问题因为我需要加深理解.没有理由伤害SPA支持者.不要让我再读一些关于SPA的信息.我只是想听听你对此的考虑.
是)我有的:
@Entity
public class MyEntity {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "myentiy_id")
private List<Address> addreses;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "myentiy_id")
private List<Person> persons;
//....
}
public void handle() {
Session session = createNewSession();
MyEntity entity = (MyEntity) session.get(MyEntity.class, entityId);
proceed(session); // FLUSH, COMMIT, CLOSE session!
Utils.objectToJson(entity); //TROUBLES, because it can't convert to json lazy collections
}
Run Code Online (Sandbox Code Playgroud)
真是个问题:
问题是我不能在会话关闭后拉懒惰集合.但我也不能在proceed方法中关闭会话.
什么解决方案(粗解决方案):
a)在会话关闭之前,强制hibernate拉取惰性集合
entity.getAddresses().size();
entity.getPersons().size();
Run Code Online (Sandbox Code Playgroud)
....
b)使用@Fetch(FetchMode.SUBSELECT) …
我遇到的问题是一对一的延迟加载在休眠中不起作用.我已经解决了,但仍然没有正确理解会发生什么.
我的代码(延迟加载在这里不起作用,当我拉人 - 地址也被提取):
@Entity
public class Person{
@Id
@SequenceGenerator(name = "person_sequence", sequenceName = "sq_person")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence")
@Column(name = "id")
private long personID;
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
private Adress address;
//.. getters, setters
}
@Entity
public class Address {
@Id
@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="person"))
private long personID;
@PrimaryKeyJoinColumn
@OneToOne
private FileInfo person;
}
Run Code Online (Sandbox Code Playgroud)
但是:如果我添加optional=false
OneToOne关系,延迟加载工作正常!
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, …
Run Code Online (Sandbox Code Playgroud) 如您所知,Web浏览器的安全性不允许发出跨域请求.我读了一本书,说只有在你可以将文件放在服务器上时才应该使用XMLHTTPRequest(意味着你要加载到同一个请求域的页面).如果你不能 - 你应该寻找替代方案.
我的问题是:
编辑: 我还不清楚......
例如,我从www.domain1.com拉取我的页面,我需要从www.domain2.com请求javascript .因此,拉出的页面应包含以下内容:
<script src="www.domain2.com/script.js"></script>
Run Code Online (Sandbox Code Playgroud)
避免跨域限制.
我可以使用JSONP,请求看起来像:http://ww.domain1.com/?callback = someFunction.js
但是:是不是一样?我只是从另一个域中拉js!它是否避免跨域限制?
我尝试反序列化包含null属性的对象并具有JsonMappingException
.
我所做的:
String actual = "{\"@class\" : \"PersonResponse\"," +
" \"id\" : \"PersonResponse\"," +
" \"result\" : \"Ok\"," +
" \"message\" : \"Send new person object to the client\"," +
" \"person\" : {" +
" \"id\" : 51," +
" \"firstName\" : null}}";
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(new StringReader(json), PersonResponse.class); //EXCEPTION!
Run Code Online (Sandbox Code Playgroud)
但是:如果扔掉"firstName = null"
财产 - 一切正常!我的意思是传递下一个字符串:
String test = "{\"@class\" : \"PersonResponse\"," +
" \"id\" : \"PersonResponse\"," +
" \"result\" : \"Ok\"," + …
Run Code Online (Sandbox Code Playgroud) 是)我有的:
我有Hibernate实体,它包含许多非瞬态字段,包括集合.用户可以单独更新每个字段或一次更新某些字段.
真是个挑战:
在处理程序中,我应该检查实体的哪个字段已被更改:
public void handle(Entity newVersion) {
Session session = sessionFactory.openSession();
Entity oldVersion = (Entity) session.get(Entity.class, entity.getId());
List changedFields = compareChanges(oldVersion, newVersion); //HOW TO CHECK WHICH FIELDS ARE CHANGED?
}
Run Code Online (Sandbox Code Playgroud)
出于安全性和通知原因,我想这样做.手段:
真是个问题:
我的代码非常难看.实际上我遍历所有字段/集合和调用equals
方法.
题:
可能是Hibernate提供了更优雅的方式来检查哪些字段已被修改?怎么样?
PS
@victorantunes提供了一个解决方案,但对我来说似乎太全面了.可能是一些替代品?
我在多个资源中找到了不同的zookeeper定义.也许其中一些是脱离背景,但看看它们:
我曾与Redis和Hazelcast合作,通过与Zookeeper进行比较,我更容易理解Zookeeper.
你能比较Zookeeper与内存数据网格和Redis吗?
我想:在超时到期时删除实体时收到通知.
我试过:设置删除监听器.
问题: 似乎删除侦听器无法正常工作.它只在我将新项目放入缓存时才有效(参见下面的代码)
问题: 如何在不放置新项目的情况下使删除侦听器工作?
码:
我的加载缓存:
LoadingCache<String, Integer> ints = CacheBuilder.newBuilder()
.maximumSize(10000)
.expireAfterAccess(ACCESS_TIMEOUT, TimeUnit.MILLISECONDS)
.removalListener(
new RemovalListener() {
//PROBLEM: THIS METHOD IS NEVER CALLED!!!
public void onRemoval(RemovalNotification notification) {
if (notification.getCause() == RemovalCause.EXPIRED) {
System.out.println("Value " + notification.getValue() + " has been expired");
} else {
System.out.println("Just removed for some reason");
}
}
}
)
.build(
new CacheLoader<String, Integer>() {
public Integer load(String key) throws Exception {
return new Integer(-1);
}
});
Run Code Online (Sandbox Code Playgroud)
我如何在单独的线程中使用缓存:
cache.put("key", 100);
Thread.sleep(ACCESS_TIMEOUT …
Run Code Online (Sandbox Code Playgroud) java ×4
hibernate ×3
javascript ×3
architecture ×2
jpa ×2
lazy-loading ×2
bower ×1
client-side ×1
collections ×1
cross-domain ×1
flux ×1
gruntjs ×1
guava ×1
gulp ×1
hazelcast ×1
jackson ×1
json ×1
npm ×1
one-to-one ×1
reactjs ×1
reactjs-flux ×1
redis ×1
redux ×1
webpack ×1
websocket ×1