ASP已老,尚能饭否?
我对ASP的感情,跟大海一样深。我用它实现了第一个动态网页,也用它做了毕业设计,毕业设计的名字是《毕业设计管理系统》(是不是有点绕)。在 PHP 和 ASP.NET、Java 高歌猛进的今天,很少程序员还在使用ASP了。
1996年微软公司推出 ASP(Active Server Page),很快成为中小型网站开发的首选。许多企业的门户网站和中小型新闻网站都采用基于ASP开发的内容管理系统。用友软件公司早期几款安身立命的ERP软件,也是采用ASP开发。
2000年微软发布第一个 .NET Framework Beta 版本,在 2003 年升级到 v1.1,推出了 ASP.NET,完善了桌面应用开发和 Web 开发。ASP.NET支持用 C# 或者 VB.NET 开发 Web 应用。无论是底层结构还是开发模式,都和ASP完全不一样。
ASP最大的特点是简单易学,我们来看一个提交表单的代码示例:
<html>
<body>
<form action="demo.asp" method="post">
Your name: <input type="text" name="username" size="20" />
<input type="submit" value="Submit" />
</form>
<%
dim username
username = Request.Form("username")
Response.Write("How are you today" & username)
%>
</body>
</html>
从代码示例可以看到,<%%>
里面是用VB脚本编写的业务逻辑,嵌入在页面的HTML代码中中,倒是一目了然。这样组织代码的坏处也很明显,没有分离页面和逻辑,一旦业务变复杂,很难组织好模块,代码可读性急剧下降。
ASP扩展功能也是个麻烦事。ASP的VB脚本能够直接调用的系统接口非常有限,必须在服务器上安装额外的COM组件才能扩展功能,COM组件通常采用C++开发。相比之下,ASP.NET或者Java平台提供了足够的API,采用C#或者Java就能实现功能,并且可以随着应用程序一起打包上线。
扩展组件和业务代码分离会造成两个问题:ASP程序员要额外学习COM组件开发;服务器部署COM组件,增加运维成本。与ASP同时代的PHP也有类似的问题,但是它一直升级,已经孕育庞大的生态和解决方案,最终发展出PHP + Apache + MySQL的黄金组合,还有一大堆知名的网站如facebook、wordpress、wikipedia。
ASP也只能部署在Windows平台上,系统标配是Windows Server 系列和IIS。限制软件的运行平台,是微软一贯的作风。
曾经做毕业设计的时候,我对ASP爱不释手,也痛骂其诟病。最近我看了一些Go和Rust语言的发展历史和编程资料,突然理解ASP的设计思路了。在当时的环境下,微软作为一个商业公司在ASP上做出了最优的设计,理由如下:
- 简单易学。简单就是生产力。
- 功能简单。定位小型网站,完全够用。
- 复用COM组件技术、VB语言。这两者比ASP还早出现。
- 运行环境绑定Windows,符合商业利益。
世上只有两种编程语言:一种被人骂,一种没人用,每次看到技术社区讨论语言优劣的话题,我都直接划过不看。与其陷入语言优劣之争,不如多学习计算机基础和系统架构。
如果时光倒流,再回去做毕业设计,你会选择哪种语言呢?我会选择PHP,毕竟PHP是最好的语言。
COM:COM是component的缩写,微软提出的一种软件的组件对象模型,是关于如何建立组件以及组件之间进行交互的规范。
COM组件:由以Win32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。一个COM组件可以包含多个COM对象,一个COM对象又可以有多个接口。
COM对象:类似于C++语言中的类,类的每个实例代表一个COM,包括属性和方法。
Go:又称Golang,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go作为服务器编程言语,很适合处理日志、数据打包、虚拟机处理、文件体系、分布式体系、数据库代理、网络等方面。
Rust:Rust是一门系统编程语言,专注于安全 尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。
ASP已老,尚能饭否?的更多相关文章
- ZBlog你选择PHP还是ASP?
最近趁着空闲玩了一下zblog,对于很多第一次接触zblog的博主大多都会问zblog是PHP好还是ASP好?我们应该如何选择?其实,对于这个问题我也不是很懂,我个人比较倾向于PHP.今天我就整理一下 ...
- Delphi Web开发连载 --ThinkDelphi (序)
如果把Delphi比作男人,那他曾经独步天下,笑傲江湖过: 如果把Delphi比作女子,那她曾经貌美如花,倾国倾城过! 但那只是历史,那只是曾经, 弹指一挥间,Delphi却似乎英雄迟暮,美人已老.. ...
- 跟我学CMD实战系列之二 ——数据压缩备份
需求:每天下班时,将本地硬盘上的projects目录压缩为rar文件,文件名中必须含有当天日期信息,例如projects_20070902.rar. 分析:1. 压缩可以调用WinRAR的命令行版本r ...
- 从idea到ipo
**************************************************************************************************** ...
- Team Foundation Server 2013 with Update 3 Install LOG
[Info @10:14:58.155] ====================================================================[Info @ ...
- WebLogic写的网络爬虫
一.前言 最近因为有爬一些招聘网站的招聘信息的需要,而我之前也只是知道有"网络爬虫"这个神奇的名词,具体是什么.用什么实现.什么原理.如何实现比较好都不清楚,因此最近大致研究了一下 ...
- [one day one question] nodejs require 缓存,无法检测文件变化
问题描述: nodejs require 缓存,无法检测文件变化,当文件require引入后,当文件发生变动后即使再次使用require,返回的依然是第一次引入的文件内容,这怎么破? 解决方案: de ...
- [one day one question] Vue单页面应用如何保证F5强刷不清空数据
问题描述: Vue单页面用按F5强刷,数据就恢复初始了,这怎么破? 解决方案: store.subscribe((mutation, state) => { sessionStorage.set ...
- [one day one question] webpack打包压缩 ES6 js、.vue报错
问题描述: 报错: ERROR in js/test.js from UglifyJs Unexpected token punc ?(?, expected punc ?:? [js/test.js ...
随机推荐
- 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)
2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...
- python黑帽子(第三章)
Windows/Linux下包的嗅探 根据os.name判断操作系统 下面是os的源码 posix是Linux nt是Windows 在windows中需要管理员权限.linux中需要root权限 因 ...
- MySQL基础之写表(创建表)
我的博客 工具 市面上的SQL可视化工具不少,我一般常用的主要就是这两个. 当然,IDEA也是集成了数据库可视化功能的.除了这些,还有DBeaver.SQLyog等等. 我比较喜欢DataGrip,我 ...
- python跑机器学习时报错:Process finished with exit code -1073740791 (0xC0000409)
emmm...第二次遇到这个错误了,好好的好好的卷积神经网络突然就跑不起了.就弹出一堆信息也不报那行代码错了... 记录一下: 两次解决方法相同,删h5py包 Process finished wit ...
- Python抽象基类:ABC谢谢你,因为有你,温暖了四季!
Python抽象基类:ABC谢谢你,因为有你,温暖了四季! Python抽象基类:ABC谢谢你,因为有你,温暖了四季! 实例方法.类方法和静态方法 抽象类 具名元组 参考资料 最近阅读了<Pyt ...
- Python 函数进阶-递归函数
递归函数 什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数. 递归,递就是去,归就是回,递归就是一去一回的过程. 递归函数的条件 一般来说,递归需要边界条件,整个递归的结构 ...
- 红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广...
链接:https://reurl.cc/g8ke9X 红旗Linux桌面操作系统11将于1月10日开放预览版的下载,新版本具有良好的硬件兼容,支持多款国产自主CPU品牌,同时还具有丰富的外设支持及海量 ...
- 【ASP.NET Core】URL重写
今天老周和大伙伴们聊聊有关 Url Rewrite 的事情,翻译过来就是 URL 重写. 这里不得不提一下,URL重定向与重写的不同. 1.URL重定向是客户端(通常是浏览器)向服务器请求地址A,然后 ...
- 解决 youtube 片尾内容被遮挡
参考: https://www.pcdvd.com.tw/showthread.php?t=1137333 在 ublock 的自定义静态规则中加上这句话 www.youtube.com##.ytp- ...
- CentOS删除编译安装的Python3
编译安装Python3 # 下载 # wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz wget http://mirr ...