关于Django、Java、Python、HTML及网站开发的全局性问题

6 投票
8 回答
1854 浏览
提问于 2025-04-16 01:54

我正在努力了解网站开发的最新情况,并有几个问题。也许我最终会自己找到大部分答案。我之前是做C++和Windows开发的,所以对于看起来比较随意的网站开发,我感到有些困惑。

我关注了Django,经过网上的研究,我还对Ruby(在Rails上)进行了了解。从我所读到的内容来看,Ruby on Rails(简称ROR)试图在后台为你做所有事情,因此速度慢且不易扩展(而且被过度宣传,实际上还不够成熟)。所以我开始使用Django——下载了Python和Django,从一个完整的Django网站获取了源代码,成功运行起来,等等。

让我对Django感到惊讶的第一件事是,似乎在实际展示方面没有什么创新。所有的创新似乎都集中在数据库问题、业务逻辑、代码的可重用性等方面——但在网站的视觉控制或图形方面并没有什么新东西。当你构建Django的视图或模板时,似乎仍然需要大量引用HTML(而且我猜也需要JavaScript——不过我在Django模板中还没见过JavaScript)。

我之前以为HTML可能类似于汇编语言,传统的应用开发者可能会知道并偶尔使用一点汇编,但一般情况下几乎不会使用。而从我所看到的,HTML(还有CSS和JavaScript)仍然是每个网页开发者必须掌握并不断编写的,无论他们使用Django还是其他什么。这个说法是真的吗?

有一个网站对我来说代表了网站的最新水平,我很好奇这样的网站的基础是什么。这个网站是chess.com,它提供了与其他用户在线下棋的各种功能,用户可以自定义他们的账户,添加各种图形效果。我想知道他们是否使用Java小程序来构建这样的网站?Django在这样的网站中相关性如何?Django会与Flash或Java小程序一起使用吗?另外,当像chess.com这样的网站移植到移动设备时,使用的是什么开发工具——是与桌面版相同的工具,还是完全不同的东西(是的,我还有很多知识需要补充)。

实际上是否有完全用Java编写的网站,可能使用了非常高级的Java API?为什么有人会说他们讨厌Java,所以才转向Ruby on Rails和Django?

关于Python(还有PHP),它们存在的理由是什么?首先,Python的速度比C++慢得多,因为它是解释型的。为什么网站会用Python或PHP编写——平台独立性是唯一的问题吗?我不敢相信在Python中开发应用比在C++中快(除了垃圾回收的问题——这是否是Python的主要原因——垃圾回收)。

总之,这是一堆新手问题——如果这里没有人回答,我可能会自己找到大部分答案。不过也许这些问题对其他人也有帮助。

8 个回答

7

所有的创新主要集中在数据库问题、业务逻辑、代码的可重用性等方面,而不是在网站的视觉控件或图形上有什么新的突破。

没错。这个看法很准确。这算不算问题呢?

HTML可以比作汇编语言,过去的传统应用开发者可能会知道并偶尔使用一些汇编语言,但通常情况下几乎不会用到。

这不对。实际上,根本不是这样。所有的浏览器都使用HTML。这一点是很难改变的。

chess.com... 他们很可能在这样的网站上使用Java小程序吗?

你可以在浏览器中使用view source来自己回答这个问题。一般来说,访问每个网站时都可以这样做。你会学到很多关于网络和网页开发的知识。

Django会和Flash或者Java小程序一起使用吗?

会的。我们使用FLEX和Django。

当像chess.com这样的网站被移植到移动设备上时,使用的开发工具是和桌面版一样的吗,还是完全不同的工具(是的,我还有很多要学习的)。

是的。

真的有完全用Java写的网站吗?也许是使用了非常高级的Java API?

有的。

为什么有人会说(我在某处看到的)他们讨厌Java,所以才转向Ruby on Rails和Django呢?

有些人喜欢批评Java,但他们的论点并没有太多技术上的依据。

当你使用过Java和Python后,你会发现Python的表达更简洁。你能用更少的输入完成更多的事情。

他们[Python和PHP]存在的理由是什么?

它们比其他选择更好。对于人们需要做的特定事情,Python(或PHP)比其他选择要好。对于“所有事情”或广泛的事情类别,可能并不那么明确。

我们做了很多临时的数据处理。Python的灵活性绝对优于其他选择。

首先,Python的速度比C++慢得多,因为它是解释型语言。

这实际上并不重要。网站的表现并不是由架构中某个元素的原始速度决定的。

为什么网站会用Python或PHP来写?

因为这样做比其他选择更简单。

平台独立性是唯一的问题吗?

不是。

我很难相信应用开发在Python中比在C++中快得多。

你用过Python吗?你应该试试,至少一年。相比之下,C++会显得相当繁琐和容易出错。

