当前位置: 首页>行业 >

一起来聊聊关于WebIDE的实现 焦点关注

来源: 程序员客栈 | 时间: 2023-01-12 00:02:31 |

本期聊聊WebIDE的概念和在各种客户端的应用场景;一起探讨在社区里比较主流的WebIDE实现的方法模式与对比,一起来了解WebContainer思路下的WebIDE。


【资料图】

(本篇内容较多,戳一戳下方点赞收藏,下次不迷路~)

一、什么是WebIDE

IDE基本上技术同学每天都会接触到,比如VS Code就是一个比较偏向IDE的产品,因为VS Code本身内置了很多开发功能,还可以通过插件来实现调试、代码补全、代码提示等各类功能,借助这些功能就可以比较好的做出一个集成开发环境(IDE)。

WebIDE相当于IDE产品的Web版。把用户界面这一端放到了浏览器里面,通过导航能够在浏览器里面打开的,且界面和本地的客户端版本几乎是一样的。

有一个WebIDE比较知名的产品是CodeSandBox,同学写一些demo或者做小的功能需要分享给别人,就会用类似的网站;和它类似的还有Codepen,也算是一种WebIDE,它也是把主要界面的操作、交互、开发等放在浏览器里面去做的,这是在业界比较出名的两个例子。

接下来从概念上来看一下构成WebIDE的两个部分:Web和IDE。

Web更多是从使用它的产品形态以及技术实现上来界定的。

与它相对的是像IDEA这种偏客户端的产品。VS Code虽然也是客户端产品,但是它本身用了比较多的Web技术来构建产品的应用,里面混合了一些Web技术;CodeSandbox是偏Web端技术的,是Web端承载的这样一种产品。那么Web的定义就是在技术实现上面去界定的,它也不是两级化的,从Desktop到Web我们可以看到它有各种中间状态,通过分析哪些组件、哪些部分是如何来运用Web技术,可以让我们更好地来分析IDE产品。

IDE是集成开发环境的缩写。所谓集成开发环境,包含了平时会用的调试、代码的高亮、自动代码补全、代码检查等;再加上如果做一些面向对象的语言开发,还会看到“类”的浏览器,以及“类”的继承关系、相互之间的引用关系;还有构建工具等一些东西集成起来形成一个集成开发环境。

与它更相对的是一个偏极端的像Editor这种的编辑器,比如我们可以直接用一个文本编辑器打开一个代码模块,这就是一个最简单的Editor。再比如js这种脚本语言,理论上可以用编辑器直接写代码,写完之后储存成js放到网站上运行就可以了。

更复杂的IDE产品比如Android Studio,它不仅包含写代码和各种预览功能,还可能会包含一些监测应用的性能等功能。

所以在IDE的维度上,需要考虑产品功能的完备程度,以及在开发过程中涉及到的各种功能是否都集成在一个载体里。集成的越来越丰富,越能形成一个集成开发环境,IDE也就更丰富。

二、WebIDE的一些应用场景

以上阐述了 WebIDE的相关概念。从下图(图2-1)也可以看到其实是有一个过渡过程,每一种产品可能会位于坐标轴的某位置。因为不同产品使用的技术战略不同、面向对象不同,所以处于不同位置。它们并不是一个两级对立的状态。

接下来再聊聊WebIDE的应用场景,之前也会有很多同学认为有了客户端的程序来开发代码,在本地能开发的东西也很多,那是不是就不需要其他的东西了?这里带大家看一下业界有哪些产品以及这些产品是如何去定位的,在它们的场景下做了哪些偏WebIDE方向的事情等。上图坐标轴(图2-1)代表的是研发场景的量级。

轻量级指的是开发频次较少,每次开发时间较短,开发代码量比较简单。比如一个月开发一两次左右,每次开发1-1.5个小时,源码也不会出现这种几十万行的源码。重量级的场景是指每天可能都需要迭代开发一些项目,且源码量非常巨大,代码也极其复杂,整个开发环境很庞杂。

