【问题标题】:Website File and Folder Browser: Should I use Static or Ajax?网站文件和文件夹浏览器:我应该使用静态还是 Ajax?
【发布时间】:2015-07-29 01:26:48
【问题描述】:

Subjective question时间!

我正在编写一个网站,该网站为一个开放组织托管大量文件和文件夹,该组织必须在线发布所有文档以供公众审查。我还没有开始编写实际的查看器,因为我想知道标准、最易于访问的方法是什么。

该网站必须易于访问,并且适用于从台式机到手机的所有设备。也就是说,我不必为较旧的过时浏览器编写代码。上一个站点在 Python 和 Django 上使用了静态方法。这是我的第一个真正的 node.js + Express 工作,我不确定性能差异。

目前,我看到了两种方法来完成我的任务:

1。使用 Ajax

我知道我可以将每个人都推到一个通用的 /documents 页面上,并允许他们自己浏览文件夹。但是,如果共享文档链接,我希望文档链接能够正常工作,因此我必须在用户四处移动时手动更改 URL,并将大量 Ajax 请求提交回服务器

我喜欢这种方法,因为它可能会提供更好的用户交互。我不喜欢 Ajax 请求的数量,并且我担心在手机和平​​板电脑等功能较弱的设备上,所有 Ajax 和 DOM 操作都会变慢或不起作用。此外,我必须将 url 解析为具有后端或前端的资源以进行检索。

2。去“静态”

我在后端使用 node.js 和 Jade,所以我知道我可以分解一个 url,找到文件夹层次结构,并为用户提供一个全新的页面。

我喜欢这种方法,因为它不需要用户的机器进行任何计算(并且在较慢的设备上可能会更快),这意味着不需要做大量的 url 工作。我不喜欢桌面用户最终会等待我必须用来准备页面的一堆同步操作,也不喜欢服务器负载或响应能力。

目前

我现在正在研究静态方法,因为我认为它更易于访问(即使以页面加载时间为代价),但我在这里是为了获得更多信息来指导正确的选择。我正在寻找解释为什么要走的路会更好,并且是公正的或分享经验的答案。提前感谢您的帮助!

【问题讨论】:

    标签: ajax node.js express


    【解决方案1】:

    没错。所以还没有其他人回应,所以我还是继续做了文件浏览器。

    我最终做了一个静态方法。结果证明它相对容易,除了必须操作一堆字符串之外,我只能想象 Ajax 需要两倍的工作。

    响应时间相当长:在我的站点上不进行计算的通用静态页面大约需要 40-70 毫秒,而新文档需要大约 150 毫秒的两倍。虽然实际上 150 毫秒对我的需求来说并不会让我感到不安,但在大规模环境中,我确信我在文档文件夹中的 glob 函数只会让系统陷入困境。

    对于任何想知道的人,这就是我所做的

    代码

    层次结构如下所示

    |app
      |controllers
        |-document.js
      |views
        |-document.jade
    |public
      |docs
        |
        |//folders
        |
    

    文档.js

    var express = require('express');
    var router = express.Router();
    var glob = require('glob');
    
    module.exports = function(app) {
        app.use('/', router);
    };
    
    router.get('/documents*', function serveDocsHome(req, res) {
        //this removes %20 from the requested url to match files with spaces
        req.originalUrl = req.originalUrl.replace('%20', ' ');
    
        //fun string stuff to make links work
        var dir = '/docs' + req.originalUrl.substr(10);
        var url = req.originalUrl + '/';
    
        //for moving up a directory
        var goUp = false;
        var folderName = 'Home';
        if (req.originalUrl != '/documents') {
            var end = req.originalUrl.lastIndexOf('/');
            folderName = req.originalUrl.substr(end + 1);
            goUp = true;
        }
    
        //get all the folders
        var folders = glob.sync('*/', {
            cwd : 'public' + dir
        });
        for (var i = 0; i < folders.length; i++) {
            folders[i] = folders[i].substr(0, folders[i].length - 1);
        }
    
        //get all the files
        var files = glob.sync('*', {
            cwd : 'public' + dir,
            nodir : true
        });
    
        //attach the files and folders
        res.locals.folders = folders;
        res.locals.files = files;
        res.locals.loc = dir + '/';
        res.locals.goUp = goUp;
        res.locals.url = url;
        res.locals.folderName = folderName;
    
        //render the doc
        res.render('documents', {
            title : 'Documents',
        });
    });
    

    文件.jade

    extends layout
    
    append css
        link(rel='stylesheet', href='/css/docs.css')
    
    append js
        script(src='/js/docs.js')
    
    block content
        .jumbotron(style='background: url(/img/docs.jpg); background-position: center 20%; background-repeat: no-repeat; background-size: cover;')
            .container
                h1= title
                p View minutes, policies, and guiding papers of the [name]
    
        .container#docs
            .row
                .col-xs-12.col-sm-3.sidebar.sidebar-wrap
                    h3= folderName
                    ul.no-style.jumplist
                        hr
                        if goUp
                            li#go-up: a.message(href='./') #[img(src='/img/icons/folderOpen.png')] Up One Folder
                        each val in folders
                            li: a(href='#{url + val}'): #[img(src='/img/icons/folder.png')] #{val}
    
                .col-xs-12.col-sm-9
                    h3 Files
                    ul.no-style
                        if files.length != 0
                            each val in files
                                li: a(href='#{loc + val}')= val
                        else 
                            li.message No Files Here
    

    这是页面的一部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2012-12-22
      • 2014-12-21
      • 2017-11-02
      相关资源
      最近更新 更多