java 优化 笔记

由于项目的数据是定时更新,为了页面的加载速度变快,使用了各种的优化:

1.首先是数据库的优化,由于数据是属于每分钟一条的,经过和项目经理的协商,可以计算为5分钟一天(取平均数),然后把一天分为288列(每天产生一天数据:ps 相当于java的去除冗余,而不是把全部的都简化到一条数据了,要看真正的需求);

2.后来由于上面的人数页面加载还是慢,而且由于每次访问数据库操作量大,有需要进一步的优化,利用ehcache缓存,把数据存到内存中,然后定时更新,具体就不写ehcache怎么使用,毕竟不是为了写这个

ps:2.1.中间还有一些优化就简单的说一下不仔细说了。尽可能优化sql语句,能一次查完的数据,不要分多次查询,能使用更有效率的sql语句就不用其他的等。合理利用多线程。

3.再后来,由于数据量的增加,服务器内存有限(小公司 ~ ~!),经过商量决定利用静态页面,然后由我来做,关于页面静态化请点击。由于第一次做页面静态化所以没有考虑更多就开始去做,后来发现页面内有页面加载的时候就会去做一个post请求,不知道怎么实现怎么加载到页面中。最后放弃页面静态化,至于为什么不把post请求改为直接传到页面,是因为改动太大而且有更好的选择。

4.更好的选择就是把数据写到xml中,用的时候从xml中读取。定时去更新xml中的数据。下面把 自己写的一个简单的创建和解析xml的代码贴一下,没怎么用过,写的不好的地方还请指出来,互相学习。

package com.intcache.hepburn.util;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import com.intcache.base.var.Constants;

public class ParseXml {

	private static Document document;
	private static String ONE_ELEMENT_NAME = "oneData";
	private static String TWO_ELEMENT_NAME = "twoData";
	private static String THREE_ELEMENT_NAME = "threeData";
	private static String FOUR_ELEMENT_NAME = "fourData";
	private static String FIVE_ELEMENT_NAME = "fiveData";
	private static String SIX_ELEMENT_NAME = "sixData";
	private static String SEVEN_ELEMENT_NAME = "sevenMap";

