精华内容
下载资源
问答
  • angular 服务器渲染Server-side rendering is a headache and if you ever worked with Angular 1, you should be worried about how Angular 2 plans to handle it. Server-side rendering in Angular 2 is often-...

    angular 服务器渲染

    Server-side rendering is a headache and if you ever worked with Angular 1, you should be worried about how Angular 2 plans to handle it. Server-side rendering in Angular 2 is often-times also called Universal.

    服务器端渲染令人头疼,如果您曾经使用过Angular 1,则应该担心Angular 2计划如何处理它。 Angular 2中的服务器端渲染通常也称为Universal

    You might often hear people say stuff like: "I am building an app that will be universal". What does that even mean?

    您可能经常听到人们说诸如此类的话:“我正在构建一个通用的应用程序”。 那有什么意思?

    什么是通用? ( What is Universal? )

    When we build apps, we consider the following elements:

    在构建应用程序时,我们考虑以下要素:

    1. Content

      内容
    2. Style

      样式
    3. State

    By default, front end frameworks have virtual DOM so when a hard request is made to an app built with such frameworks (like Angular), the expected behavior is weird. The request is served with a response of just the HTML content found at the entry point of the app while the main app content is lost.

    默认情况下,前端框架具有虚拟DOM,因此当对使用此类框架(例如Angular)构建的应用发出硬性请求时,预期的行为很奇怪。 该请求仅包含在应用程序入口点找到HTML 内容的响应,而主要应用程序内容丢失。

    This is not a problem to your users because your app virtually has content, styles, and state. Where the problem kicks in is with web crawlers that index your site for SEO sake. They get served with the incomplete HTML content which is very useless to them. This behavior even gets more painful when you expect people to share your app's link and you see an image like the one below when they do:

    这对您的用户来说不是问题,因为您的应用程序实际上具有内容样式状态 。 问题出在哪里是Web搜寻器,这些搜索器为SEO索引了您的网站。 他们得到了不完整HTML 内容 ,这对他们来说是毫无用处的。 当您期望人们共享应用程序的链接并且当他们看到以下图像时,这种行为会变得更加痛苦:

    Angular 2 Server-Side Rendering Preview

    In Angular 1, if you tried to bind the app's title and description values using $rootScope you end up disappointed at how crawlers and social media robots see your site.

    在Angular 1中,如果您尝试使用$rootScope绑定应用程序的标题和描述值,您最终会对爬虫和社交媒体机器人看到您的网站感到失望。

    To replicate this challenge in Angular 2, I built an Angular 2 app with three routes (home, about and contact):

    为了在Angular 2中重现这一挑战,我构建了一个Angular 2应用,其中包含以下三种路线(家庭,关于和联系):

    Angular 2 Server-Side Rendering Preview

    Preview

    预习

    Angular 2 Server-Side Rendering Source

    Source

    资源

    <!-- 
    This all you get as content 
    without server rendering
    -->
    <app-root>Loading...</app-root>

    The conventional server rendering solution has saved us for years with Angular 1 by provisioning web crawlers with our actual content. That seemed to keep us happy but we were missing one thing -- state.

    常规的服务器渲染解决方案通过为Web爬网程序提供实际内容为Angular 1节省了我们很多年。 那似乎使我们快乐,但是我们却错过了一件事- 状态

    The Universal idea is to build an app that does not just render to server but also runs on the server. Running in the sense that our state, content and styles are intact on the client and the server as well. In Angular 2, this is achieved with the help of Angular Universal which loads our app on the server first, and then drops it to the browser once ready.

    通用想法是构建一个不仅可以呈现到服务器而且可以在服务器上运行的应用程序。 从某种意义上说,我们的状态,内容和样式在客户端和服务器上都是完整的。 在Angular 2中,这是通过Angular Universal的帮助实现的,它将首先将我们的应用程序加载到服务器上,然后在准备好后将其放到浏览器中。

    什么是Angular Universal? ( What is Angular Universal? )

    Angular 2 Universal

    Angular Universal is the library the awesome Angular team is working on to make building universal apps a smooth experience. The library fixes a lot of nightmare we had working with Angular 1. As a matter of fact, our worst nightmare in Angular 1 is what Angular Universal takes away in Angular 2:

    Angular Universal是令人敬畏的Angular团队正在努力的图书馆,旨在使构建通用应用程序具有流畅的体验。 该库解决了我们使用Angular 1时遇到的许多噩梦。事实上,我们在Angular 1中最糟糕的噩梦是Angular Universal在Angular 2中所消除的。

    SEO友好 (SEO Friendly)

    Angular Universal helps you to serve your app content to the server just as you did on the browser. When a web crawlers visit, they will be able to index you website's full content that can be used on search engines. This thereby solves one of the most popular front end challenges when working with JavaScript frameworks that create virtual DOM.

    Angular Universal可以像在浏览器中一样帮助您将应用程序内容提供给服务器。 当网络爬虫访问时,他们将能够索引您网站上可在搜索引擎上使用的全部内容。 因此,这可以解决使用创建虚拟DOMJavaScript框架时最受欢迎的前端挑战之一。

    社交媒体友好 (Social Media Friendly)

    With Angular Universal serving your sever with browser content, social media platforms that display brief information about your website when a link is added can get access to the needed details.

    Angular Universal通过浏览器内容为您的服务器提供服务,添加链接后显示有关您的网站的简要信息的社交媒体平台可以访问所需的详细信息。

    预渲染 (Pre-rendering)

    This is the most bind-blowing feature offered by Angular Universal. Angular Universal renders both your content and state as well as registering events on the server. The implication is that when your app boots, the server would serve the server-rendered content and a user can make use of the app at that stage.

    这是Angular Universal提供的最具约束力的功能。 Angular Universal可以渲染您的内容和状态,以及在服务器上注册事件。 含义是,当您的应用启动时,服务器将提供服务器渲染的内容,并且用户可以在该阶段使用该应用。

    The user's activities are recorded (with Preboot.js) at this stage and after couple of seconds when Angular is ready with the real thing, the user is automatically switched and those events replayed. The user won't even catch a glimpse of what is happening under the hood.

    在此阶段(使用Preboot.js )记录用户的活动,并在Angular准备好真实事物后几秒钟后,将自动切换用户并重播这些事件。 用户甚至不会瞥见引擎盖下正在发生的事情。

    入门 ( Getting Started )

    Now that we have seen what Universal and Angular Universal are, how do we join the party? Angular Universal is coming to Angular CLI real soon but before that we have projects to build now.

    现在我们已经了解了什么是Universal和Angular Universal,我们如何加入该党? Angular Universal即将正式投入Angular CLI的使用,但是在此之前,我们现在要构建项目。

    通用入门项目 (Universal Starter Project)

    Patrick built an awesome starter for Angular Universal apps which we are going to clone so as to test out these awesome tool.

    Patrick为Angular Universal应用程序构建了一个很棒的启动器 ,我们将对其进行克隆,以测试这些出色的工具。

    # Clone repo
    git clone https://github.com/angular/universal-starter scotchiversal
    
    #Install modules
    cd scotchiversal & npm i

    If you have been building Angular 2 app lately, you will see that the directory looks much alike to what we are used to. The key difference is the bootstrapping process. Bootstrapping Universal apps are done with a different library and in two different files (client.ts & server.ts).

    如果您最近一直在构建Angular 2应用程序,则将看到该目录与我们以前使用的目录非常相似。 关键区别在于引导过程。 引导通用应用程序是通过不同的库和两个不同的文件( client.tsserver.ts )完成的。

    Furthermore, we usually make use of platformBrowserDynamic to bootstrap but for Universal, we use platformUniversalLibrary from the Angular Universal library:

    此外,我们通常使用platformBrowserDynamic进行引导,但对于Universal,我们使用Angular Universal库中的platformUniversalLibrary

    // ./src/client.ts
    // the polyfills must be the first thing imported
    import 'angular2-universal-polyfills';
    
    // Angular 2
    import { enableProdMode } from '@angular/core';
    import { platformUniversalDynamic } from 'angular2-universal/browser';
    import { bootloader } from '@angularclass/bootloader';
    
    import { MainModule } from './browser.module';
    
    export const platformRef = platformUniversalDynamic();
    
    export function main() {
      return platformRef.bootstrapModule(MainModule);
    }
    // Bootstrap
    bootloader(main);

    The bootloader function just checks that the DOM is ready before bootstrapping Angular 2.

    bootloader功能仅在引导Angular 2之前检查DOM是否准备就绪。

    The above logic is what we are used to but this time we are making use if platformUniversalDynamic to bootstrap. The module we are bootstrapping is imported from ./src/browser.module.ts:

    上面的逻辑是我们习惯的,但是这次我们要使用如果platformUniversalDynamic进行引导。 我们正在引导的模块是从./src/browser.module.ts导入的:

    // ./src/browser.module.ts
    import { NgModule } from '@angular/core';
    import { UniversalModule } from 'angular2-universal/browser';
    
    @NgModule({
        ...
      imports: [
        // Import this first
        UniversalModule,
        ...
      ]
    })
    export class MainModule {}

    Same old module that we are comfortable with. We also import the UniversalModule which must be imported before every other imports.

    我们满意的旧模块。 我们还导入了UniversalModule ,必须在其他所有导入之前先将其导入。

    The two files we just looked at handles browser rendering, so let's look at server.ts and it's accompanying module for server rendering:

    我们刚刚看过的两个文件处理浏览器渲染,因此让我们看一下server.ts及其随附的服务器渲染模块:

    // ./src/server.ts
    import 'angular2-universal-polyfills';
    
    import * as path from 'path';
    import * as express from 'express';
    import * as bodyParser from 'body-parser';
    import * as cookieParser from 'cookie-parser';
    import * as morgan from 'morgan';
    import * as compression from 'compression';
    
    // Angular 2
    import { enableProdMode } from '@angular/core';
    // Angular 2 Universal
    import { createEngine } from 'angular2-express-engine';
    
    // App
    import { MainModule } from './node.module';
    
    // enable prod for faster renders
    enableProdMode();
    
    const app = express();
    const ROOT = path.join(path.resolve(__dirname, '..'));
    
    // Express View
    app.engine('.html', createEngine({
      ngModule: MainModule,
      providers: [
          // You can include static providers like the Title service here
      ]
    }));
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname);
    app.set('view engine', 'html');
    app.set('json spaces', 2);
    
    app.use(cookieParser('Angular 2 Universal'));
    app.use(bodyParser.json());
    app.use(compression());
    
    app.use(morgan('dev'));
    
    function cacheControl(req, res, next) {
      // instruct browser to revalidate in 60 seconds
      res.header('Cache-Control', 'max-age=60');
      next();
    }
    // Serve static files
    app.use('/assets', cacheControl, express.static(path.join(__dirname, 'assets'), {maxAge: 30}));
    app.use(cacheControl, express.static(path.join(ROOT, 'dist/client'), {index: false}));
    
    function ngApp(req, res) {
      res.render('index', {
        req,
        res,
        preboot: false, // turn on if using preboot
        baseUrl: '/',
        requestUrl: req.originalUrl,
        originUrl: `http://localhost:${ app.get('port') }`
      });
    }
    // Our page routes
    export const routes: string[] = [
      'about',
      'home',
      'contact'
    ];
    app.get('/', ngApp);
    routes.forEach(route => {
      app.get(`/${route}`, ngApp);
      // Route pattern
      app.get(`/${route}/*`, ngApp);
    });
    
    app.get('*', function(req, res) {
      res.setHeader('Content-Type', 'application/json');
      var pojo = { status: 404, message: 'No Content' };
      var json = JSON.stringify(pojo, null, 2);
      res.status(404).send(json);
    });
    
    // Server
    let server = app.listen(app.get('port'), () => {
      console.log(`Listening on: http://localhost:${server.address().port}`);
    });

    Universal is supported in Node and ASP.Net but coming to other backend platforms soon. We are using Node and to be precise to express server. The server uses the createEngine method to create a view engine that will deliver our Angular app content. The routes for each of the pages we need to render are handled as well. The rest of the code preps the express server.

    Node和ASP.Net支持Universal,但很快将用于其他后端平台。 我们正在使用Node并精确地express服务器。 服务器使用createEngine方法创建一个视图引擎,该引擎将交付我们的Angular应用程序内容。 我们也需要处理每个页面的路由。 其余代码为express服务器做准备。

    MainModule is imported here too and used to render our views:

    MainModule这里导入,并用于呈现我们的视图:

    // ./src/node.module.ts
    import { NgModule } from '@angular/core';
    import { FormsModule } from '@angular/forms';
    import { RouterModule } from '@angular/router';
    import { UniversalModule } from 'angular2-universal/node';
    
    @NgModule({
      imports: [
        UniversalModule,
        FormsModule,
        RouterModule,
        ...
       ],
       ...
    })
    export class MainModule {}

    定制组件 (Custom Components)

    Every other thing in the app anatomy can now be all about your custom logic. Let's create our page components:

    现在,应用程序剖析中的所有其他内容都可以与您的自定义逻辑有关。 让我们创建页面组件:

    Home Component

    家庭组件

    // ./src/app/home/home.component.ts
    import { Component } from '@angular/core';
    
    @Component({
      selector: 'app-home',
      templateUrl: './home.component.html',
      styleUrls: ['./home.component.css']
    })
    export class HomeComponent {}

    Home Template

    主页模板

    <!-- ./src/app/home/home.component.html -->
    <div class="jumbotron">
      <h2 class="text-center">Home</h2>
    </div>
    <div class="container">
      <p>. . . </p>
      <p>. . . </p>
      <div class="panel panel-default">
        <div class="panel-heading">Panel heading without title</div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
    </div>

    Same idea applies to about and contact component so you can have fun by creating those ones yourself.

    aboutcontact组件也有相同的想法,因此您可以自己创建一个组件,从而获得乐趣。

    路由 (Routing)

    We can now create the 3 routes we specified in the server file:

    现在,我们可以创建在服务器文件中指定的3条路由:

    // ./src/app/app-routing.module.ts
    import { NgModule } from '@angular/core';
    import { RouterModule } from '@angular/router';
    
    import { HomeComponent } from './home/home.component';
    import { AboutComponent } from './about/about.component';
    import { ContactComponent } from './contact/contact.component';
    
    @NgModule({
      imports: [
        RouterModule.forChild([
          { path: '', redirectTo: '/home', pathMatch: 'full' },
          { path: 'home', component: HomeComponent },
          { path: 'about', component: AboutComponent },
          { path: 'contact', component: ContactComponent }
        ])
      ],
    })
    export class AppRoutingModule { }

    The routes should be imported into our app module before it can work:

    路线应先导入到我们的应用模块中,然后才能起作用:

    // ./src/app/app.module.ts
    import { NgModule } from '@angular/core';
    
    import { HomeComponent } from './home/home.component';
    import { AboutComponent } from './about/about.component';
    import { ContactComponent } from './contact/contact.component';
    
    import { AppRoutingModule } from './app-routing.module';
    import { AppComponent } from './app.component';
    
    
    @NgModule({
      declarations: [ 
        AppComponent, 
        HomeComponent,
        AboutComponent,
        ContactComponent 
      ],
      imports: [
        SharedModule,
        AppRoutingModule
      ]
    })
    export class AppModule {}

    Remember to specify the outlet for the route as well (it is easy to forget):

    记住还要指定路线的出口(很容易忘记):

    <!-- ./src/app/app.component.html -->
    <nav class="navbar navbar-default">
      <div class="container-fluid">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Scotchiversal</a>
        </div>
    
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav">
            <!-- Links -->
            <li><a [routerLink]="['home']">Home</a></li>
            <li><a [routerLink]="['about']">About</a></li>
            <li><a [routerLink]="['contact']">Contact</a></li>
          </ul>
        </div>
      </div>
    </nav>
    <div>
      <!-- Outlet -->
      <router-outlet></router-outlet>
    </div>

    You can run the app with:

    您可以通过以下方式运行该应用程序:

    npm start

    Angular 2 Server-side Rendering Progress

    Preview

    预习

    Angular 2 Server-side Rendering Progress

    Source

    资源

    You can see the difference in the server-served content. It clearly represents the Contact page with the form and button.

    您可以看到服务器提供的内容的差异。 它使用表单和按钮清楚地表示“联系人”页面。

    远离DOM ( Stay Away From The DOM )

    The power of Universal comes from the fact that Angular abstracts DOM rendering. This is what makes Angular support for multi-platform possible. If you want Universal to keep working as expected, the you have to stay away from the DOM.

    Universal的功能来自Angular抽象DOM渲染的事实。 这就是使Angular支持多平台成为可能的原因。 如果要让Universal保持预期的工作状态,则必须远离DOM。

    This does not mean that you cannot perform DOM operations but do not do that with the native solutions (document.domMethod() or $('dom-element')).

    这并不意味着您不能执行DOM操作,但不能使用本机解决方案( document.domMethod()$('dom-element') )来执行。

    Angular provides us a better way to perform DOM operations safely. See ElementRef, Renderer and ViewContainer APIs for more details.

    Angular为我们提供了更好的安全执行DOM操作的方法。 有关更多详细信息,请参见ElementRefRendererViewContainer API。

    Thank you!

    谢谢!

    翻译自: https://scotch.io/tutorials/server-side-rendering-in-angular-2-with-angular-universal

    angular 服务器渲染

    展开全文
  • 腾讯云批量型服务器具有最优单位核时性价比,适用于渲染、基因分析、晶体药学等短时频繁使用超大规模计算节点的计算密集型应用。 批量计算型BS1云服务器介绍 批量计算型BS1实例是一款超高性价比实例。使用灵活,即买...

    腾讯云批量型服务器具有最优单位核时性价比,适用于渲染、基因分析、晶体药学等短时频繁使用超大规模计算节点的计算密集型应用。

    批量计算型BS1云服务器介绍

    批量计算型BS1实例是一款超高性价比实例。使用灵活,即买即用,用完销毁,支持多种规格,可满足渲染、基因分析、晶体药学等计算密集型用户短时频繁使用超大规模计算节点诉求。

    批量计算型BS1云服务器特点

    高性价比,所有实例类型中相同规格小时单价最低
    处理器与内存配比为1:2
    使用场景:

    视频 / 影视渲染
    基因组学、晶体药学等
    HPC 计算密集型业务,如气象预测、天文学等
    批量计算型BS1云服务器规格列表
    在这里插入图片描述
    综上,以上为腾讯云批量计算型BS1云服务器的配置、性能、使用场景及规格说明
    更多参阅文档中心 云服务器 产品简介 实例 实例规格

    展开全文
  • BS:指的是浏览器服务器模式,也就是说需要把客服端要访问的数据库等内容安装在服务器上面,这样用户在访问的时候只是通过连接到网络的服务器就可以获取到数据库里面的内容。 CS:指的是客户端服务器模式,也就是说...

    BS:指的是浏览器服务器模式,也就是说需要把客服端要访问的数据库等内容安装在服务器上面,这样用户在访问的时候只是通过连接到网络的服务器就可以获取到数据库里面的内容。服务器通常采用的是高性能的PC工作站或者小型机等。对于用户来说需要的仅仅是浏览器可以上网就可以了。

    CS:指的是客户端服务器模式,也就是说用户需要安装数据库的客户端,这样才可以在本地访问数据库里面的内容,用户可以在客服端改变直接改变数据内容等,然后提交到服务器,但是限制于局域网,而且产品如果需要维护的话,客户端需要需要重新下载更新等,维护起来比较麻烦,唱本也会比较高。

    服务器:硬件和软件的结合。

    内核:浏览器最重要的部分为渲染引擎,通常我们称之为内核,负责对网页语法(html,javascript)的解释以及展示出来的风格,也就是浏览器解释了网页语法以后所展现出来的样式。

    常用的一些浏览器的内核归纳如下:

    IE、傲游、世界之窗浏览器、Avant、腾讯TT、Netscape 8、NetCaptor、Sleipnir、GOSURF、GreenBrowser和KKman等浏览器所用的内核是:Trident(又称为MSHTML)。
    
    Firefox、Netscape6至9浏览器所用的内核是:Gecko内核。
    
    Safari和Google的浏览器Chrome浏览器所用的内核是:WebKit
    Opera 7.0及以上浏览器所用的内核是:Presto内核。





    展开全文
  • BS开发(浏览器和服务器开发)

    千次阅读 2020-06-18 20:32:33
    浏览器 通过服务器控制联网的设备 HTML:超文本标记语言 静态的 显示网页 CSS:层叠样式表 渲染网页 XML:指可扩展标记语言 传输网页 Javascript:脚本语言 和 网页交互 (局部刷新网页) AJAX:基于Javascript语言的...

    在这里插入图片描述

    1、概述

    浏览器 通过服务器控制联网的设备
    在这里插入图片描述
    HTML:超文本标记语言 静态的 显示网页
    CSS:层叠样式表 渲染网页
    XML:指可扩展标记语言 传输网页
    Javascript:脚本语言 和 网页交互 (局部刷新网页)
    AJAX:基于Javascript语言的技术 (将网页 和 服务器 交互)
    CGI:通用网关接口(服务器 借助 CGI 控制 外设(数据库、传感器设备、文件))

    在这里插入图片描述

    2、什么是B\S架构

    B/S架构就是浏览器和服务器架构

    Browser/Server(浏览器/服务器结构),是随着Internet技术的兴起,是对C/S结构的一种变化或者改进的结构。
    用户界面完全通过www浏览器实现,一部分事物逻辑在前端实现,但是主要事务逻辑在服务器端实现。

    B/S架构 与 C/S架构对比

    在这里插入图片描述

    3、Apache Tomcat环境搭建

    Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。 Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,servlet)。

    两者都是一种容器,只不过发布的东西不同:Apache是html容器,功能像IIS一样;Tomcat是jsp/servlet容器,用于发布jsp及java的,类似的有IBM的websphere、BEA的Weblogic,sun的JRun等等。

    打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。

    Apache是世界使用排名第一的Web服务器。它可以运行在几乎所有广泛使用的计算机平台上。

    Apache环境搭建: https://blog.csdn.net/weixin_43288201/article/details/106841110

    4、HTML和JavaScript的简单使用

    HTML:
    网页的本质就是HTML,通过结合使用其他的Web技术(如:脚本语言、CGI、组件等),
    可以创造出功能强大的网页。因而,HTML是Web编程的基础,也就是说万维网是建立在超文本基础之上的。

    JavaScript:
    JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用, 用来给HTML网页增加动态功能
    HTML和JavaScript的简单使用:https://blog.csdn.net/weixin_43288201/article/details/106926274

    5、AJAX和CGI 技术的应用及案例

    AJAX:
    AJAX 不是语言 而是(基于js和xml)技术
    概述:
    1、AJAX是 Asynchronous JavaScript And XML的缩写
    2、AJAX 是一种用于创建快速动态网页的技术
    3、AJAX 不是新的编程语言,而是一种使用现有标准的新方法
    4、AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
    传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面
    5、AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
    有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等
    浏览器与服务器通信采用的就是AJAX技术,AJAX核心是XMLHttpRequest对象

    CGI
    CGI(Common Gateway Interface)是WWW技术中最重要的技术之一 , 有着不可替代的重要地位 , CGI是外部应用程序(CGI程序)于Web服务器之间的接口标准 , 实在CGI程序和Web服务器之间传递信息的规程 . CGI规范允许Web服务器执行外部程序 , 并将它们的输出发送给Web浏览器 . CGI 讲Web的一组简单的静态超媒体文档变成一个新的交互式媒体 .

    Common Gateway Interface , 简称CGI . 在物理上是一段程序 , 运行在服务器上 , 提供客户端的HTML页面的接口 . 下面举个例子 现在的个人主页上大部分都有一个留言本 . 留言本的工作是这样的 : 先由客户端输入一些信息 , 如名字之类的东西 . 接着用户按一下 " 留言 " (到目前为止的工作都在客户端进行) , 浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中 , 于是CGI程序在服务器上按照指定的方法进行处理 . 在本例中就是把用户提交的信息存入指定的文件中 . 然后CGI程序给客户端发送一个信息 , 表示请求的任务已经结束 . 此时用户在浏览器里面看到 " 留言结束 " 的字样 . 整个过程就是这样的 .

    绝大多数的CGI程序用于解释处理来自表单的输入信息 , 并在服务器产生相应的处理 , 或将相应的信息反馈给浏览器 . CGI程序是网页具有交互功能

    AJAX和CGI 技术的应用:https://blog.csdn.net/weixin_43288201/article/details/106930536

    展开全文
  • 随着BS端对于地图展示的要求,传统的渲染方式已经不能满足要求(需要的前置条件太多,而且地图信息越丰富其渲染越慢,彼时PC的显卡及CPU也都比较弱),于是诞生了瓦片地图。瓦片地图的定义如下: 瓦片地图金字塔...
  • BS模式

    2017-08-22 14:28:00
    BS架构 编辑 B/S结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是...
  • 服务器与实体服务器的利弊 内容精选换一换登录Windows弹性云服务器如图1所示。(可选)使用密钥文件解析密码。对于密钥方式鉴权的弹性云服务器,需先通过管理控制台提供的获取密码功能,将创建弹性云服务器时使用的...
  • 实体服务器与云服务器 内容精选换一换登录Windows弹性云服务器如图1所示。(可选)使用密钥文件解析密码。对于密钥方式鉴权的弹性云服务器,需先通过管理控制台提供的获取密码功能,将创建弹性云服务器时使用的密钥...
  • CSBS服务早期提供的老备份格式无法支持快速创建云服务器,因此,如果您的整机镜像是通过老备份格式制作的,则该整机镜像不支持快速创建弹性云服务器功能。CSBS服务当前已支持新的备份格式,通过新的备份格式制作的...
  • 新购买的云服务器为GPU加速型,用于部署应用,提供计算、图形渲染等功能。登录控制台,在服务列表中选择“计算 > VR云渲游平台”。在左侧导航栏,选择“云服务器列表”。单击右上方的“购买云服务云服务器可以在...
  • 新购买的云服务器为GPU加速型,用于部署应用,提供计算、图形渲染等功能。登录控制台,在服务列表中选择“计算 > VR云渲游平台”。在左侧导航栏,选择“云服务器列表”。单击右上方的“购买云服务SAP S/4HAN...
  • CSBS服务早期提供的老备份格式无法支持快速创建云服务器,因此,如果您的整机镜像是通过老备份格式制作的,则该整机镜像不支持快速创建弹性云服务器功能。CSBS服务当前已支持新的备份格式,通过新的备份格式制作的...
  • BS】总结

    千次阅读 热门讨论 2016-12-31 17:39:25
    单从Web端的网页来看BS开发,个人看来,可以分为静态和动态两块知识。  ● 静态的内容是用于呈现的HTML,CSS是把HTML中用于描述样式的内容抽离出来,集中处理。  ● 动态的内容就是JavaScript负责页面的效果,操作...
  • 通过创建应用,将待使用的应用内容部署至云上,分配GPU加速型云服务器资源,提供渲染能力。当您需要新增一个应用时,请按本节内容进行操作。创建应用。在左侧导航栏,选择“应用管理”。在“应...
  • 所谓的浏览器服务器端测试,也就是常说Browse/Server(B/S)架构测试。是刚踏入测试行业的小白们,最先接触的测试。例如,业务逻辑很简单的门户**,业务较复杂的MES系统等。针对这类B/S架构的应用,在进行功能、自动化...
  • CS/BS

    2014-09-14 10:56:39
    CS和BS是软件架构模式: C/S:Client/Server:客户端/服务端架构: B/S:Browser/Server:浏览器/服务器架构: C/S:  VB,Delphi,VC++,C#,Javaawt/swing:比如桌面QQ,扫雷,拱猪等运行在桌面的程序.  特点:  在...
  • 内容精选换一换当我们部署在裸金属服务器上的系统出现外部病毒入侵、人为误操作、业务软件Bug等故障场景时,可以通过云服务器备份服务(Cloud Server Backup Service,CSBS)为裸金属服务器创建定期自动备份(备份周期...
  • CSBS服务早期提供的老备份格式无法支持快速创建云服务器,因此,如果您的整机镜像是通过老备份格式制作的,则该整机镜像不支持快速创建弹性云服务器功能。CSBS服务当前已支持新的备份格式,通过新的备份格式制作的...
  • 响应时间: 指的是客户发出请求到得到响应的整个过程的...响应时间=网络传输时间(请求)+服务器处理时间(一层或是多层)+网络传输时间(响应)+页面前段解析时间 简化的浏览器响应时间的计算模型: 浏览器响应时间...
  • 目前弹性云服务器备份可以通过“云服务器备份”和“云硬盘备份”功能实现:云服务器备份(推荐):如果是对弹性云服务器中的所有云硬盘(系统盘和数据盘)进行备份,推荐使用弹性云服务器创建成功后,您可以根...
  • 100t容量云服务器 内容精选换一换手把手教你用netperf工具、iperf3工具,测试弹性云服务器间网络性能。主要包括“测试准备”、“TCP带宽测试”、“UDP PPS测试”和“时延测试”。被测机:被压力测试网络性能的弹性云...
  • 云存储服务器1t费用 内容精选换一换计费项包括云服务器备份功能、数据库服务器备份功能、备份存储和备份跨区域复制。云服务器备份功能:备份未部署数据库的云服务器时购买,提供崩溃一致性备份,保证云服务器下多个...
  • BS与CS的恩恩怨怨

    热门讨论 2017-08-14 11:41:01
    前言 刚刚结束了C/S项目的学习,学习了这么久,似乎还不是很...服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如ORACLE、SYBASE、InfORMix或 SQL Server。客户端需要安装专用的客户端软件。它是
  • 阿里云ECS 云服务器和轻量应用服务器 区别

    万次阅读 多人点赞 2019-05-28 11:05:22
    什么是阿里云轻量应用服务器? 轻量应用服务器是面向入门级云计算及简单应用用户,提供基于单台云服务器的域名管理、应用部署、安全和运维管理的一站式综合服务。用户可以选择精品应用镜像(比如wordpress),并可...
  • Tomcat服务器

    2021-05-07 10:00:09
    服务器 服务器相关概念 以前的资源,比如:index.html,只能在本地电脑A中进行访问,如果想要让index.html被局域网内的其他设备进行访问,那么就需要在电脑A安装服务器软件...bs结构:所有的资源(包括html、css、j
  • 服务器租赁费用 内容精选换一换使用已有的云备份制作整机镜像,可用于将云备份创建为新的弹性云服务器。云备份(Cloud Backup and Recovery, CBR)服务提供对云硬盘、弹性云服务器和裸金属服务器的备份保护服务,并...
  • 服务器蓝牙 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。华为云帮助中心,为用户提供...
  • 云免流服务器限速 内容精选换一换在您申请了弹性云服务器后,可以通过管理控制台查看和管理您的弹性云服务器。本节介绍如何查看弹性云服务器的详细配置,包括弹性云服务器名称、镜像信息、系统盘、数据盘、虚拟私有...
  • 云媒体服务器 内容精选换一换媒体处理包括媒体素材的上传、下载、编目、节目转码和数据归档等工作,涉及音视频数据的存储、调用和管理,根据其业务特性对共享的文件系统有如下要求:媒体素材的视频码率高,文件规模...
  • 服务器是实体东西吗 内容精选换一换登录Windows弹性云服务器如图1所示。(可选)使用密钥文件解析密码。对于密钥方式鉴权的弹性云服务器,需先通过管理控制台提供的获取密码功能,将创建弹性云服务器时使用的密钥...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,171
精华内容 1,268
关键字:

bs服务器渲染