mod_deflate по сравнению с Django GZipMiddleware, который использовать для развертывания?

Это было записано быстро, и не симпатично и не эффективно (плюс он, автополя много, преобразовывая между int и Integer являются раздражающими!), но это работает.

Это, вероятно, нарушает правила, так как я создаю свои собственные объекты, но эй я делаю это как диверсию от реальной работы:)

Это также предполагает, что набор результатов/таблица полностью читается в своего рода структуру, прежде чем Вы начнете создавать Узлы, которые не были бы лучшим решением, если у Вас есть сотни тысяч строк.

public class Node {

    private Node parent = null;

    private List<Node> children;

    private String name;

    private int id = -1;

    public Node(Node parent, int id, String name) {
        this.parent = parent;
        this.children = new ArrayList<Node>();
        this.name = name;
        this.id = id;
    }

    public int getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }

    public void addChild(Node child) {
        children.add(child);
    }

    public List<Node> getChildren() {
        return children;
    }

    public boolean isRoot() {
        return (this.parent == null);
    }

    @Override
    public String toString() {
        return "id=" + id + ", name=" + name + ", parent=" + parent;
    }
}

public class NodeBuilder {

    public static Node build(List<Map<String, String>> input) {

        // maps id of a node to it's Node object
        Map<Integer, Node> nodeMap = new HashMap<Integer, Node>();

        // maps id of a node to the id of it's parent
        Map<Integer, Integer> childParentMap = new HashMap<Integer, Integer>();

        // create special 'root' Node with id=0
        Node root = new Node(null, 0, "root");
        nodeMap.put(root.getId(), root);

        // iterate thru the input
        for (Map<String, String> map : input) {

            // expect each Map to have keys for "id", "name", "parent" ... a
            // real implementation would read from a SQL object or resultset
            int id = Integer.parseInt(map.get("id"));
            String name = map.get("name");
            int parent = Integer.parseInt(map.get("parent"));

            Node node = new Node(null, id, name);
            nodeMap.put(id, node);

            childParentMap.put(id, parent);
        }

        // now that each Node is created, setup the child-parent relationships
        for (Map.Entry<Integer, Integer> entry : childParentMap.entrySet()) {
            int nodeId = entry.getKey();
            int parentId = entry.getValue();

            Node child = nodeMap.get(nodeId);
            Node parent = nodeMap.get(parentId);
            parent.addChild(child);
        }

        return root;
    }
}

public class NodePrinter {

    static void printRootNode(Node root) {
        printNodes(root, 0);
    }

    static void printNodes(Node node, int indentLevel) {

        printNode(node, indentLevel);
        // recurse
        for (Node child : node.getChildren()) {
            printNodes(child, indentLevel + 1);
        }
    }

    static void printNode(Node node, int indentLevel) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < indentLevel; i++) {
            sb.append("\t");
        }
        sb.append(node);

        System.out.println(sb.toString());
    }

    public static void main(String[] args) {

        // setup dummy data
        List<Map<String, String>> resultSet = new ArrayList<Map<String, String>>();
        resultSet.add(newMap("1", "Node 1", "0"));
        resultSet.add(newMap("2", "Node 1.1", "1"));
        resultSet.add(newMap("3", "Node 2", "0"));
        resultSet.add(newMap("4", "Node 1.1.1", "2"));
        resultSet.add(newMap("5", "Node 2.1", "3"));
        resultSet.add(newMap("6", "Node 1.2", "1"));

        Node root = NodeBuilder.build(resultSet);
        printRootNode(root);

    }

    //convenience method for creating our dummy data
    private static Map<String, String> newMap(String id, String name, String parentId) {
        Map<String, String> row = new HashMap<String, String>();
        row.put("id", id);
        row.put("name", name);
        row.put("parent", parentId);
        return row;
    }
}
9
задан Imran 13 July 2009 в 08:36
поделиться

3 ответа

Вам, вероятно, следует проверить, чтобы знать наверняка, но если я предполагаю, mod_deflate будет лучше для запросов, которые полностью обходят Django (например, заархивированные статические ресурсы, которые должны быть развернуты отдельно, т.е.

Для вещей, которые уже генерируются ответами Django, это, вероятно, подбрасывание - в любом случае это будет собственный код, выполняющий сжатие.

6
ответ дан 3 November 2019 в 01:02
поделиться

Это зависит от обстоятельств. Если вы включите его в Apache, он также будет использоваться для статического содержимого (например, CSS, Javascript, изображений); но некоторый статический контент (например, JPG, GIF, SWF) в любом случае довольно хорошо сжимается.

2
ответ дан 3 November 2019 в 01:02
поделиться

Я определенно выбрал бы mod_deflate, при условии, что у вас есть статические файлы css и js, которые apache обслуживает напрямую и которые также могут быть сжаты.

1
ответ дан 3 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: