VS2005和VS2008做的项目有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2005和VS2008做的项目有啥区别相关的知识,希望对你有一定的参考价值。
除了.NET一个是2.0一个是3.5外,主要说说项目和工程的区别;
例如:用VS2005设计的项目该如何导入到VS2008中,导入时需要转换升级,这是不可逆的,当VS2008修改后,VS2005还能正常使用此项目吗?怎样才能让VS2005和VS2008共同开发项目呢?
机子上装得VS2008,但是接到的源码是VS2005做的,如果直接用VS2008打开会提示升级转换,导致以后不能再用VS2005编写执行(大概是这个意思);我想问一下,是不是可以设置一下,然后用VS2008做VS2005的项目。即,使用VS2008和VS2005共同开发项目。希望给出具体设置方法!(是不是只要修改一下编译方式,把3.5设成2.0就OK了)真的是不想卸了2008再换成2005……
VS 终於可以支援巢状 Master Page 的 WYSIWYG 设计了!我不知道有多少人曾经为了这个原因而减少或避免巢状 Master Page 的使用(我是其中之一)。VS2008 终於支援这个本来就应该有的功能,相信能在某一程度上改变大家的设计习惯.
其次,VS2008提供了 CSS 的即时编辑和套用的功能。用过 DreamWeaver 的人或许了解那是什麼意思。不过实际上我觉得 VS2008对 CSS 的支援感觉起来比 DreamWeaver 强大一点。
此外,VS2008 还提供了和 FrontPage/DreamWeaver 一样的 Split View,也就是可以开一个分割视窗,同时看到设计画面和原始码。我想这个功能在拉画面和设计前端页面时非常有帮助。
2. 支援对 JavaScript 的除错与 Intelisence
随著 Ajax 的风行,客户端程式设计也逐渐受到重视。我还记得多年前在 VS2005 上市前的一场 MVP 线上会议中,我向美国微软的开发经理问到会不会支援 JavaScript 的 Intelisense,答案是不会时,心里有多麼的失望。但晚到总比不到好,我认为这个功能的加入,一定能让所有网站开发者同感高兴。
3. Multi-targeting 功能
第一次看到这个新名词可能会另人有点摸不著头绪,像我还以为是一个 HyperLink 控制项可以一次把网页开到 _blank 和 _top。其实跟那个一点关系都没有,而是让你可以选择新的专案到底是要支援 .Net 2.0 / 3.0 还是 3.5。不管你选择哪一种,VS2008 会根据你的选择提供对应的 Intelisense、控制项和其它功能。但不管你指定哪一个版本,并不会让 VS2008 的基本功能回到 VS2005。换句话说,上面提到的像 JavaScript 除错等新功能都仍然可用。
4. 内建 Ajax,不需另外安装
5. 加入两个新的资料控制项:ListView 和 DataPager
6. 内含 LINQ
VS 2008将支持嵌套母版页面
ASP.NET 2.0种最引人称道的一项新特性就是母版页面(Master Page)。母版页面将作为网站的风格模板,允许我们很容易地统一整站的样式。不过VS 2005在对其支持方面做得却并不算好——它无法支持嵌套的母版页面。
对于那些拥有超过一种布局的大型网站来说,嵌套母版页面非常有用。否则开发者就必须手工协调每个母版页面,以便让其中的公共内容保持(例如横幅广告和版权信息等)一致。
而事实上,ASP.NET 2.0早就内建了对嵌套母版页面的支持。不过在Visual Studio 2005集成开发环境中,这个特性却一直无法使用。好在Visual Studio 2008终于对其添加了支持,开发者很容易即可切换到这种编程模型中,同时也不必担心失去任何IDE内建的辅助支持。
需要注意的还有,因为嵌套母版页面的功能内建在ASP.NET 2.0中,所以开发者无须在产品服务器上部署.NET 3.5,只要确保项目在.NET 2.0中编译即可。
Visual Studio 2008 十大新功能
No.1 代码中插入图片,而且它可以被Notepad进行编辑?
是神话么,不是。它实际上是在注释中加入了另一个标签,其标签指向当前解决方案的的一个图片链接正如下面的样子
/// <img> ref = /img/img01.gif </img>
很好,它的确可以被NotePad进行编辑。为什么要供这个功能? 呵呵,当你维护一段代码时,你首先是想是了解它是如何来组织程序的,当然你可以通过文字描述,类视图等等来了解,或者也是我们常用的写一个说明文档,然后放入另一个DOC的目录,然后过了一两年,你,噢不是你,是你现在的手下发现找不到那个文档了!文档中插入图片,一目了然。 其实类似的功能还有几个,象/// <docfile> </docfile>
No.2 完美的代码段编辑器
我已经很烦写#region之类的东东了,在VS2008中如果你想要对一个函数进行具体编码你只需要按快捷键就可以进入代码段编辑器,其实早在古老的VB6.0中就有的,只是它还是在同一个窗口里,但是这次有点不一样,它是另个一个窗口。现在有两个窗口了,一个全部代码的窗口,还有一个是本函数的窗口,而且它是浮动的,下面的窗口也可以进行滚动。
所谓完美,当然不只是这个功能,它还包括相当好的注释编辑,以及代码自动生成,呵呵还有微软内部的类似源代码,居然还是中文的,呵呵。
No.3 兼容linux平台检查
这个特性并不是微软主动想要来做的,没办法,市场逼得他这样做。一帮高手在linux下推出了linux平台下的.net环境,呵呵,而且居然形成了标准,MS坐不住了。比尔在一个星期一的早晨把VS2008的项目经理NB007叫去要他想点办法,于是NB007又把他手下这帮人叫来开了个会,据说那天是2007-4-1日,因此这项检查在微软内部的名称叫"愚人节标准",在MS对外的名称叫做 CLX兼容性检查,对了在这里你不能使用System.windows.forms这个命名空间,你必须使用System.Xnix.Forms,它可以在多种Unix/Linux下使用。
而且基于这个特点,你可以在Windows平台下编辑你的代码,然后可以模拟Unix/Linux平台运行,不过好象还有点小bug,总是在最后弹出一个对话框:
“Warn: M$建议你在Windows下运行此应用程序!"
No.4 即时交流功能
其实这个功能是在企业版才有的,而且只局限于局域网内,它需要一个Server中心。企业版在其他国家都比较贵,而且这个功能需要另外付费1000$。在中国,企业版只要五元,这个功能是免费赠送的,而且可以在Internet上使用。据说是一个0day组织用ILDASM改动了一些代码。
它的作用其实就是当你在写代码时可以和朋友讨论问题,当然你也可以选择隐身!
No.5 更漂亮的界面,透明,真正的3D
如果你要发挥VS2008的界面效果,一定要安装Window Vista,并且需要Patch3,在VS2005及以前的版本中,界面只是好看而已,这个版本体现了Window 界面项目组的专业水平,以前可以叫浮动 的窗口,现在叫悬空,效果你安装后就知道了。对了,还有一点点小要求,MS推荐配置
CPU :PⅦ 4.0T(群核处理器)
内存:64 T
硬盘:128T
No.6 大幅提升的Visio功能
现在你不需要完全用手写代码,只需要在Visio中画一个一个的类,对象,关系图等等。然后选一定一个生成模板,就可以基本生成一个应用程序(因为这个原因,众多的软件学院添加了计算机制图这门课程,还不是选修)。其实我是比较喜欢这个功能的,不过有一点点小问题,生成的代码性能不是很好,需要手工进行优化,MS在它的网站上宣告在下一个版本中它会提供更多的应用模板,分类更加细致等等。
No.7 超多的专业控件
以前VS跟Delphi(现在它叫 Siphi,由Sun,IBM联合开发)比,总是它的控件不够,这次MS花了血本制作了上千个控件,象ComboBox就有多达三十多种的变种控件,并且你可以上MS的网站检索 更多的控件,你也可以向MS提交你自已写的控件,并且向世界共享。
N0.8 内嵌汇编
其实这算不上一个很好的功能,不过有人需要,也就提供了。你可以嵌入IL代码或者本地汇编代码,不过如果嵌入了本地汇编代码,C#4.2会提出一个编译警告。
asm:IL .... asm:Native ...
No.9 强大的配套工具
多种功能强大的工具,包括内存图形器,压力测试工具,性能分析器,还有一个Java2CSharp的工具,能够转换95%以上的代码。 对了,终于MS推出了自已的混淆器,功能强大,但是MS说明在某些场合可能出错。
No.10 命令行爱好者的福音
如果你实在喜欢命令行,喜欢写批处理,这个也会令你激动不已。因为微软里面也有一帮古怪的老家伙,不喜欢集成环境,而一定要用DOS下的Edit来编写一个Make文件,然后写一个批处理,我是不喜欢DOS的,因此没用过。不过可信的是在VS2008测试版发 行的头个晚上一个叫 EditCrazy.Dos的家伙把他用汇编写的一个可以方便选择编译的选项的工具MakeTemplate.com放入了光盘的母版中。
VS2008 Web开发使用的新特性
.NET Framwork 3.5与Visual Studio 2008 包含很多新特性。AJAX的Web开发人员支持与综合查询语言(LINQ)是其中最重要的更新。此外还包含一些新的服务器端控件以及客户端对象库。Visual Studio对JavaScript也有了完整的只能感知。
下面主要是描述ASP.NET与Web开发Visual Studio的新特性。
1、 ASP.NET的新特性
· 新服务器控件、类型与客户端脚本库的推出方便开发人员开发AJAX类型的的Web应用程序。
· 扩展的服务器安全认证,角色管理,以及可被销毁的profile services。(不知道这句翻译的对不对)
· 推出新的ListView数据控件以支持更好的界面自定义。
· 提供LinqDataSource控件作为Linq与服务器控件的数据接口。
· 新的merge工具(Aspnet_merge.exe)使我们更好的发布应用程序。
· 新提供的Framwork3.5与IIS7.0集成。
AJAX支持.现在你可以根据你的需要方便的创建服务器或客户端或者两者结合的Web页面。
· 扩展AJAX的服务器控件,包含ScriptManager、 UpdatePanel,、UpdateProgress, 和 Timer controls。这些控件帮助我们使用少量的JavaScript创建类似与富客户端应用的页面异步刷新。
· 不受浏览器限制的支持客户端对象应用的AJAX库。除此之外这个库支持你开发自定义的客户端组件。
· 服务器控件可以访问公开的自定义客户端组件的事件和属性通过实现IExtenderControl 或IScriptControl 接口。
· 支持客户端脚本的全球化和本地化。
现在.NET支持我们简单的实现界面的局部刷新,以避免高价的全页面刷新。我们只需要将现有的控件用UpdatePanel控件包裹起来。页面回调可以在UpdatePanel内变为异步的并且刷新这部分被包裹的页面,以此提供流畅的用户体验。同时我们还可以使用UpdateProgress来显示局部页面的更新进程。
Web 服务和 Application 服务.NET Framwork 3.5 允许我们创建基于ASP.NET的WEB服务(.asmx)和基于WCF的Web服务供使用了AJAX库的Web页面的客户端脚本调用我们还可以调用包含在Web服务内部的的服务器Window服务。
You can also call server-based application services that are exposed as Web services, which includes forms authentication, roles management, and profiles. These application services can be consumed in WCF-compatible applications, which includes AJAX-enabled Web pages and Window Forms clients. As a result, applications that are built with these ASP.NET or WCF technologies can share information that is made available by application services. For more information
ListView 数据控件 Control这个控件集成了很多现在控件的特性,类似与DataList 和 Repeater 控件。不同的是ListView支持编辑,插入,删除操作。翻页功能则通过新的DataPager控件来提供。
ListView控件通过模板与样式提供很好的自定义特性来显示控件界面。跟Repeater, DataList, 和 FormView 控件一样,模板都不是预定义好的界面外观。
DataPager控件DataPager控件用来为实现了IPageableItemContainer接口的控件提供分页(像ListView控件)。我们可以来指定NumericPagerField对象,NextPreviousPagerField对象,来实现翻页方式。同样的我们使用TemplatePagerField对象来自定义分页界面。
LinqDataSource控件LinqDataSource控件用来暴露Linq的数据结构体系给数据控件。当我们使用LINQ来建立数据对象模型的时候可以使用该控件。使用该控件我们可以简单的来执行数据操作。使用LinqDataSource控件比我们使用SqlDataSource与ObjectDataSource操作数据需要编写更少的代码。使用LinqDataSource我们可以方便的创建一个与数据库或数据集合的数据连接。通过LINQ模型我们可以详细指定显示、筛选、排序和分组的数据的方式当。当使用一个SQL数据源的时候我们不需要去写SQL脚本来执行获取、插入、删除、更新操作。LinqDataSource类提供一个事件模型支持我们自定义显示更新事件。
ASP.NET Merge 工具ASP.NET merge tool (Aspnet_merge.exe)帮助我们管理程序集。这个工具发布时间跟Visual Studio 2005一样早。我们可以使用它为这个站点、每一个Web站点或站点的一部分创建程序集。
LINQ在开发中的地位?
DLINQ *.dbml文件该属于哪一层,的确Linq to Sql存在问题,DLINQ中,虽然可以在语言层级定义查询逻辑。但是依然没有将数据库持久化数据映射为领域对象,所以还是一种针对数据库的编程模型。
LINQ是微软将在C# 3.0中将推出的语言集成查询技术,许多人也将LINQ叫做微软的ORM。LINQ不仅仅针对关系数据库,它只是解决一个问题Data!=Object,也就是说他解决的就是Data=Object.。作为底层框架,可以为ORM实现提供更强大的基础平台。在Linq之前在.net领域最流行的框架就是Nhibernate。是不是在LINQ之后Nhibernate就要消失呢?答案自然是否定的。
有个帖子Microsoft LINQ + NHibernate:
在那篇帖子中,作者列举了三大原因:
在DLINQ中,虽然可以在语言层级定义查询逻辑。但是依然没有将数据库持久化数据映射为领域对象,所以还是一种针对数据库的编程模型。而Nhibernate则可以直接将关系数据映射为领域模型,这是DLINQ的主要问题。
DLINQ不支持继承类的映射。
Nhibernate已经提供了许多帮助进行领域面向对象建模的特征。而DLINQ目前还无法拥有。
而LINQ + NHibernate的好处则是:
类型安全的查询,并且能使用智能提示功能!这样可以不用学习HQL了。
能获得所有NHibernate所拥有的能力。
假如你已经从数据库中查询出了一个数据集,那么可以使用LINQ来进行过滤,排序和分页操作。
从原理上来说,DLINQ是将Lambda查询表达式解析为SQL语句:DLINQ => SQL,而NHLINQ则是将Lambda查询表达式解析为HQL语句:NHLINQ => HQL。
开源社区的智慧是无穷的,并且和微软也不是你死我活的关系。反倒应该是一种互相补充的关系。开源社区可以做一个.net framework这样大的东西Mono,开源社区的这些闪烁的创造性思维火花也为沉闷的软件开发带来了很多灵气。也保持了我们这些没有多少机会能做创造性工作的普通程序员的一些创作热情!
LINQ没有提供在多层应用程序中应用的功能,这一个功能可以通过序列化Expression Tree 来解决,Expression Tree 就可以通过Remoting或者WCF发布出去,正好有一个开源项目解决这个问题:http://www.codeplex.com/interlinq。这个项目也包含着上面所说的NHibernate.Linq. net framework 2.0,3.0与3.5三个版本之间关系如下:
.net framework 2.0 = CLR 2.0 + FCL(framework class library)
.net framework 3.0 = .net framework 2.0 + SP1 + WPF + WCF + WF + CardSpace
.net framework 3.5 = ..net framework 3.0 + SP2 + new compiler
这三个版本framework的CLR都是2.0,因此,asp.net的runtime还是只有1.1和2.0,像Linq这些新功能其实只是用新的编译器加上一些新的类库来实现的,3.5版本并没有对CLR做大的升级。
VS2008支持在2.0,3.0和3.5三种版本下开发项目,VS2005的项目可以平稳的升到VS2008上,在VS2008下做VS2005的项目,用的编译器和类库同VS2005都是一样的,但是提供了更好的开发环境。 参考技术A 做些小项目应该没什么大的区别 参考技术B 两者差别不是很大,2008功能上好一点 参考技术C 不行的 我这里有版本转换器 需要我邮件你 低版本的打开高版本的需要改写一段代码 版本转换器帮你自动转换
deno vs ts-node:有啥区别
【中文标题】deno vs ts-node:有啥区别【英文标题】:deno vs ts-node : what's the differencedeno vs ts-node:有什么区别 【发布时间】:2019-04-24 23:17:00 【问题描述】:我正在做一个相对较大的打字稿项目,我正在使用ts-node
来运行节点测试和示例。据我了解,ts-node
会将ts
文件编译为js
文件并执行。
最近我听说deno
,这是一个打字稿运行时。我在 typescript 中尝试了一些示例,这些示例使用 ts-node
。我用deno
运行了这个例子,控制台打印了很多编译信息,然后执行代码。后来我发现/username/.deno
中有缓存文件。我不觉得deno
的执行速度比ts-node
快
似乎deno
和ts-node
都将使用缓存进行编译和运行。它们有什么区别?
【问题讨论】:
预计在遥远的将来会在 Deno 中进行优化。 【参考方案1】:TL;DR
Deno 更像 Node 而不是 ts-node,即它是一个基于 V8 的 JS 运行时。与 Node 不同,Deno 包含 TypeScript 编译器。 Deno 不属于 Node/npm 生态系统。
ts-node 另一方面是一个 Node.js 模块,它使用 TypeScript 编译器来转换 TypeScript 代码并在 Node 中运行它。 ts-node 是 Node/npm 生态系统的一部分。
Deno 速度很快。见下文。
Deno 和 ts 节点的相似之处
它们都运行 TypeScript 代码 它们都在 Linux、Mac 和 Windows 上运行(但 ts-node 也在 SmartOS 和 AIX 上) 他们都使用 Google V8 JavaScript 引擎(ts-node via node 它在后台使用)Deno 和 ts 节点的区别
ts 节点
ts-node 是一个 Node.js 模块 它是用 Node.js 编写的 它是通过 npm 安装的 它使用 TypeScript 编译器作为对等依赖项 它会安装自己的依赖项 作为运行时,它使用使用 libuv 用 C++ 编写的 Node德诺
deno 是一个独立的可执行文件 它不使用 Node.js 它作为单个二进制文件分发 它包含作为 V8 快照的 TypeScript 编译器 它没有依赖关系 它是使用 Tokio 用 Rust 编写的运行时成熟度
ts 节点
ts-node 依赖于 Node.js 运行时,所以在这里包含它是公平的:
Node.js 于 2009 年发布,最新 LTS 版本为 14.15.0 npm 于 2010 年发布,Node LTS 中包含的版本为 6.14.8 ts-node 2015年发布,最新版本9.0.0德诺
Deno 本身就是一个运行时,所以它不使用其他任何东西:
Deno于2018年发布,最新版本为1.5.2check latest version here人气
GitHub:
nodejs/node TypeStrong/ts-node denoland/deno堆栈溢出:
Questions tagged 'node.js': 358,962 Questions tagged 'typescript': 132,043 Questions tagged 'ts-node': 199 Questions tagged 'deno':320库
ts 节点
您可以使用 npm 上所有可用的 Node 库
(目前 npm 上有 955,263 个包,不是全部用于 Node,但仍然很多)
在 npm 上可用的 Node 库,即使它们最初是用 TypeScript 编写的,通常也会以转换为 JavaScript 的形式发布,并在 *.d.ts
文件中添加额外的类型定义(包含在 npm 包中或与 @987654342 分开安装) @命名空间)。
德诺
https://deno.land/x/ 上有 1256 个第三方模块,https://github.com/denolib/awesome-deno#modules 上有 56 个库和工具(我没有检查是否都相同)
Deno 库只是 TypeScript 文件。
安装区别
ts 节点
你安装 Node.js https://nodejs.org/en/download/ Mac 和 Linux 上的 v10(当前 LTS)在 4500 个文件中约为 65MB 您安装typescript
和ts-node
及其依赖项npm
npm install typescript ts-node
它安装了 10 个 npm 模块并将 44MB 的 212 个文件放入 node_modules
德诺
您下载单个二进制文件 https://github.com/denoland/deno/releases v0.3.6 的未压缩二进制文件在 Mac 和 Linux 上约为 47MB,在 Windows 上约为 41MB您的代码差异
ts 节点
您的代码的工作方式与使用tsc
转译并使用 node
运行时相同(因为它在后台)
您可以使用 Node API
您可以使用所有内置的 Node 模块
您可以使用来自 npm 的模块
您可以使用相对路径import
文件(通常不带.ts
后缀)
您可以在node_modules
中使用npm
(或yarn
)安装的依赖项import
德诺
您的代码与在 Node 中的工作方式不同(因为它不是使用 Node 运行的) 你使用 Deno API 您可以使用 Deno 内置模块 您可以使用其他可用的 Deno 模块 您可以使用相对路径import
文件(始终使用.ts
后缀!)
您可以直接从网络上import
网址(不需要npm install
)
示例
这是一个发布使用 TypeScript 编写的最小库并使用它的示例。
使用 Node 和 ts-node 创建和使用 TypeScript 库
这就是我现在正在做的一个示例项目:
https://github.com/rsp/node-ts-hello
创建库:
-
在 npm 上找到一个免费的名称(不再足够,见下文)
在 GitHub 上创建存储库
用
npm init
创建package.json
使用npm install typescript
安装 TypeScript 编译器
决定是否将 package-lock.json
保留在 repo 中(有利有弊)
创建一个src
目录,用于保存 TypeScript 文件
将hello.ts
添加到src
添加tsconfig.json
文件并确保:
"src/**/*"
添加到"include"
将依赖项和您自己的类型添加到"paths"
添加"outDir": "dist"
将JS文件放在已知位置
将dist
目录添加到.gitignore
,这样编译后的文件就不会在git中了
在.gitignore
中添加相同的内容,但在.npmignore
中没有 dist
(否则您将不会发布最重要的文件,请参见下文)
添加"declaration": true
,这样您就可以生成*.d.ts
文件
-
在
package.json
中添加"main": "dist/hello.js"
(注意“js”后缀)
在package.json
中添加"types": "dist/hello.d.ts"
(注意“ts”后缀)
将"build": "tsc"
添加到package.json
(注意冗余文件,见下文)
使用npm login
登录(您不应该一直登录 - 请参阅:Now Pushing Malware: NPM package dev logins slurped by hacked tool popular with coders)
用npm run build
编译项目
使用npm publish
发布包
npm ERR! publish Failed PUT 401
时,您需要使用npm login
登录
当您收到npm ERR! publish Failed PUT 403
时,您的包可能“与现有包太相似” - 尝试在 package.json 中重命名它,重命名 repo 并将所有喜欢的内容更新为自述文件,发布它。在 package.json 中
-
使用
npm logout
从 npm 注销
请查看您的 ~/.npmrc
并确保您没有留下类似的东西:
//registry.npmjs.org/:_authToken=...
在其他项目中使用库ts-node
-
创建一个新目录
用
npm init
创建一个package.json
文件
-
使用
npm install node-ts-hello
安装我们的库
可选安装带有npm install typescript ts-node
的ts-node
-
添加
hi.ts
文件以导入我们的库:
import hello from 'node-ts-hello';
hello('TS');
-
使用
npx ts-node hi.ts
(如果 ts-node 安装在本地)或ts-node hi.ts
(如果 ts-node 安装在全局)运行它
潜在问题:我稍微简化了上述内容,我创建该库的实际过程描述为here。
使用 Deno 创建和使用 TypeScript 库
这就是我现在正在做的一个示例项目:
https://github.com/rsp/deno-hello
创建库:
-
在 GitHub 上创建存储库
将
hello.ts
放入仓库
使用库:
-
创建一个文件
hi.ts
,内容如下:
import hello from 'https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts';
hello('TS');
-
使用
deno run hi.ts
运行您的程序
第一次运行将打印:
$ deno run hi.ts
Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.ts
Downloading https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts
Compiling https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts
Hello, TS!
第二次运行:
$ deno run hi.ts
Hello, TS!
如果您更改hi.ts
,它将被重新编译,但依赖项不会再次下载:
$ deno run hi.ts
Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.ts
Hello, TS!
(请注意,touch hi.ts
不够,您需要进行实际更改,因为 Deno 会检查文件校验和,而不是时间戳。)
速度
ts 节点
从上面的例子中我们hi.ts
的ts-node版本的启动速度:
$ time npx ts-node hi.ts
Hello, TS!
real 0m0.904s
user 0m1.300s
sys 0m0.083s
这是在已安装依赖项并运行多次以确保所有缓存正常工作之后。 差不多一秒钟。
德诺
从上面的例子中启动我们hi.ts
的Deno版本的速度:
$ time deno run hi.ts
Hello, TS!
real 0m0.028s
user 0m0.010s
sys 0m0.015s
这也是在已安装依赖项并运行多次以确保所有缓存正常运行之后。
速度提升超过 32 倍。
总结
应该将 Deno 与 Node 进行比较,而不是与 ts-node
进行比较,因为 Deno 是一个全新的运行时,而 ts-node
是 Node 的一个模块,因此使用 ts-node
运行的程序确实使用了 Node 运行时。
这是一个非常年轻的项目,但已经获得了很大的关注。它没有 Node 那么多的文档或库,但这意味着它可能是参与的最佳时机,因为当它变得更受欢迎时,我认为它会出于许多超出此答案范围的原因,人们市场将需要已经有经验的人,就像使用 Node 一样。
程序启动速度已经非常令人印象深刻,我期待那里有更多改进。
使用单个文件而不需要像 package.json
或 node_modules
这样的配置的开发速度,以及直接从 URL 导入依赖项的可能性(比如在前端),这将使得以不同的方式工作成为可能用于最终用户代码和库。我们将看到这一切在实践中是如何运作的,但它看起来已经很有希望了。
【讨论】:
Deno 是节点不知道的。 你对 2020 年的 deno 有什么看法?会是下一个 Node/Go 吗? 所以你通过http请求导入这个import hello from 'https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts';
??疯狂的。版本控制呢?我的意思是他们可以在链接中添加/v.1.1.1
,但您不认为这效率低吗?
ohh 这里说deno.land/std/manual.md#comparison-to-nodejs 你可以使用文件路径。
“程序的启动速度已经非常令人印象深刻,我期待那里有更多的改进。”为什么你这么想?添加功能和修复错误通常会增加代码的复杂性,并使代码保持快速变得更加困难。此外,100ms以下的启动时间已经相当不错了,我怀疑他们会花很多时间来让它更快。由于层数较少,它可能仍会比 ts-node 更快,但我预计它不会比现在更快。【参考方案2】:
ts-node 基于 Node,而 Deno 是一个完全不同的全新服务器端运行时,在 API、模块系统、安全模型等方面进行了设计更改(更好地反映了 ES6 后的发展)。此外,TypeScript 编译器直接存在于单个 Deno 可执行文件中(通过 V8 快照),因此应该具有更短的启动时间。
【讨论】:
【参考方案3】:我认为 @rsp 已经发布了与 Deno 相关的详细信息。
我想在这里放一些关键点,以便其他人可以轻松地看到关键差异:
语言- Deno 基于 RUST 语言 - Rust 是一种多范式编程语言,专注于性能和安全,尤其是安全并发。 Rust 在语法上类似于 C++,但在不使用垃圾收集的情况下提供内存安全
运行时- Deno 也依赖于 V8 引擎。
安全性 — Node.js 的一个常见批评是,一旦节点应用程序运行,它就可以轻松访问文件系统或网络等。 虽然 Deno 要求用户允许使用网络、文件系统等资源。
NPM?- Deno 根本不依赖 NPM,而是通过 URL 导入我们的库。
例子:
> import serve from "https://deno.land/std/http/server.ts";
我们要使用的所有库都是先下载然后缓存的。
Window 对象- 好消息是,现在我们可以在 Deno 中使用 Node.js 中不可用的 Window 对象。 Window Object 有很多丰富的 API,对 Deno 的开发有很大帮助。 导入- Deno 使用 ES6 导入将模块注入到文件中。 Typescript- Deno 完全支持 typescript。【讨论】:
以上是关于VS2005和VS2008做的项目有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
VS2008(C++)-控制台项目中LNK2005错误的问题