所以在整个坐标轴上的不同位置都会有不同的场景和产品。

(一)轻量级的应用场景

最轻量级的场景第一个便是Playground。比如我写了一个库,或者像Golang之类的各种语言,在推广给新手运用时会有一个Playground,它会有一个地方可以直接写代码片段,然后在旁边输出结果。这实际上也是一个非常轻量级的WebIDE的应用场景。

坐标轴下面列了一些对应产品,像runkit在NPM会用到。比如在NPM官网上,每个包主页的右下角应该可以看到一个runkit的按钮,点击可以立刻打开一个Playground来测试/试用这个包。

第二个则是Demo的编写。比如最近新出的一些前端开源库,在它的网站上就会提供一些轻量级嵌入的WebIDE,可以直接写代码,然后用库看看效果如何。与之类似的还有很多组件库,传统的组件库肯定是先在页面上直接把组件代码写好,然后基于这段代码渲染出可交互的组件,让用户能看到。但缺点就是用户无法自主修改调用代码,如果想试另一个API或者参数值,就无法调整。所以更好的方式是能够直接编辑代码,以及编辑完之后能直接渲染出如何使用这个组件,那么用户很快能知道组件是否符合要求,以及组件的展示情况是否能够满足要求。

比较常用的产品有CodeSandbox。

类似轻量级的还有一些做线上代码教学的产品。比如学一些现成的编程课程,或者是做一些线上的面试时,会需要写代码、去运行等,这些情况其实都是比较轻量的。

常用的产品有scrimba,这是一个比较集成性的产品,它有一些可以交互式的视频,在看视频过程中可以随时随地点到视频里面去编辑代码,编辑完代码运行后,还可以继续回来补看。

还有一个replit,能够写各种语言的代码,然后在线上直接执行,还可以做一些教学等。

(二)偏中型的应用场景

偏中型的开发场景一个是静态文档开发站。我们现在常用的是用没有plus的、稍轻些的静态文档工具来开发。

实际写代码时(不是所谓的页面代码),比如markdown类的,再结合开发一些小的自定义组件,这样的一个静态站点就出来了。这个开发频率不会特别高,也不用写太复杂的代码,包括几个组件或有Markdown的文案就可以。

对应的产品有Nextjs Live和Nextjs Web,Nextjs Web也是应用了WebIDE的形态,但是和我们一般看到的编辑器稍有不同,感兴趣的同学可以去深入了解。

还有一个也稍微轻量级的场景—开发组件。开发组件相比于实际项目,代码量肯定会更少,又因为它更加的内聚,所以场景也更加的限定,工具链的复杂度、环境的复杂度等也就会更加简单。

可能只需要集中几十个源码文件,且一个组件的总代码量一般也不超过一两千行。

还有一些low-code的场景,这也可以算是一个轻量的WebIDE,只是和我们预想的通用的WebIDE不太一样,因为low-code的编辑后面还会对接自己的运行时等,集成开发环境会更加的定制性,并不是那种通用代码开发的。

还有像gitpod也是一个比较轻量级的产品。

(三)偏重型的应用场景

再偏重一些的场景,例如开发FaaS的项目,有很多云厂商会提供Web端编辑FaaS函数的方式,同时也支持在本地用CLI方式或IDE插件的方式去做。

像autocode,它是一个完全基于云端环境、浏览环境的产品,用户可以在Web的环境里去开发部署,并且它围绕WebIDE把很多的云服务在这做了整合。

最复杂的还是我们平常接触最多的比如在VS Code里面去开发一个复杂的完整项目。

以上是关于应用场景的一些介绍,从上图(图2-1)坐标轴也可以看出,不同的位置都可能有不同的WebIDE实现。因为对功能要求的侧重点不同、面向的产品及需求场景也不同,所以WebIDE的产品覆盖度是比较广的。

三、WebIDE的主要实现思路与对比

