我对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已老,尚能饭否?的更多相关文章

  1. ZBlog你选择PHP还是ASP?

    最近趁着空闲玩了一下zblog,对于很多第一次接触zblog的博主大多都会问zblog是PHP好还是ASP好?我们应该如何选择?其实,对于这个问题我也不是很懂,我个人比较倾向于PHP.今天我就整理一下 ...

  2. Delphi Web开发连载 --ThinkDelphi (序)

    如果把Delphi比作男人,那他曾经独步天下,笑傲江湖过: 如果把Delphi比作女子,那她曾经貌美如花,倾国倾城过! 但那只是历史,那只是曾经, 弹指一挥间,Delphi却似乎英雄迟暮,美人已老.. ...

  3. 跟我学CMD实战系列之二 ——数据压缩备份

    需求:每天下班时,将本地硬盘上的projects目录压缩为rar文件,文件名中必须含有当天日期信息,例如projects_20070902.rar. 分析:1. 压缩可以调用WinRAR的命令行版本r ...

  4. 从idea到ipo

    **************************************************************************************************** ...

  5. Team Foundation Server 2013 with Update 3 Install LOG

    [Info   @10:14:58.155] ====================================================================[Info   @ ...

  6. WebLogic写的网络爬虫

    一.前言 最近因为有爬一些招聘网站的招聘信息的需要,而我之前也只是知道有"网络爬虫"这个神奇的名词,具体是什么.用什么实现.什么原理.如何实现比较好都不清楚,因此最近大致研究了一下 ...

  7. [one day one question] nodejs require 缓存,无法检测文件变化

    问题描述: nodejs require 缓存,无法检测文件变化,当文件require引入后,当文件发生变动后即使再次使用require,返回的依然是第一次引入的文件内容,这怎么破? 解决方案: de ...

  8. [one day one question] Vue单页面应用如何保证F5强刷不清空数据

    问题描述: Vue单页面用按F5强刷,数据就恢复初始了,这怎么破? 解决方案: store.subscribe((mutation, state) => { sessionStorage.set ...

  9. [one day one question] webpack打包压缩 ES6 js、.vue报错

    问题描述: 报错: ERROR in js/test.js from UglifyJs Unexpected token punc ?(?, expected punc ?:? [js/test.js ...

随机推荐

  1. 在uniapp的节流函数

    为了解决同一个人连续多次的点击同一个事件会造成的问题,js解决的方法有防抖和节流,防抖和节流都是在一定的时间上控制次数 节流是在定义的时间内连续点击多次事件,只会执行一次 在uniapp的工具文件夹u ...

  2. Hyperledger Fabric的test-network启动过程Bash源码详解

    前言 在基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例中,我们已经完成了Fabric 2.4的环境搭建及fabric-samples/test-network官 ...

  3. docker方式安装zabbix

    这个示例展现了如何运行支持MySQL数据库的Zabbix server,基于Nginx web服务器运行Zabbix web接口,以及Zabbix Java gateway. 1. 启动一个空的MyS ...

  4. python基础练习题(题目 回文数)

    day21 --------------------------------------------------------------- 实例030:回文数 题目 一个5位数,判断它是不是回文数.即 ...

  5. marginStart marginEnd就关于上述两个用法展开讨论

    在我还在手动调整两个控件距离时,第一次见识到了marginStart marginEnd两个用法, 但是,只知道它俩能够调整控件距离,但是不知道具体用法,老师也没细说,就这样开启了我对于这两个用法&q ...

  6. 上市公司招聘:今天国际直聘DBA

    今天国际一家专业的智慧物流·智能制造系统综合解决方案提供商,为生产制造.流通配送企业提供智慧物流·智能制造系统 的规划设计.系统集成.软件开发.设备定制.电控系统开发.现场安装调试.客户培训和售后服务 ...

  7. 推荐系统 TOP K 评价指标

    目录 符号说明 示例数据 一.Hit Rate 二.Recall 三.NDCG 符号说明 \(top\_k\): 当前用户预测分最高的k个items,预测分由高到低排序 $pos$: 当前用户实际点击 ...

  8. UML 类之间的关系

    统一建模语言(Unified Modeling Language,UML) 作用:对软件系统进行说明 如果说软件系统是一本小说的话,那么 UML 就是将小说动漫化. 也许你看过这本小说,但是时间一长, ...

  9. vue-mobile-template 前端开源框架

    开源项目的由来 某天因公司业务需求,想寻找一款H5移动端的模板进行二次开发.但搜遍整个HUB都没法找到合适的空模板进行二次开发,所以心血来潮,于是有了 vue-mobile-template . 介绍 ...

  10. AcWing-3167. 星星还是树 -c++题解(模拟退火)

    ​ 在二维平面上有 n 个点,第 i 个点的坐标为 (xi,yi).请你找出一个点,使得该点到这 n个点的距离之和最小.该点可以选择在平面中的任意位置,甚至与这 n个点的位置重合. 输入格式 第一行包 ...