Web开发路线与Nodejs基础

前言

7. 遇到标签,并执行。

8. Javascript脚本命令浏览器隐藏掉代码中的某个

(style.display=”none”),浏览器重新渲染这部分。

9. 遇到,渲染结束。

10. 假设用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下标签的CSS路径。浏览器又需重新渲染页面。

BootStrap

BootStrap是什么

Bootstrap 是由两个 twitter 员工开发并开源的前端框架,久经考验,减少了测试的工作量。站在巨人的肩膀上,不重复造轮子。

同时,Bootstrap 的代码有着非常良好的代码规范,从中也可以学习到很多,在 Bootstrap 的基础之上创建项目,日后代码的维护也变得异常简单清晰。

基于 Less、丰富的 Mixin

Bootstrap 的一大优势就是它是基于 Less 打造的,并且也有 Sass版本。正因为如此,它一推出就包含了一个非常实用的 Mixin 库任你调用。

举个很简单的例子,当你平时要用到一些 css3 属性的时候,你要写不同的浏览器写不同的 -prefix-,比如圆角 border-radius :

-webkit-border-radius: 10px;

-moz-border-radius:10px;

-border-radius:10px;

但是通过 Bootstrap 给你预设好的 mixin,你直接写成这样就可以了:

include border-radius (10px);

Bootstrap 是目前最好的基于 Less(Sass) 的前端框架,丰富而实用的 Mixin 应该是其最好的地方。

可以 Responsive 的栅格系统

Bootstrap 的 栅格 (Grid) 系统帮你搭好了实现 Responsive Design 的基础框架,并且非常容易修改。如果你是一个新手,Bootstrap 可以帮助你在非常短的时间内上手 Responsive Design。

丰富的组件

Bootstrap 的HTML组件 和 Js组件 非常丰富,并且代码简洁,非常易于修改,工作效率的极大提升。

插件

另外、由于 Bootstrap 的火爆,又出现了不少围绕 Bootstrap 而开发的插件。

我不喜欢用框架,我喜欢原生的写法

Bootstrap 并不能帮你完成所有事情,它只是一个框架,在这个框架上面你可以任意的发挥,并且发挥得更好,但是这需要一个过程。

这是给无设计师的团队或者程序员用的

虽然默认的样式足够用,但仍然可以通过BootStrap源码中的LESS进行深度定制。

JavaScript

版本

JavaScript已经被Netscape公司提交给ECMA制定为标准,称之为ECMAScript,标准编号ECMA-262。目前最新版为ECMA-262 5th Edition。符合ECMA-262 3rd Edition标准的实现有:

Microsoft公司的JScript.

Mozilla的JavaScript-C(C语言实现),现名SpiderMonkey

Mozilla的Rhino(Java实现)

Digital Mars公司的DMDScript

Google公司的V8

WebKit

Web开发学习资源

W3CSchool

FreeCodeCamp

实验楼-HTML基础入门

实验楼-HTML5基础入门

学习路线

静态页:html->css->html5->css3->bootstrap->javascript->jquery

动态页:ajax->nodejs/php/java->mongodb/sql

IDE

初学 sublime text /notepad++

熟练/开发 sublime text with plugin / HBuilder / WebStorm

高手 gvim

大神 txt

NodeJs

能解决什么问题?

Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着客户群的增长,如果希望支持更多用户,那么,必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。

Node 解决这个问题的方法是:更改连接到服务器的方式。每个连接仅维持一个在 Node 引擎的进程中运行的事件循环,而不是为每个连接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。

这使得运行它的服务器能支持数万个并发连接。

非阻塞原理

应用层js

-> Google V8

-> node api            event quene

|              |

->libUV -> event loop

|

worker threads

适用场景

RESTful API

提供 RESTful API 的 Web 服务接收几个参数,解析它们,组合一个响应,并返回一个响应(通常是较少的文本)给用户。这是适合 Node 的理想情况,可以构建它来处理数万条连接。

海量消息队列

想像一下像 Twitter 这样的公司,它必须接收 tweets 并将其写入数据库。实际上,每秒几乎有数千条 tweet 达到,数据库不可能及时处理高峰时段所需的写入数量。Node 能处理数万条入站 tweet。它能快速而又轻松地将它们写入一个内存排队机制(例如 memcached),另一个单独进程可以从那里将它们写入数据库。Node 在这里的角色是迅速收集 tweet,并将这个信息传递给另一个负责写入的进程。想象一下另一种设计(常规 PHP 服务器会自己尝试处理对数据库本身的写入):每个 tweet 都会在写入数据库时导致一个短暂的延迟,因为数据库调用正在阻塞通道。由于数据库延迟,一台这样设计的机器每秒可能只能处理 2000 条入站 tweet。每秒处理 100 万条 tweet 则需要 500 个服务器。相反,Node 能处理每个连接而不会阻塞通道,从而能够捕获尽可能多的 tweets。一个能处理 50,000 条 tweet 的 Node 机器仅需 20 台服务器即可。

大规模统计数据

如果在线玩过《使命召唤》这款游戏,查看游戏统计数据时,就会立即意识到一个问题:要生成那种级别的统计数据,必须跟踪海量信息。这样,如果有数百万玩家同时在线玩游戏,而且他们处于游戏中的不同位置,那么很快就会生成海量信息。Node 是这种场景的一种很好的解决方案,因为它能采集游戏生成的数据,对数据进行最少的合并,然后对数据进行排队,以便将它们写入数据库。

业界案例

天猫首页新老版本性能对比

模块化

superagent + body-parser + schedule = 简单爬虫

express + mongoose = 接口服务

filestream + express = 内容管理系统

较理想的技术体系

HTML -> |BootStrap -> | 自适应布局 -> | 栅格系统

|            | 响应式 -> |

|            | 组件 ->  |

|            | 扩展 ->  | -> | 导航条

|                              | 轮播组件

|                              | 缩略图

|                              | 模态框

|                              | 滚动监听

|                              | ...

|

|JQuery  -> |Ajax

|DOM

NodeJs -> | Http -> | express -> | render()

|                      | redirect()

|                      | jsonp()

|

| MongoDB | mongoose -> | Model

|                      | Model.save

|                      | find()

|

| Template Engine -> | ejs/jade

|

|

NPM -> | init

| install -> | webpack

| gulp

回调地狱

setTimeout(function(name){

varcatList = name +',';

setTimeout(function(name){

catList += name +',';

setTimeout(function(name){

catList += name +',';

setTimeout(function(name){

catList += name +',';

setTimeout(function(name){

catList += name;

console.log(catList);

},1,'Lion');

},1,'Snow Leopard');

},1,'Lynx');

},1,'Jaguar');},1,'Panther');

Promise解决回调地狱

以读取文件为案例,下面是使用回调实现读取文件后应该做什么事情(输出打印):

readFile(function(err, data){

if(err)returnconsole.error(err)

console.log(data)

})

如果我们的readFile函数返回一个promise,那么我们可以如下实现同样的逻辑(输出打印):

varpromise = readFile()

promise.then(console.log,console.error)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容