接下来看一下现在开源社区里面主要的实现思路都是怎样的,以及大家都是怎么做WebIDE。

首先来看一下上图(图3-1),看看界面核心部分也就是WebIDE需要具备哪些能力。比如把上面的导航栏盖掉,会发现下面的部分和本地IDE(Desktop IDE)很类似,所以来看一下这样一个IDE需要具备哪些必要的功能。

(一)IDE需要具备的必要功能(以前端为例)首先第一个需要有文件系统。第二部分需要在编辑器非常核心的中部区域能够编写代码。最基础要有个编辑器。第三个部分是需要能支持依赖包的安装。因为我们在写前端项目时,应该都不会编写这种在编译时、运行时完全不需要第三方依赖的项目(除非场景极其定制收敛)。像上述(图2-1)的坐标轴右侧偏重型的产品和场景,肯定会需要依赖安装。第四点在写代码时需要做代码编译才能运行。现在写的代码都已经不是原始的js和css,像是vue模板、jsx;也很少有人直接写css,会选一个Less或者Sass等;还要做各种编译、需要兼容各个浏览器及各种版本。所以现在写的代码一定要做编译才能运行,因为几乎现在没有项目是直接写纯粹的最原始代码。需要页面预览。左侧中间这里(图3-1)有一个浏览器,可以用来预览现在写到的页面,前端希望能够写完后立刻看到页面上的东西和效果。因为在编写复杂样式时,可能无法准确完全的一步到位,会需要通过不断调校,所以这也是很关键的一个部分。与此相关的是热更新。我们现在可能会有很多种状态库,即使不使用状态库,组件也会有自己内部的状态,如果页面全部reload,就会造成直接丢失。所以前端标配就是能够做模块的热更新,能够局部刷新某个模块,这也是一个比较标配要求。还有一个是实时性。通过使用Web技术来编辑保存,保存完之后刷新页面需要及时,页面刷新的实时性体验是否流畅这点也是比较重要的。在本地编译器上编译过程可能会稍微慢些,但客户端上的操作还是比较流畅的,体验还是不错的。(二)业界内WebIDE的实现思路

下面来看一下在上述提到的基础功能上,在业界的实现思路上是如何做的。

1、VS Code和Theia

第一个实现模式下比较著名的两个产品,一个是左边(图3-2)VS Code,另一个是近几年稍新一点的Theia产品。这两个产品在大体的技术路线上是类似的,且这两个产品也都是开源的,完全能看到它的源码。

这里举例说一下Theia这个产品,它的设计和代码目录结构是比较清晰的,VS Code相对会更加复杂,拆分设计没有那么清晰。因为最开始这两个产品的定位不太一样,像Theia可以看到里面都有很多的Package,每个Package对应一个具体的功能模块,且功能模块里面目录结构也是很清晰的,它会有一个叫Browser或Node的目录,模块的层级划分是比较清晰的。

整体实现上,前端部分主要负责UI,每一个模块会对应一个前端的实现。比如ternimal里有各种彩色加速应该如何展示出来。同时还会负责一些交互,比如在ternimal输入的东西如何拿到。中间会通过WebSocket的方式做一个协议。像Theia的话就用JSON做了一个自定义格式的协议,来和服务端通信,让后端对应的模块也就是ternimal的Node.js模块收到对应的执行方法。ternimal的后端模块就会把输入的内容放到对应进行的标准输入里,把标准输出取出,再返回给前端来展示。所以它的层级划分是每个功能模块,大致分成前端(Browser)和服务端(Node),中间有一个标准的协议来通信。

所以它的具体实践上明显分为两层,第一层是上图(图3-5)红框里面的Browser浏览器,它主要负责Web的UI;第二层的是绿框的Server层,Server会依托于后端环境和操作系统环境。整个Server为了做资源隔离就把它放在一个容器里面,相当于每次在前端对应打开一个WebIDE,背后就有一个Container,里面的Server就会做相关的事情,所以文件系统实际在前端主要是展示,最终还是存储在一个Container里面。

