14

我在一些网站上工作,这些网站的文件可以追溯到 2000 年。这些网站随着时间的推移有机地增长,导致大量孤立的网页,包括文件、图像、CSS 文件、JavaScript 文件等......这些孤立的文件导致许多问题,包括可维护性差、可能的安全漏洞、糟糕的客户体验,以及像我这样让 OCD/GTD 疯子发疯。

这些文件数以千计,因此完全手动的解决方案是不可行的。最终,清理过程将需要相当大的 QA 工作,以确保我们没有无意中删除所需的文件,但我希望开发一种技术解决方案来帮助加快手动工作。此外,我希望将流程/实用程序落实到位,以帮助防止这种混乱状态在未来发生。

环境注意事项:

  • 经典 ASP 和 .Net
  • 运行 IIS 6 和 IIS 7 的 Windows 服务器
  • 多种环境(Dev、Integration、QA、Stage、Prodction)
  • 用于源代码控制的 TFS

在开始之前,我想从其他成功完成类似流程的人那里获得一些反馈。

具体来说,我正在寻找:

  • 识别和清理孤立文件的过程
  • 从孤立文件中保持环境清洁的过程
  • 帮助识别孤立文件的实用程序
  • 帮助识别断开链接的实用程序(一旦文件被删除)

我不是在寻找:

  • 我的组织强迫症的解决方案......我喜欢我现在的样子。
  • 嘲笑我们仍在使用经典 ASP 的评论。我已经感觉到疼痛了。没有必要把它擦进去。
4

4 回答 4

2

起初我认为您可以通过扫描文件中的链接来摆脱困境,然后对您的文件夹结构进行比较 - 但这只能识别简单的孤立文件,而不是相互引用的孤立文件的集合。因此,使用 grep 可能不会让您一路走好。

这不是一个简单的解决方案,但会成为保持环境清洁的绝佳工具(因此值得付出努力)。此外,您可以在所有环境中重复使用它(并与他人共享!)

基本思想是设置和填充有向图,其中每个节点的键都是绝对路径。这是通过扫描所有文件并添加依赖项来完成的 - 例如:

/index.html     -> /subfolder/file.jpg
                -> /subfolder/temp.html
                -> /error.html
/temp.html      -> /index.html
/error.html     
/stray.html     -> /index.html
/abandoned.html

然后,您可以通过在根页面上执行 BFS 来识别所有“可访问”文件。

使用方向图,您还可以按文件的进出程度对文件进行分类。在上面的例子中:

/index.html     in: 1 out: 2
/temp.html      in: 1 out: 1
/error.html     in: 1 out: 0
/stray.html     in: 0 out: 1
/abandoned.html in: 0 out: 0

因此,您基本上是在寻找被放弃的 in = 0 的文件。

此外, out = 0 的文件将成为终端页面;在您的网站上可能需要也可能不需要(如错误所示,这是一个错误页面)。

于 2009-11-09T18:23:52.653 回答
1

这里没有讽刺的评论......我感到你的痛苦,因为我们网站的大部分仍然在经典的 ASP 中。

我不知道有什么完全自动化的系统会成为灵丹妙药,但我有几个想法可以提供帮助。至少这是我们清理网站的方式。

首先,虽然它看起来不像是完成这项工作的工具,但我已经使用 Microsoft Viso 来帮助解决这个问题。我们有Visio for Enterprise Architects,我不确定其他版本有没有这个功能,但是在这个版本中,你可以新建一个文档,在“Web Diagram”文件夹下的“选择绘图类型”中,有“网站地图”的选项(公制或美制单位 - 没关系)。

当您创建此绘图类型时,Visio 会提示您输入网站的 URL,然后出去并为您爬网您的网站。

这应该有助于确定哪些文件是有效的。它并不完美,但我们使用它的方式是在文件系统中查找未显示在 Visio 绘图中的文件,然后在 Visual Studio 中调出整个解决方案并搜索该文件名。如果我们在整个解决方案中找不到它,我们会将其移至“过时”文件夹中一个月,如果我们没有开始在网站上收到投诉或 404 错误,则将其删除。

其他可能的解决方案是使用日志文件解析器并解析过去n个月的日志并以这种方式查找丢失的文件,但这实际上需要大量编码才能得出一个“已知良好”文件列表不比 Visio 选项更好。

于 2009-11-09T18:09:19.663 回答
1

第 1 步:在您的网站上建立一个绝对可见的页面列表。创建此列表的一种智能方法是解析您的日志文件以查找人们访问的页面。

第 2 步:运行一个递归查找站点拓扑的工具,从一个专门编写的页面(您将在您的站点上创建)开始,该页面在第 1 步中具有指向每个页面的链接。可以做到这一点的一个工具是Xenu 的 Link Sleuth。它旨在查找死链接,但也会列出活动链接。这可以在外部运行,因此在您的服务器上安装“奇怪”软件没有安全问题。您需要偶尔注意这一点,因为如果您有错误或其他问题,您的网站可能有无限的页面等。

第 3 步:从您的站点 Web 目录开始,运行一个递归映射硬盘的工具。我无法想到任何这些,但是写一个应该是微不足道的,而且更安全,因为这将在您的服务器上运行。

第 4 步:将第 2 步和第 3 步的结果以编程方式匹配 #2 和 #3。#3 中不在 #2 中的任何内容都可能是孤立页面。

注意:这种技术在受密码保护的东西上效果不佳,对于严重依赖动态生成链接的网站也效果不佳(如果链接一致,动态内容就可以了)。

于 2009-11-09T18:16:18.440 回答
0

去过那里,做过很多次。为什么内容类型不能自行清理?就个人而言,我会这样打:

1) 获取在 QA 环境中运行的站点的副本。

2)使用 selinum(或其他一些基于浏览器的测试工具)为有效的东西创建一套测试。

3)开始删除应该删除的东西。

4) 删除内容后从#2 运行测试以确保它仍然有效。

5) 重复#s 3 & 4 直到满意。

于 2009-11-09T20:04:28.363 回答