Solr优化二:启用MMapDirectory

SOLR默认使用的是NRTCachingDirectoryFactory,但是当我们不需要NRT的时候,可以使用MMapDirectory。

为什么要使用MMapDirectory?
简单来说,它比普通的文件目录要快。

前提:
1、操作系统最好是64位的。这样指针地址空间几乎不用考虑。32位只能使用3G左右。

性能对比:
1、使用前:

2、

树控件优化

今天在使用系统的时候,意外发现页面加载树形空间异常缓慢,慢到了10秒以上。之前将数据库中数据转换成树形结构是我写的,虽然没有对数据做缓存,依然是每次从oracle中读取并组装成树,但是不至于慢到10秒以上。

经审查发现,返回的数据信息合计三千条,数据大小尽然达到4.4MB,整个数据下载花费8秒。而等待只花了1.75秒。

整个分析说明服务器只花了1.75秒就把数据组装完成并返回到客户端,只是返回的数据量达到了4.4MB。
仔细查看返回的数据,发现同事写的返回结果中包含了太多前端不需要的字段,足足包含了60多个字段。而easyui前端其实只需要4个字段就够了。

很明显了,优化方案可以如下:
1、只返回前端需要的字段,将60个字段变成4个字段,大大缩小返回数据量;
2、由于这类数形数据基本不会变更,可以变为缓存存起来,避免每次从数据库中读取并组装。
3、使用异步数加载,每次点击只加载一个层级的数据,避免一次性加载过多数据,提高页面响应速度。

使用iframe报错X-Frame-options Deny

今天在easyui中使用iframe的时候,报错:X-Frame-options to Deny。而且iframe访问的网址是同域的,还不存在跨域的问题。都是localhost。

仔细搜索了一番(面向搜索编程),发现是spring security设置了这个响应头。所以我们可以改掉它,允许同域访问。

添加代码如下:
http.headers().frameOptions().sameOrigin();

解释下frameopthons的几个参数意思:

  • DENY – is a default value. With this the page cannot be displayed in a frame, regardless of the site attempting to do so.(禁止网页现在到iframe中)
  • SAMEORIGIN – I assume this is what you are looking for, so that the page will be (and can be) displayed in a frame on the same origin as the page itself(同域页面可以显示在iframe中)
  • ALLOW-FROM – Allows you to specify an origin, where the page can be displayed in a frame.(制定可以显示在iframe中的来源域)

参考资料:
1、https://stackoverflow.com/questions/28647136/how-to-disable-x-frame-options-response-header-in-spring-security
2、https://stackoverflow.com/questions/42196013/spring-security-x-frame-deny