ajax - 网站文件和文件夹浏览器 : Should I use Static or Ajax?

标签 ajax node.js express

Subjective question时间!

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

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

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

1。使用 Ajax

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

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

2。进入“静态”

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

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

目前

我现在正在研究静态方法,我认为这种方法更具可访问性(即使以页面加载时间为代价),但我来这里是为了获得更多信息来指导正确的选择。我正在寻找能够解释为什么哪种方式会更好的答案,并且是公正的或分享经验的。预先感谢您的帮助!

最佳答案

对。所以还没有其他人回应,所以我只是继续制作文件浏览器。

我最终做了一个静态方法。事实证明,除了必须操作一堆字符串之外,它相对容易,我只能想象,对于 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

这是页面的一部分

enter image description here

关于ajax - 网站文件和文件夹浏览器 : Should I use Static or Ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657476/

相关文章:

javascript - 选择下拉菜单后,使用 Javascript 和 AJAX 禁用特定文本字段

node.js - ECS Fargate 任务在使用 Terraform 创建时无法通过健康检查

node.js - npm cors 包不工作

node.js - MongoDB如何处理海量群聊消息?

javascript - 使用 Express 的路由路径匹配 `/` 和 `/index`

node.js - 在 express 上使用 nginx 和 ssl 实现的反向代理失败

php - 当新行添加到数据库时,Twitter 喜欢更新

Ajax 发布到 Flask - json

c# - 当文本框上的 iframe 控件具有焦点时,如何保持页面的滚动位置?

javascript - 最后一个参数是回调时的NodeJS默认参数