再来看代码编辑器,这是一个纯前端的编辑器,一般不会直接和后端交互,现在常用的选择就是三个:Ace、Monaco和CodeMirror6。

Ace是一个非常老牌的编辑器。已经出来有十几年了,所以功能不一定特别完备,它的UI样式也稍微老一些;

Monaco属于中生代,是VS Code本身用的编辑器,然后后来把它慢慢独立出来做。这个东西也是现在做WebIDE,很多人会去选择的一个开源的编辑器;

Code Mirror是更新一点的。Code Mirror本身不是一个特别新的编辑器,也做了也很长时间了。但是Code Mirror6它是一个完全重构的新版本,在5的基础上就几乎重写了一遍,所以这么一个新版本算是比较新的编辑器,支持很多新特性。

关于编辑器这里有一些简单的对比(https://blog.replit.com/code-editors),因为编辑器属于比较高内聚低耦合的产品,所以在做WebIDE时,为了快速启动,选一个开源的产品会有比较大帮助的,不会拉垮整个WebIDE,且接口也比较简洁的。

再下一步是依赖安装,它有个服务端,通过一个通信指令在服务端把安装包装上。代码编译运行也相似,也是在Server端运行,然后Server通过网络协议和Web里的某一页面进行通信。由于有实际的服务端,所以在这个架构下的页面预览、热更新等和本地开发基本是一致的,服务、编译等都是在Container里面的。

在实时性上主要取决于两点:一是通信是否会有延迟,是否会有带宽问题,以及服务稳定性如何;第二点是由于涉及前端编译运行,所以分配的资源是否足够也会有影响。

2、CodeSandbox

下面再说第二个实现思路是CodeSandbox。这个思路和前面的技术路线和想法差异比较大,所以需要单独介绍一下。

CodeSandbox本身是一个开源的产品,它把客户端的IDE部分开源出来了,所以可以直接看到它的源码,了解它的各种实现。在它早期发表的文章上也介绍了一些他们在实现WebIDE上面的关键思考点等。虽然技术实现细节有了非常多的迭代,但是它整体的技术思路大致是这个方向。

上图(图3-7)Code Sandbox的图,可以看到右边这个图上看出,它没有像VS Code或Theia分Broswer或Server,因为这些部分全都在 Broswer里,所以它的文件系统是一个基于浏览器内存的文件系统。编辑器这块在技术路线上没有太大的差异,都是直接用开源的产品。

在依赖安装这部分和前两者也有很大不同,因为它没有一个服务端环境,意味着它不能用“正常”的方式安装,同时因为它是一个基于浏览器内存的文件系统,所以即使在某个server安装上这些东西,也需要它搬到浏览器里面来,然后把它放到这个文件系统上去才行。所以在这里有一个服务(图3-7最右侧),专门来处理NPM包,把NPM包代码处理完后直接给前端浏览器返回,再通过接口的方式返回NPM包里面文件内容以及一些其他信息等。

通过这个转换服务,在左侧这里(上图3-7)去搜一个React时可以把React的版本列出来,在下拉框里选中目标后就会通过这个服务,把所有依赖的NPM包里面的代码内容返回到前端,然后前端把它装载到文件系统里面,这样就可以去做依赖安装。

下一块代码的编译运行主要关注绿色这部分(图3-8),这也是重度开发的部分。代码编译会基于开源工具(babel、vue compiler等)来手写一个可在浏览器内运行的打包器。运行则会依托于iframe,把代码放到iframe里面让它去运行和渲染页面。

关于页面预览,iframe并不是真正的去某一个服务端把资源加载进来,它通过前端的方式,可以是 Service Worker 直接拦截返回,或者直接通过前端的通信机制发送代码来加载。热更新这部分的话,肯定需要自己做一些热更新的这种操作,因为它是把工具链这块自己接管的。

实时性上一般没有太大差别,上面可以看到它是一个纯浏览器内部的操作,浏览器主线程会频繁和web worker进行各种通信,所以相比较要去和服务端通信,它的时间可能会要稍微短一点。

这节的最后给这两种模式做个简单对比(图3-9):

Theia的模式由于需要有服务端的实现,所以在资源开销和运维成本上有劣势;而CodeSandbox由于需要自研工具链,所以在前端这个新框架迭代频繁的领域有较大开发成本,同时由于缺乏服务端能力,能满足的场景也有限,主要还是纯前端的代码编译。

四、WebContainer思路下的WebIDE

最后来说一下 WebContainer的思路下是如何做IDE的。WebContainer是stackblitz公司提出的一种技术模式,算是第三种模式。目前社区没有开源实现,因为这个是比较核心的技术,所以做这个的stackblitz公司也没有在公开的资料里说过具体的技术细节,只有一些概念。

可以体验下(https://stackblitz.com/),实现原理大致是利用了wasm的特性,将node相关代码进行转换为在浏览器work可以执行的wasm代码,这样在浏览器就支持了node的运行。

WebContainer的核心目标是,既想跑服务端代码(跟VS Code一样),但又不想有服务端容器。

它在这里提了一个概念,把服务端代码运行在一个所谓的WebContainer里,这个WebContainer是完全运行在浏览器里的,这样就做到了类似这样一种架构。

这种架构和Theia对比层级结构很像。Web UI这边可以说大致类似,层级图的下面这部分,在Theia里面是完整跑在服务端的Node.js的环境里的,而在WebContainer 这样的实现下面,就要跑在浏览器里面(图4-2)。由于前端相关的服务端应用基本都依赖Node.js,所以这里非常重要的一个问题就是怎样让Node.js程序能够跑在浏览器里面?如果把Node.js跑到浏览器的问题解决,就解决了很大一部分的技术问题。各种Node.js代码、应用、各种NPM包、构建工具就可以直接跑在浏览器里面,之前需要一个Server环境来做,现在就不需要了。所以在这样一个思路下,就可以把server搬到浏览器里面来做。

它和CodeSandbox不一样,CodeSandbox在绿色部分(图4-2)也就是在Web woker的技术上做了各类技术栈的构建工具链,NPM也需要去单独做处理。

这个对比可以看到二者实现的事情和层级上是不同的。理论上基于WebContainer的方式NPM也不需要再单独处理。如果实现了完整的Node.js运行环境,可以把npm install抛到worker里面去,但是可能会有一些性能和效率的问题。所以做 WebIDE需要定制一个在浏览器里面能够独立运行NPM CLI工具。

这里要涉及三点:第一个是依赖的解析;第二个是怎么去把包拉下来;最后是拉到之后你需要去解包解压。

基于WebContainer模式下的WebIDE能够较好规避前两个模式的缺点(图4-4):

由于所谓的server也运行在浏览器中,所以资源消耗和运维成本就降为0,安全隔离也不需要docker container这种技术,浏览器自带了沙箱特性。同时由于模拟了Node.js运行环境和基础的shell能力,所以在工具链上可以大量服用前端已有工具包,无需定制开发工具链。

最后总结一下,基于WebContainer的WebIDE在整个应用场景从轻到重上来说,属于是一个它可以处理从轻到重的产品。在轻量级场景下,我们可以用它做playgroud,做demo编写,都是可以的。然后再偏中量级上面的话,可以在它上面运行vuepress或者vitepress(Vue团队做的工具)来进行静态的站点搭建,你可以在这上面直接去开发你的静态站然后联通部署服务。

现在我们是做了一个产品(暂不对外开放),可以进行一些在线Demo的编写、分享,除了运行纯前端组件、包之外,也可以运行一些命令行工具、或者Node.js包。随着开发体验与周边工具(例如git)的补齐,它这种技术模式在这个场景轴上,所能覆盖范围会更长一些。然后本身它内部的各个子模块也可以独立输出出来,像最近CodeSandbox它其实也有意把自己的Sandbox给抠出来,独立出来做一个轻量级的输出,就不整个输出WebIDE这块东西。

(下方 为文章中提到的技术产品和文档链接,感兴趣的同学可点击查阅~)

https://blog.replit.com/code-editors

https://github.com/codesandbox

https://codesandbox.io/post/creating-a-parallel-offline-extensible-browser-based-bundler-for-codesandbox

https://codesandbox.io/post/how-we-make-npm-packages-work-in-the-browser

https://codesandbox.io/post/sandpack-announcement

https://codesandbox.io/docs/environment#container-environment

https://codesandbox.io/post/announcing-codesandbox-containers

https://stackblitz.com/

关键词: 开发环境 文件系统 来看一下

 

热文推荐

一起来聊聊关于WebIDE的实现 焦点关注

本期聊聊WebIDE的概念和在各种客户端的应用场景;一起探讨在社区里比较主流的WebIDE实现的方法模式与对比,一起来了解WebContainer思路下的Web

2023-01-12

全球看点:又见光伏圈奇事:东方日升高管朋友圈透露订单规模,卖方首席“微信调研”

1月11日,东方日升(300118 SZ)全球市场总监庄英宏(LeonChuang)发布的一则微信朋友圈在光伏圈内流传甚广。朱钥在庄英宏的朋友圈回复称“贵

2023-01-11

北京房山区韩村河大集开放时间具体位置及坐车路线 世界即时看

北京房山区韩村河大集开放时间具体位置及坐车路线开集时间:每周二、四、六具体位置:房山区韩村河公园坐车路线:导航至房山区韩村河公园韩村

2023-01-11

环球快看点丨深圳宝安:购销两旺看市场

1月6日凌晨,深圳市宝安农贸批发市场人声鼎沸,来来往往的货车上满载着各类农贸产品。市场内的各档口正为一天的营业备足物资。

2023-01-11

讯息:安卓手机主流配置:6.7寸屏幕+120Hz高刷+12GB内存!你达标了吗?

随着智能手机的不断更新换代,到目前,手机的处理器性能不断提升,屏幕尺寸维持了一个较为稳定的水平,屏幕刷新率也相对稳定了,手机内存也上

2023-01-11

最长寒假接近暑假,最短不足1个月!高校大多转入放假模式,大学生返乡迎高峰:天天微速讯

进入今年1月中旬,高校大多转入放假模式,大学生返乡迎来高峰期。从华东师范大学到上海大学,沪上不少高校均在本周一宣告放假,只不过返校开学

2023-01-10

有意思小周刊(2023.01.09):一文详解|影响成长的关键思考

「有意思小周刊」是我利用零碎时间,梳理记录一周的日常阅读与思考内容。目的是为以后更好构建自己知识体系,也为了将这些内容分享给你。▌一

2023-01-10

玻璃唯美句子(精选350句)-当前快看

玻璃唯美句子精选30句1 我们的学校就像一个大花园,多么美丽,多么可爱,我们在这里茁壮成长!我们走进教室,只见窗口那里不断地滚进浓雾,教

2023-01-10

离异后父母财产怎么分配-焦点报道

一:先区分并平分夫妻合法财产,再把死者的合法财产平均分配给法定继承人(ps:有困难的、属于未成年人的、年老体弱多病的或说被继承人生前负

2023-01-10

中午开始市场情绪逐渐稳定!-即时

今日虽然低价强势股数量继续增多,但尚未撼动市场依然处于“机构市”的状态。中午开始市场情绪逐渐稳定。截止13:45分最高标出现了四板暂时封

2023-01-10

观速讯丨地球人电解质粉开创健康饮品新风口!

疫情防控进入新阶段后,人们开始着重“保健康、防重症”,各类能提升身体健康的物资也纷纷爆单!继黄桃罐头后,电解质饮料也在各

2023-01-10

40.9-62.5万元 全新雷克萨斯RX开启预售|全球今热点

[汽车之家资讯]日前我们获悉,全新一代雷克萨斯RX正式开启预售,新车共推出6款车型,预售价格区间为40 9-62 5万元(详细价格如下表)。相比上

2023-01-10

京东白条贷款逾期了会影响征信吗

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可

2023-01-10

途虎养车加盟商张伟光:端正好态度,用心做好店,让我取得了成功

大家好,我是途虎养车加盟商张伟光。早在2016年,我就加入了途虎,并且开了第一家店。目前,我总共开了七家店,途虎养车在不

2023-01-10

全球热头条丨美银证券:维持京东物流买入评级 目标价升至21港元

美银证券发表报告指,根据该行的实地调查,京东物流(2618 HK)受惠于特许经营快递营运商的市占流失,其去年12月的物流量料表现强劲,因快递员受

2023-01-10

传统电视娱乐体验大升级,Oorbit与LG电子合作,将元宇宙游戏引入智能电视|头条

Block-10143D云技术平台Oorbit宣布与LG电子达成战略合作伙伴关系,将沉浸式游戏引入智能电视。LG电子和Oorbit的用户可以通过Pixelynx

2023-01-09

去皮的板栗仁能用烤箱烤熟吃吗?|最新消息

能步骤1板栗放在案板上,用刀砍一个口,左手不要摸板栗啊,怕刀斜了砍手上。步骤2砍好口的板栗装烤盘里,放入220度预热好的烤箱里,烤到口微微

2023-01-09

平凡闪耀,大象无形,快手泛时尚年度盛典show海南盛大开幕_世界聚焦

1月5日,快手泛时尚年度盛典show在海南清水湾莱佛士酒店盛大开幕,作为快手时尚首次线下年度盛典,此次活动以“快show

2023-01-09

2022年前11个月全国新开工改造城镇老旧小区5.25万个:最新

新华社北京1月6日电(记者王优玲)记者6日从住房和城乡建设部获悉,2022年前11个月,全国新开工改造城镇老旧小区5 25万个、876 01万户,按小区

2023-01-09

每日精选:甘肃县域竞争力评价结果出炉 你的家乡上榜没

1月8日,甘肃系列蓝皮书《甘肃县域和农村发展报告(2023)》发布,课题组通过计算分析,评选出八个方面的最具竞争力的甘肃县域。兰州市城关区

2023-01-09

资讯

因地制宜放“大招” 多地市密集出台稳经济措施

当前,受新冠肺炎疫情等因素影响,我国经济发展仍面临严峻挑战。5月25日,国务院召开全国稳住经济大盘会议,要求把稳增长放在更突出位置。5

2022-06-20     
北京推出14条秋游文化线路

金秋时节,北京市文化和旅游局以赏银杏品文化为主题,推出14条“叶落的季节——漫步北京赏银杏品文化主题线路”,邀市民和游客以步行、骑行

2021-10-27     
基因编辑发力 培育高质量人源化供体猪

此次人体试验,仅仅验证了基因编辑猪克服异种器官移植的超急性排斥反应,还需解决延迟性排斥反应、消耗性血栓等问题。但通过这次试验,能更

2021-10-27     
中国经济高质量发展步伐稳健 长期向好基本面未变

在全球疫情走势和经济走势趋于复杂的背景下,中国经济巨轮将驶向何方,举世关注。2020年10月26日至29日,党的十九届五中全会在京举行,明确

2021-10-27     
南美解放者杯决赛允许近4.5万观众入场

南美洲足联主席多明格斯25日与今年解放者杯决赛对阵的两支俱乐部负责人会晤,宣布决赛现场观众人数增加到球场容量的75%,即近4 5万人。今年

2021-10-27     
22年从警生涯 面对荣誉他说不要给我报功

9月24日,时任安徽省安庆市公安局迎江分局刑警大队大要案中队中队长周磊因在工作中激烈搏斗引发心源性猝死,倒在了工作岗位上,经医院抢救

2021-10-27