	public static void init() {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			document = builder.newDocument();
		} catch (ParserConfigurationException e) {
			System.out.println(e.getMessage());
		}
	}

	public static String getNodeName(String nodeName) {
		return Constants.XML_NODE_PREFIX + nodeName;
	}

	/**
	 * 生成一个xml 解析的时候 参数map 和此方法一致
	 * @param fileName 文件名
	 * @param oneMap 第一个map Map<String,List<Long>>
	 * @param twoMap 第二个map Map<String,List<Long>>
	 * @param threeMap 第三个map Map<String, Long>
	 * @param fourMap 第四个map Map<String, Long>
	 * @param fiveMap 第五个map Map<String, List<Double>>
	 * @param sixMap 第六个map Map<String, List<Double>>
	 * @param sevenMap 第七个map Map<String, Map<String, List<Float>>>
	 */
	public static void createXml(String fileName, Map<String, List<Long>> oneMap, Map<String, List<Long>> twoMap, Map<String, Long> threeMap, Map<String, Long> fourMap,
			Map<String, List<Double>> fiveMap, Map<String, List<Double>> sixMap, Map<String, Map<String, List<Float>>> sevenMap) {
		init();
		Element root = document.createElement(getNodeName("data")); //创建根节点  
		document.appendChild(root);
		if (oneMap != null) {
			Element oneItem = document.createElement(ONE_ELEMENT_NAME);
			root.appendChild(oneItem);
			for (String str : oneMap.keySet()) {
				addElement(oneMap.get(str).toString(), oneItem, str);
			}
		}
		if (twoMap != null) {
			Element twoItem = document.createElement(TWO_ELEMENT_NAME);
			root.appendChild(twoItem);
			for (String str : twoMap.keySet()) {
				addElement(twoMap.get(str).toString(), twoItem, str);
			}
		}
		if (threeMap != null) {
			Element threeItem = document.createElement(THREE_ELEMENT_NAME);
			root.appendChild(threeItem);
			for (String str : threeMap.keySet()) {
				addElement(threeMap.get(str).toString(), threeItem, str);
			}
		}
		if (fourMap != null) {
			Element fourItem = document.createElement(FOUR_ELEMENT_NAME);
			root.appendChild(fourItem);
			for (String str : fourMap.keySet()) {
				addElement(fourMap.get(str).toString(), fourItem, str);
			}
		}
		if (fiveMap != null) {
			Element fiveItem = document.createElement(FIVE_ELEMENT_NAME);
			root.appendChild(fiveItem);
			for (String str : fiveMap.keySet()) {
				addElement(fiveMap.get(str).toString(), fiveItem, str);
			}
		}
		if (sixMap != null) {
			Element sixItem = document.createElement(SIX_ELEMENT_NAME);
			root.appendChild(sixItem);
			for (String str : sixMap.keySet()) {
				addElement(sixMap.get(str).toString(), sixItem, str);
			}
		}
		if (sevenMap != null) {
			Element sevenItem = document.createElement(SEVEN_ELEMENT_NAME);
			root.appendChild(sevenItem);
			for (String str : sevenMap.keySet()) {
				Element strItem = document.createElement(str);
				sevenItem.appendChild(strItem);
				for (String str2 : sevenMap.get(str).keySet()) {
					addElement(sevenMap.get(str).get(str2).toString(), strItem, str2);
				}
			}
		}
		TransformerFactory tf = TransformerFactory.newInstance();
		try {
			Transformer transformer = tf.newTransformer();
			DOMSource source = new DOMSource(document);
			transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
			StreamResult result = new StreamResult(pw);
			transformer.transform(source, result); //关键转换  
			System.out.println("生成XML文件成功!");
		} catch (TransformerConfigurationException e) {
			System.out.println(e.getMessage());
		} catch (IllegalArgumentException e) {
			System.out.println(e.getMessage());
		} catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (TransformerException e) {
			System.out.println(e.getMessage());
		}
	}

	private static void addElement(String textContent, Element parentItem, String str) {
		Element item = document.createElement(getNodeName(str));
		item.setTextContent(textContent);
		parentItem.appendChild(item);
	}

	public static void createXml(String fileName) {
		init();
		Element root = document.createElement("data"); //创建根节点  
		document.appendChild(root);
		Element data = document.createElement("wk");
		data.setNodeValue("NodeValue");
		data.setTextContent("TextContent");
		root.appendChild(data);
		TransformerFactory tf = TransformerFactory.newInstance();
		try {
			Transformer transformer = tf.newTransformer();
			DOMSource source = new DOMSource(document);
			transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
			StreamResult result = new StreamResult(pw);
			transformer.transform(source, result); //关键转换  
			System.out.println("生成XML文件成功!");
		} catch (TransformerConfigurationException e) {
			System.out.println(e.getMessage());
		} catch (IllegalArgumentException e) {
			System.out.println(e.getMessage());
		} catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (TransformerException e) {
			System.out.println(e.getMessage());
		}
	}

	/**
	 * 解析xml文件  解析的时候 参数map 和生成xml(createXml())一致
	 * @param fileName 文件名
	 * @param oneMap 第一个map Map<String,List<Long>>
	 * @param twoMap 第二个map Map<String,List<Long>>
	 * @param threeMap 第三个map Map<String, Long>
	 * @param fourMap 第四个map Map<String, Long>
	 * @param fiveMap 第五个map Map<String, List<Double>>
	 * @param sixMap 第六个map Map<String, List<Double>>
	 * @param sevenMap 第七个map Map<String, Map<String, List<Float>>>
	 */
	public static void parserXml(String fileName, Map<String, List<Long>> oneMap, Map<String, List<Long>> twoMap, Map<String, Long> threeMap, Map<String, Long> fourMap,
			Map<String, List<Double>> fiveMap, Map<String, List<Double>> sixMap, Map<String, Map<String, List<Float>>> sevenMap) {
		try {
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document document = db.parse(fileName);
			NodeList employees = document.getChildNodes();
			String[] strArr;
			List<Long> dataList;
			for (int i = 0; i < employees.getLength(); i++) {
				Node employee = employees.item(i);
				NodeList employeeInfo = employee.getChildNodes();
				for (int j = 0; j < employeeInfo.getLength(); j++) {
					Node node = employeeInfo.item(j);
					NodeList employeeMeta = node.getChildNodes();
					for (int k = 0; k < employeeMeta.getLength(); k++) {
						if (employeeInfo.item(j).getNodeName().equals(ONE_ELEMENT_NAME)) {
							strArr = employeeMeta.item(k).getTextContent().replace("[", "").replace("]", "").split(",");
							dataList = new ArrayList<Long>();
							if (employeeMeta.item(k).getNodeName().contains("#text")) {
								continue;
							}
							for (String string : strArr) {
								if (string.trim().equals("")) {
									dataList.add(Long.valueOf(0));
								} else {
									dataList.add(Long.valueOf(string.trim()));
								}
							}
							oneMap.put(employeeMeta.item(k).getNodeName().replace(Constants.XML_NODE_PREFIX, ""), dataList);
						} else if (employeeInfo.item(j).getNodeName().equals(TWO_ELEMENT_NAME)) {
							strArr = employeeMeta.item(k).getTextContent().replace("[", "").replace("]", "").split(",");
							dataList = new ArrayList<Long>();
							if (employeeMeta.item(k).getNodeName().contains("#text")) {
								continue;
							}
							for (String string : strArr) {
								if (string.trim().equals("")) {
									dataList.add(Long.valueOf(0));
								} else {
									dataList.add(Long.valueOf(string.trim()));
								}
							}
							twoMap.put(employeeMeta.item(k).getNodeName().replace(Constants.XML_NODE_PREFIX, ""), dataList);
						} else if (employeeInfo.item(j).getNodeName().equals(THREE_ELEMENT_NAME)) {
							threeMap.put(employeeMeta.item(k).getNodeName().replace(Constants.XML_NODE_PREFIX, ""),
									Long.valueOf((employeeMeta.item(k).getTextContent().trim().equals("") ? String.valueOf(0) : employeeMeta.item(k).getTextContent().toString())));
						} else if (employeeInfo.item(j).getNodeName().equals(FOUR_ELEMENT_NAME)) {
							fourMap.put(employeeMeta.item(k).getNodeName().replace(Constants.XML_NODE_PREFIX, ""),
									Long.valueOf((String) (employeeMeta.item(k).getTextContent().trim().equals("") ? String.valueOf(0) : employeeMeta.item(k).getTextContent().toString())));
						} else if (employeeInfo.item(j).getNodeName().equals(FIVE_ELEMENT_NAME)) {
							strArr = employeeMeta.item(k).getTextContent().replace("[", "").replace("]", "").split(",");
							List<Double> doubleList = new ArrayList<Double>();
							if (employeeMeta.item(k).getNodeName().contains("#text")) {
								continue;
							}
							for (String string : strArr) {
								if (string.trim().equals("")) {
									doubleList.add(Double.valueOf(0));
								} else {
									doubleList.add(Double.valueOf(string.trim()));
								}
							}
							fiveMap.put(employeeMeta.item(k).getNodeName().replace(Constants.XML_NODE_PREFIX, ""), doubleList);
						} else if (employeeInfo.item(j).getNodeName().equals(SIX_ELEMENT_NAME)) {
							strArr = employeeMeta.item(k).getTextContent().replace("[", "").replace("]", "").split(",");
							List<Double> doubleList = new ArrayList<Double>();
							if (employeeMeta.item(k).getNodeName().contains("#text")) {
								continue;
							}
							for (String string : strArr) {
								if (string.trim().equals("")) {
									doubleList.add(Double.valueOf(0));
								} else {
									doubleList.add(Double.valueOf(string.trim()));
								}
							}
							sixMap.put(employeeMeta.item(k).getNodeName().replace(Constants.XML_NODE_PREFIX, ""), doubleList);
						} else if (employeeInfo.item(j).getNodeName().equals(SEVEN_ELEMENT_NAME)) {
							Map<String, List<Float>> map = new HashMap<String, List<Float>>();
							Node floatData = employeeMeta.item(k);
							NodeList floatDatas = floatData.getChildNodes();
							for (int l = 0; l < floatDatas.getLength(); l++) {
								strArr = floatDatas.item(l).getTextContent().replace("[", "").replace("]", "").split(",");
								List<Float> floatList = new ArrayList<Float>();
								if (floatDatas.item(l).getNodeName().contains("#text")) {
									continue;
								}
								for (String string : strArr) {
									if (string.trim().equals("")) {
										floatList.add(Float.valueOf(0));
									} else {
										floatList.add(Float.valueOf(string.trim()));
									}
								}

								map.put(floatDatas.item(l).getNodeName().replace(Constants.XML_NODE_PREFIX, ""), floatList);
							}
							sevenMap.put(employeeMeta.item(k).getNodeName(), map);
						}
					}
				}
			}
			System.out.println("解析完毕");
		} catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (ParserConfigurationException e) {
			System.out.println(e.getMessage());
		} catch (SAXException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}

	public static void main(String[] args) {

		createXml("D:\\wk.txt");
	}
}

代码是死的,人是活的,根据需求自己改。

好久没有写过原创的了,好激动撒大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑

还有什么方法可以优化的还请指教,(当然有很多啦,本人刚入行 勿喷撒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值