JavaScript中相对路径和绝对路径的区别

62

有一些小的澄清:

据我所知,这些是相对路径和绝对路径:

Completely relative: <img src="kitten.png"/>   
Absolute in all respects: <img src="http://www.foo.com/images/kitten.png">

相对路径和绝对路径有什么区别?

使用这些路径会出现性能问题吗?

这样做是否会增强网站的安全性?

有没有一种将绝对路径转换为相对路径的方法?


3
这里有一个很好的答案:https://dev59.com/1HI-5IYBdhLWcg3wHUnP - Creak
8个回答

66

以根目录为参考的路径称为绝对路径。 以当前目录为参考的路径称为相对路径


3
相对时间和绝对时间哪一个更好/更快? - Inderjeet
我相信使用相对路径,因为它不依赖于任何位置。 - Kick Buttowski

48
什么是相对路径和绝对路径的区别?
一个必须与另一个URI相关计算。 另一个则不需要。
使用这些路径会出现任何性能问题吗?
没有显著问题。
我们会得到网站的任何安全保障吗?
没有。
有没有办法将绝对路径转换为相对路径?
简单来说:从左往右逐步尝试匹配方案、主机名,然后将路径段与您要相对于的URI匹配。当您找到匹配项时,请停止。

1
当你谈论性能时没有什么显著的内容,但如果你有一个包含100万个链接的项目,其中使用"./"语法相对的链接有100万个,而使用"~/"语法的虚拟/绝对链接也有100万个,并且它们一个接一个地被调用。这两种方法中是否会有性能下降? - Eric Bishard
8
@EricB — 性能差异在加载描述链接的HTML页面时会有影响,而不是在解析链接时。运输层的gzip压缩可能会消除这种差异。在单个页面中拥有1,000,000个链接本身就是非常愚蠢的行为。 - Quentin

33
完全相对的:
<img src="kitten.png"/>

这确实是一个相对路径。

在所有方面都是绝对的:

<img src="http://www.foo.com/images/kitten.png"/>

这是一个URL,从某种意义上来说,它可以被视为绝对路径,但它并不代表这个问题。

相对路径和绝对路径的区别在于,使用相对路径时,您以当前工作目录为参考,而使用绝对路径时,您引用某个已知目录。当您制作一些程序需要使用某些文件夹中的资源时,相对路径非常有用,可以使用工作目录作为起点打开这些文件夹。

相对路径示例:

  • image.png,相当于.\image.png(在Windows中) 或./image.png(其他任何地方)。  . 明确指定您正在表示路径 相对于当前工作目录, 但是每当路径从根目录开始时,这是隐含的 (用斜杠指定),因此您不必一定使用它 (除非在某些上下文中应用默认目录 (或要搜索的目录列表) 将被应用,除非您明确指定某个目录)。

  • ..\images\image2.jpg  这样,您可以从文件夹树中向上访问资源。 ..\ 表示您已退出当前文件夹, 进入包含工作和 images 文件夹的目录。  同样,在Windows中使用\,在其他任何地方使用/

绝对路径示例:

  • D:\documents\something.doc
  • E:\music\good_music.mp3

等等。


对于Windows系统而言,使用'/'和''符号没有区别。 - A. Gusev

10

相对路径

相对路径假设文件位于当前服务器上。使用相对路径可以使您脱机构建网站并进行全面测试,然后再上传。

例如:

php/webct/itr/index.php

.

绝对路径

绝对路径是指使用完整的URL引用互联网上的文件。绝对路径告诉浏览器确切要前往哪个位置。

例如:

http://www.uvsc.edu/disted/php/webct/itr/index.php

绝对路径更易于使用和理解。然而,在您自己的网站上使用它并不好。首先,使用相对路径可以使您脱机构建网站并进行全面测试,然后再上传。如果您使用绝对路径,则必须在上传之前更改代码才能使其正常工作。如果您曾经需要移动网站或更改域名,那么这也是必需的。

参考资料:http://openhighschoolcourses.org/mod/book/tool/print/index.php?id=12503


1
绝对路径不仅仅指互联网上的文件。"绝对路径被定义为从根目录(/)指定文件或目录位置。换句话说,我们可以说绝对路径是从实际文件系统的开始位置 / 目录的完整路径。" - bg17aw

9

想象一下,您在 http://www.foo.com/bar/page.html 上打开了一个窗口。 在 HTML、Javascript 和 CSS 中:

opened_url = http://www.foo.com/bar/page.html
base_path = http://www.foo.com/bar/
home_path = http://www.foo.com/
/kitten.png = Home_path/kitten.png
kitten.png = Base_path/kitten.png

在HTML和Javascript中,base_path是基于打开的窗口来确定的。在大型Javascript项目中,您需要一个BASEPATH或根变量来偶尔存储base_path。(例如像这个this)
在CSS中,打开的URL是您的.css文件存储或加载的地址,而不是像Javascript一样与当前打开的窗口相同。
为了更安全地使用绝对路径,建议使用//而不是http://,以便将来可能进行到https://迁移。在您自己的示例中,请按以下方式使用:
<img src="//www.foo.com/images/kitten.png">

0

相对路径:

  • 您可以下载一个自包含的目录(可能是一个压缩文件),并在本地打开html或xml链接,无需访问服务器。这显著提高了速度性能,特别是如果您必须处理慢速网络。

绝对路径:

  • 您将不得不忍受网络速度,但从安全角度来看,您可以防止某些用户查看某些文件,或者增加网络流量(仅当...)这对您有好处时。

0

我认为这个例子会帮助你更简单地理解。

Windows中的路径差异

Windows绝对路径 C:\Windows\calc.exe

Windows非绝对路径(相对路径) calc.exe

在上面的例子中,绝对路径包含文件的完整路径,而非绝对路径只包含文件。在这个例子中,如果你在不包含“calc.exe”的目录中,你会收到一个错误消息。然而,当使用绝对路径时,你可以在任何目录中,计算机都知道在哪里打开“calc.exe”文件。

Linux中的路径差异

Linux绝对路径 /home/users/c/computerhope/public_html/cgi-bin

Linux非绝对路径(相对路径) /public_html/cgi-bin

在这些例子中,绝对路径包含该计算机上cgi-bin目录的完整路径。 如何在Linux中找到文件的绝对路径 由于大多数用户不想看到完整路径作为提示符,因此默认情况下提示符是相对于他们的个人目录的,如上所示。要查找当前目录的完整绝对路径,请使用pwd命令。

最好的做法是尽可能使用相对文件路径。

当使用相对文件路径时,你的网页将不受当前基本 URL 的限制。所有链接都将在你自己的计算机(本地主机)以及当前公共域和未来的公共域上正常工作。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接