那Python的主要原因就是垃圾回收吗?

不是。

10
  1. Django并不是想要在浏览器中展示网站的方式上进行创新。他们的目标是简化建网站的过程。他们本可以尝试一些新的方法来创建浏览器中的小部件,但他们没有这样做。因为在传统的网站构建方式中,有很多痛点需要解决。

  2. 如果你在建网站,你就必须接触到HTML。你把它比作汇编语言的说法很有趣,但在这个比喻中,并没有出现什么流行的高级语言。这可能是因为每种高级语言都会对表达的内容施加一些限制,而现在的网页并不想要这种统一的限制。

  3. Python是一种比C++更容易使用的语言,你真的可以用它更快地开发。你应该试试看。自动内存管理是一个原因,还有其他原因,比如易用的数据结构、无需向编译器请求权限就能做你想做的事、丰富的第三方库可以使用,以及一个简洁的语言环境让你表达自己。关于速度:网站的性能瓶颈不是计算,而是输入输出,所以语言的速度通常不会有太大影响。

  4. 关于网页开发的临时性。你来自Windows开发的背景,在那里一个厂商定义了整个环境,并且做得很好。而网页开发是临时性的,因为网络本身就是这样。没有一个团体来定义它,它是通过许多人的贡献自然发展起来的。

12

嗯,你问了很多问题。我会挑几个重要的来回答。

关于像Python这样的编程语言的原因……其实很多网页应用程序要么是输入输出(I/O)受限,要么是数据库受限。在这种情况下,使用的语言如果没有C++快也没关系,因为瓶颈在别的地方。此外,很多Python的核心功能和数据结构都是用C写的。Python主要用来处理高级逻辑,但大部分工作是在快速的本地代码中完成的。你可能会惊讶地发现,在我现在的工作中,我用Python编写3D动画软件。当然,很多背后的工作是用C++写的。这种做法有个名字,叫“硬层和软层交替”。我们使用Python的原因很简单——因为我们写的API只能选择Python或C++,而且用Python的效率要高很多。其实我也想问问C++存在的理由,但那是另一个话题(而且可能会引发争论;)。

至于视觉呈现的问题……传统上,应用程序的服务器端逻辑和浏览器端逻辑之间有很明显的分隔,部分原因是你只能依赖JavaScript在浏览器中运行(即使如此,你也不能完全确定它会运行,像Lynx这样的浏览器就不支持)。所以你会在某种框架(比如Django)中编写服务器逻辑,然后用一些JavaScript框架来处理前端的内容,最近几年还用AJAX让它们之间的交互更顺畅。

这种模式现在仍然是主流,但情况开始发生变化。很多服务器端框架开始包含生成JavaScript的功能。人们也开始编写编译器,将其他语言翻译成JavaScript。一个显著的例子是谷歌的GWT,它将Java转换为JavaScript:http://code.google.com/webtoolkit/。还有其他类似的例子。我几年前在一个叫parenscript的公共Lisp库中做了很多编程(http://common-lisp.net/project/parenscript/),现在也有一个Clojure(http://clojure.org/)库在做类似的事情。此外,还有一些非常有趣的框架,比如Seaside/Magritte(http://www.seaside.st/http://www.lukas-renggli.ch/smalltalk/magritte),它们使用“继续”来管理小部件的状态。Scheme和公共Lisp也有类似的框架。

至于HTML像汇编语言,我在写HTML的时候是有这种感觉的。在这种情况下,我倾向于使用某种抽象层来生成HTML。但世界上很多HTML是由设计师制作的。他们中的一些人使用图形界面应用程序生成HTML,好的设计师会使用文本编辑器。但大多数人不想处理比简单模板更复杂的HTML,因为那是他们熟悉的。

你需要理解的是,网页的发展过程中,HTTP和HTML最初并不是为了今天的用途而设计的。而且主要的浏览器经常会出现问题。此外,你无法控制用户可用的功能——他们可能使用任何浏览器,可能有或没有Java、JavaScript、Flash等,且不同浏览器可能会有各种各样的bug。因此,直到最近几年,情况才稳定到人们可以在客户端使用一些不那么保守的功能。确保页面在可能的情况下优雅降级仍然是个好主意。一个通用的网页应该能在文本浏览器中使用,当然,很多类型的网页应用程序在这种有限的环境中是无法工作的。

HTML 5将会改变很多现状。但在大家都能安全地假设使用支持HTML 5的浏览器之前,还需要很长时间,更长的时间才能假设每个人都在使用完全实现HTML 5的浏览器。无论如何,我建议你关注一些不太显眼的项目,比如Seaside。现在有很多实验在进行中。但网络一直是一个对这种事情来说很艰难的环境。

撰写回答