小编VB_*_*VB_的帖子

NPM vs. Bower vs. Browserify vs. Gulp vs. Grunt vs. Webpack

我正在尝试总结我对最流行的JavaScript包管理器,捆绑包和任务运行器的了解.如果我错了,请纠正我:

  • npm&bower是包管理员.他们只是下载依赖项,不知道如何自己构建项目.他们知道的是在获取所有依赖项之后调用webpack/ gulp/ grunt.
  • bower就像npm,但是构建了扁平的依赖树(不像npm递归那样).含义npm获取每个依赖项的依赖项(可能会获取相同的几次),同时bower期望您手动包含子依赖项.有时bowernpm分别用于前端和后端(因为每兆字节在前端可能很重要).
  • grunt并且gulp是任务运行者自动化所有可以自动化的东西(即编译CSS/Sass,优化图像,制作捆绑并缩小/转换它).
  • gruntvs. gulp(就像mavenvs. gradle或配置与代码).Grunt基于配置单独的独立任务,每个任务打开/处理/关闭文件.Gulp需要的代码量较少,并且基于节点流,这使得它可以构建管道链(无需重新打开同一个文件)并使其更快.
  • webpack(webpack-dev-server) - 对我来说,这是一个热门重新加载更改的任务运行器,可以让你忘记所有JS/CSS观察者.
  • npm/ bower+ plugins可以替换任务运行器.他们的能力经常交叉,所以如果你需要使用gulp/ gruntover npm+插件,会有不同的含义.但是,跑步者的任务是复杂的任务肯定更好(例如,"每个建设创建捆绑,从ES6 transpile到ES5,在所有浏览器模拟器中运行它,使屏幕截图和部署通过FTP收存箱").
  • browserify允许为浏览器打包节点模块.browserifyvs noderequire实际上是AMD vs CommonJS.

问题:

  1. 什么是webpack&webpack-dev-server官方文档说它是一个模块捆绑器,但对我来说它只是一个任务运行器.有什么不同?
  2. 你会在哪里使用browserify?我们不能对node/ES6导入做同样的事情吗?
  3. 你什么时候使用gulp …

npm gruntjs bower gulp webpack

1811
推荐指数
8
解决办法
27万
查看次数

为什么使用Redux而不是Facebook Flux?

我已经阅读了这个答案,减少了样板,看了几个GitHub示例,甚至尝试了redux(todo apps).

据我了解,官方redux doc动机提供了与传统MVC架构相比的优点.但它没有提供问题的答案:

为什么你应该使用Redux而不是Facebook Flux?

这只是编程风格的问题:功能与非功能?或者问题是在redux方法中遵循的能力/开发工具?也许缩放?还是测试?

如果我说redux对于来自函数式语言的人来说是一种变化,我是对的吗?

要回答这个问题,您可以比较实施redux在flux和redux上的动机点的复杂性.

以下是官方redux doc动机的动机点:

  1. 处理乐观的更新(据我所知,它几乎不取决于第5点.难道在facebook flux中实现它吗?)
  2. 在服务器上渲染(facebook flux也可以做到这一点.与redux相比有什么好处?)
  3. 在执行路由转换之前获取数据(为什么在facebook中无法实现?有什么好处?)
  4. 热重载(可以使用React Hot Reload.为什么我们需要redux?)
  5. 撤消/重做功能
  6. 还有其他一点吗?像坚持国家一样......

javascript flux reactjs reactjs-flux redux

1126
推荐指数
7
解决办法
25万
查看次数

单页应用:优缺点

我读过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)
  1. 客户端必须启用javascript.
  2. 只有一个网站入口点.
  3. 安全.

PS我曾参与SPA和非SPA项目.我问这些问题因为我需要加深理解.没有理由伤害SPA支持者.不要让我再读一些关于SPA的信息.我只是想听听你对此的考虑.

javascript architecture client-side single-page-application

199
推荐指数
6
解决办法
14万
查看次数

Hibernate:拉动所有懒惰集合的最佳实践

是)我有的:

@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) …

java hibernate lazy-loading

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

Hibernate:一对一延迟加载,可选= false

我遇到的问题是一对一的延迟加载在休眠中不起作用.我已经解决了,但仍然没有正确理解会发生什么.

我的代码(延迟加载在这里不起作用,当我拉人 - 地址也被提取):

@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=falseOneToOne关系,延迟加载工作正常!

@OneToOne(mappedBy="person", cascade=CascadeType.ALL, …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa lazy-loading one-to-one

58
推荐指数
2
解决办法
5万
查看次数

如何进行跨域请求

如您所知,Web浏览器的安全性不允许发出跨域请求.我读了一本书,说只有在你可以将文件放在服务器上时才应该使用XMLHTTPRequest(意味着你要加载到同一个请求域的页面).如果你不能 - 你应该寻找替代方案.

我的问题是:

  1. 什么是XMLHTTPRequest的跨域替代方案?
  2. WebSockets怎么?此技术是否允许跨域请求?

编辑: 我还不清楚......

例如,我从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!它是否避免跨域限制?

javascript xmlhttprequest cross-domain websocket

34
推荐指数
2
解决办法
17万
查看次数

JSON:JsonMappingException同时尝试使用空值反序列化对象

我尝试反序列化包含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)

java json jackson json-deserialization

20
推荐指数
2
解决办法
7万
查看次数

Hibernate:检查哪个实体的字段被修改

是)我有的:

我有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)

出于安全性和通知原因,我想这样做.手段:

  1. 并非所有用户都可以修改所有字段
  2. 我应该在某些字段更改时以特定方式通知特定用户.

真是个问题:

我的代码非常难看.实际上我遍历所有字段/集合和调用equals方法.

题:

可能是Hibernate提供了更优雅的方式来检查哪些字段已被修改?怎么样?

PS

@victorantunes提供了一个解决方案,但对我来说似乎太全面了.可能是一些替代品?

java architecture design-patterns hibernate jpa

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

Zookeeper与In-memory-data-grid对比Redis

我在多个资源中找到了不同的zookeeper定义.也许其中一些是脱离背景,但看看它们:

  1. Zookeeper使用的典型示例是分布式内存计算......

  2. ZooKeeper是一个开源Apache™项目,提供集中式基础架构和服务,支持跨集群进行同步.

  3. Apache ZooKeeper是一个开源文件应用程序接口(API),它允许大型系统中的分布式进程相互同步,以便所有发出请求的客户端都能获得一致的数据.

我曾与Redis和Hazelcast合作,通过与Zookeeper进行比较,我更容易理解Zookeeper.

你能比较Zookeeper与内存数据网格和Redis吗?

  1. 如果分布式内存计算,zookeeper与内存数据网格有何不同?
  2. 如果跨群集同步,那么它与所有其他内存存储有何不同?相同的内存数据网格也提供了群集范围的锁.Redis也有某种交易.
  3. 如果只是关于内存中的一致数据,那么还有其他选择.Imdg让你实现同样的目标,不是吗?

distributed-computing redis hazelcast apache-zookeeper

14
推荐指数
1
解决办法
7560
查看次数

Guava CacheBuilder不会调用remove listener

我想:在超时到期时删除实体时收到通知.

我试过:设置删除监听器.

问题: 似乎删除侦听器无法正常工作.它只在我将新项目放入缓存时才有效(参见下面的代码)

问题: 如何在不放置新项目的情况下使删除侦听器工作?

码:

我的加载缓存:

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 collections guava

13
推荐指数
1
解决办法
3925
查看次数