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 ...
随机推荐
- selenium打开指定Chrome账号
selenium打开指定Chrome账号 获取User Data路径 打开目标Chrome,在搜索栏输入chrome://version,找到"个人资料路径". 这里获取到的路径为 ...
- openoffice将word转pdf中文乱码或消失的坑
将windows系统下的中文字体文件(C:\Windows\Fonts),放到/usr/share/fonts下,必须重启openoffice.
- Adobe Xd 练习
作业要求: 我的work: 下载练习: 2020_3/work.xd 参考教程: https://www.youtube.com/watch?v=dbpGJU4WL1U
- Bootstrap Blazor 组件库 Row 布局组件(栅格系统)
原文链接:https://www.cnblogs.com/ysmc/p/16133351.html 在 Bootstrap 中,栅格相信大家都很熟悉,简直就是布局神器啊,Bootstrap Blazo ...
- vue 点击事件唤醒QQ
window.location.href = 'http://wpa.qq.com/msgrd?v=3&uin=QQ号' window.location.href = 'http://wpa. ...
- JavaScript基础第02天笔记
JavaScript基础第02天 1 - 运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号. JavaScript中常用 ...
- JavaScript深入理解系列:call与apply
定义 call和apply:函数调动call()方法在执行的时候,函数的里面的this会指向第一个参数值,除第一个参数值后面的若干支都是传进该函数,简而言之就是改变函数运行时的this指向. 使用示例 ...
- 基于pgrouting的路径规划处理
对于GIS业务来说,路径规划是非常基础的一个业务,一般公司如果处理,都会直接选择调用已经成熟的第三方的接口,比如高德.百度等.当然其实路径规划的算法非常多,像比较著名的Dijkstra.A*算法等.当 ...
- python基础练习题(题目 打印出杨辉三角形前十行。)
day38 --------------------------------------------------------------- 实例061:杨辉三角 题目 打印出杨辉三角形前十行. 分析: ...
- 基于全志A40i开发板——Linux-RT内核应用开发教程(1)
目录 1 Linux-RT内核简介 3 2 Linux系统实时性测试 3 3 rt_gpio_ctrl案例 10 4 rt_input案例 15 本文为Linux-RT内核应用开发教程的第一章节--L ...