摘要 : 筆者也是在互聯(lián)網(wǎng)軟件行業(yè)里面摸爬滾打十年多了,回頭想想青蔥歲月,很多時間都花在各種技術(shù)熱潮的追逐上,有些是有價值的,也有些因為沒人指導走過彎路,下面我就把我自己接觸到這么多優(yōu)秀的開源軟件給大家做個梳理。也許比較枯燥無聊,供大家以后查閱。
前沿
筆者也是在互聯(lián)網(wǎng)軟件行業(yè)里面摸爬滾打十年多了,回頭想想青蔥歲月,很多時間都花在各種技術(shù)熱潮的追逐上,有些是有價值的,也有些因為沒人指導走過彎路,下面我就把我自己接觸到這么多優(yōu)秀的開源軟件給大家做個梳理。也許比較枯燥無聊,供大家以后查閱。
LAMP:
屬于創(chuàng)業(yè)公司的最經(jīng)典組合。
Linux: 不用說,大多數(shù)公司都用這個,隨著虛擬機越來越成熟,大家喜歡創(chuàng)建虛擬的Image,來提供某個Linux版本,我接觸過一些常用的,Ubuntu,Redhat,Debian, Gentoo, CentOS, Federo,OpenSuse。
Apache: 最著名的web server,Apache也是開源最活躍的社區(qū),非常成熟的web服務(wù)器,有段時間被性能卓越的Nginx趕超,但目前穩(wěn)定性和模塊成熟度還是最高,廣受好評。有人比較這兩者的差異:Nginx vs Apache
PHP:當時很多網(wǎng)站用Java寫的,php提出就是為了簡化網(wǎng)站開發(fā),為web而寫。Facebook早年也是PHP寫的,是很靈活的腳本語言,Coursera之前也是用Php搭建的,但卻是很難維護,主要問題是每個人都可以寫一個小框架,編程風格隨便,難統(tǒng)一。除了Facebook他們花了大量人力去完善,基本上重寫了Php,底層加速成C++,也發(fā)明了新語言Hack。
MySQL:經(jīng)典開源數(shù)據(jù)庫,被Oracle收購,F(xiàn)acebook, Baidu, Taobao都是大量基于MySQL做出非常穩(wěn)定靠譜的系統(tǒng)。我記得Pinterest也總結(jié)過他們?yōu)槭裁从肕ySQL提高他們的規(guī)模。
編程語言:
有個笑話,讓程序員打架的一個最有效的方式是去討論區(qū)問大家那種編程語言最好,這就會沒完沒了的討論。大致分成C++派,Java派,Python等腳本派。
C/C++: 可能很多人入門都是啃著譚浩強的C程序設(shè)計,這種語言很強大,既高性能,又靈活(指針,地址,二維指針,指針數(shù)組),名詞特別多(多態(tài),重載,重用,范型,模板類,元編程),坑也特別多,容易造成內(nèi)存泄露,野指針,在大學里面吃了不少苦頭,瘋狂看各種C++經(jīng)典,秘籍,后來去了創(chuàng)業(yè)公司和百度都是大量使用,里面也很多人玩的如火純青,面試時候經(jīng)常出個寫個線程安全的C++單例模式,析構(gòu)能否多態(tài)或者什么寫個調(diào)用順序,讓面試者騷手撓腮,欲罷不能,想想自己也折磨過這些面試者,真是罪過啊。這幾年視野廣了,不接觸C++了,回過頭來看還是覺得當年有些走火入魔,沒必要自己折磨自己。
Java: 估計是目前用的最廣的項目語言,容易上手,概念簡單,無數(shù)的庫,大量的代碼。我就不多介紹了,我自己也是大半的項目用Java寫的。缺點時配置比較煩,很多什么XML,Config,適合寫服務(wù)端。
LUA:大量應(yīng)用在大型游戲的腳本語言,主要是高性能,語言規(guī)范精簡、運行時庫小,與C/C++交互方便,我在百度做云計算平臺時候也是用它作為嵌入式腳本。
Python:跟Perl, PHP,合成3P語言,都是腳本:) 非常方便實用,初學編程就可以拿它練習,有很多方便的庫,比如urlib, beautifulsoap。有句話說:人生苦短 我用Python。做數(shù)據(jù)分析的有個超好的工具叫iPython,它是結(jié)合在線notebook,可以交互式編程,非常爽。據(jù)說Python的創(chuàng)始人在Dropbox,當年他簡歷就一句話,說I wrote Python. 在面試Google時候還被一些人誤會,想會python算個啥,但人家是作者。有一本書 集體智慧編程 (豆瓣) 用Python作為實踐做機器學習,推薦給大家。
GO:Google開源的語言,比C++容易上手,卻有相似的性能,很多從Google出來的人喜歡人,據(jù)說Square, Pinterest就在用。Go語言有哪些好處,誰用誰知道,為什么要使用 Go 語言,Go 語言的優(yōu)勢在哪里?
Scala:各種集大成,面向?qū)ο螅瘮?shù)式編程,面向過程。我目前也在學習,東西實在太多,Coursera上面有Scala作者的一門課,https://www.coursera.org/course/progfun 公司技術(shù)部也主推這種語言,這也是為啥我們墻上員工證書中最多就是Scala這門課的。另外著名的Spark,Kafka也是Scala寫的,確實在高性能,高并發(fā)上面表現(xiàn)不錯,又保持了優(yōu)雅精煉的寫法。值得玩味。
Javascript: 本來這是個前端客戶端的動態(tài)語言,做一些頁面特效,主要特點是天然支持異步,又跨平臺,弱類型,比較安全 (有sandbox),有人把它拓展到后臺,隨著V8,Node.js, Angular出現(xiàn)也顯得越來越厲害了。
還有一些語言,Ruby,R,Object-C, Swift,Matlab, Perl, SQL, D, Lisp就是偶爾用了,有個TIOBE編程語言排名。
J2EE 三劍客:
Java出來之后,為了提高大規(guī)模網(wǎng)站的開發(fā)效率,提出了很多框架,最經(jīng)典就是分層J2EE, 在企業(yè)級,如銀行系統(tǒng)大量使用,什么servlet,java bean,EJB,RMI,JMS, JSP,JNDI,JDBC,容器,管道,數(shù)據(jù)庫連接池,當時最火的就是什么Java架構(gòu)師,年薪百萬啊有木有。那當然一般人玩不會了,后來出現(xiàn)了輕量級的MVC解耦合分層結(jié)構(gòu),在本科時候經(jīng)常做管理系統(tǒng),就使用這種輕量級J2EE框架,搭系統(tǒng)。里面重要3個組件
Hibernate:數(shù)據(jù)持久框架,ORM,對數(shù)據(jù)庫的CRUD操作進行對象化映射。
Spring MVC: 中的控制層,但容易造成Config的泛濫,后來Linkedin中起了個項目就叫Kill Spring,改成下面提到的Rest.Li
Struts:View層,有很多tag庫可以選擇,有個JSTL 標簽可以搭配選擇。
Web 服務(wù)器:
Lighttpd:當時在百度我就是把它作為云平臺(Baidu App Engine)的服務(wù)器。為了徹底搞懂它,我真的看了它所有的源代碼,代碼很精煉,大概5w行,又研讀了所有它的maillist,jira上面的進度,還給開源社區(qū)打了補丁。感覺就像武林高手修煉一樣。
Nginx:高性能web服務(wù)器,異步,C10K (意思是單機同時維持一萬的連接)杰出代表。俄國人寫的,代碼可讀性不如上面的,但確實功能更強大些。
Tomcat/Jetty: Java J2EE容器,經(jīng)常用的,我記得當時最喜歡看到配置成功后,頁面顯示的小貓圖案。在Linkedin,這兩個都用。一個用來做前端服務(wù)器,一個用來做后端。
框架:
Rest.li:RESTful是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構(gòu)風格。使用HTTP協(xié)議中的請求方法來對應(yīng)后端操作數(shù)據(jù)時候的增刪添改(CRUD)。LinkedIn提出Rest.Li編程框架,是一款REST+JSON框架,使用動態(tài)發(fā)現(xiàn)和簡單的異步API即可構(gòu)建健壯可伸縮的服務(wù)架構(gòu)體系。
Thrift:Apache Thrift 是Facebook 實現(xiàn)的一種高效的、支持多種編程語言的遠程服務(wù)調(diào)用的框架。
ProtoBuf:Google提出的跟上面很像,用來序列化結(jié)構(gòu)化數(shù)據(jù)的技術(shù),支持多種語言持久化數(shù)據(jù)或者序列化成網(wǎng)絡(luò)傳輸。
CloudStack:cloud computing框架。
Helix:通用的集群管理框架,Linkedin出品。
前端技術(shù)
其實前端我接觸的并不多,但現(xiàn)在不是提倡Full Stack全棧工程師嘛。如果你掌握下面的會讓你如魚得水,不需要被UI,UE人員優(yōu)先級而影響。
Ruby on Rails:在web2.0時代,RoR一下子獲得很多創(chuàng)業(yè)公司的青睞,開發(fā)者將Rails作為一個框架來創(chuàng)建數(shù)據(jù)庫支持的Web應(yīng)用,它本身是一個完整的解決方案,通過默認的標準實踐(convention)可以很大的加快開發(fā)效率,無縫的整合所有子組件以提供給開發(fā)者一個統(tǒng)一的接口。當時Twitter早期也是用這個框架寫的,但這個也是雙刃劍,在性能和內(nèi)部機制上很難調(diào)節(jié)。
Django:Python的前端管理框架,直接生成管理頁面。有人經(jīng)常那上面的作為PK 相比于 Django、Pylon 等 Python 框架,Ruby on Rails 是否有很大的技術(shù)優(yōu)勢?
Smarty:PHP的一種模板語言,很容易上手。
Bootstrap:Twitter提出的HTML,CSS和JS框架,讓你的web app容易適配到各種平臺,比如手機上。
JQuery:Javascript的最流行的庫,可以做一些Ajax調(diào)用。
HTML5:就是下一代的HTML標準,增加了一些兼容的便簽,使得在手機和瀏覽器中閱讀效果一致。對應(yīng)的是Native APP,就是原生的從底層開始寫的APP。當年Facebook是走HTML5的路,發(fā)現(xiàn)不對勁,性能很差,體驗糟糕。趕緊轉(zhuǎn)變成Native APP才讓它重新贏得市場。
Node.js:js寫的后端服務(wù)器,處理高并發(fā)場景性能佳,使用 Node.js 的優(yōu)勢和劣勢都有哪些?特別適合移動的服務(wù)器端。 Socket.IO是其中一個組件,為了在瀏覽器和移動設(shè)備上創(chuàng)建實時應(yīng)用而產(chǎn)生的,它可以模糊不同傳輸機制之間的差異
D3:各種可視化的效果,確實非常酷。
Impress.js: 基于CSS3轉(zhuǎn)換和過渡、工作于現(xiàn)代瀏覽器、并受prezi.com的理念啟發(fā)的演示工具。
Backbone.js:前端的MVC,為復(fù)雜Javascript應(yīng)用程序提供模型(models)、集合(collections)、視圖(views)的結(jié)構(gòu)。
搜索
Nutch:是一個開源Java 實現(xiàn)的搜索引擎,當時Hadoop的前身就是為了做這個項目。
Lucene:基于Java的全文檢索引擎,很有名也非常強大,elasticsearch就是基于這個開源基礎(chǔ)二次開發(fā)。
Solr:基于Lucene的XML接口的獨立運行的搜索服務(wù)器。通過HTTP協(xié)議以XML格式將文檔放入搜索服務(wù)器(索引),GET來查詢搜索服務(wù)器得到結(jié)果。
Sphinx:Sphinx是一個基于SQL的全文檢索引擎,可以結(jié)合MySQL,PostgreSQL做全文搜索,它可以提供比數(shù)據(jù)庫本身更專業(yè)的搜索功能。反正比MySQL內(nèi)置的全文檢索要快很多。
Hadoop生態(tài)系統(tǒng)
這一塊關(guān)注過很久了,目前很多很成熟的組件。這是一張生態(tài)圖,我大多數(shù)都在本文中介紹過了,主要的組件都是為了方便大家從底層的MapReduce模型中脫離出來,用高層語言來做分布式計算。
HBase:是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),利用HBase技術(shù)可在廉價PC Server上搭建起大規(guī)模結(jié)構(gòu)化數(shù)據(jù)集群。像Facebook,都拿它做大型實時應(yīng)用 Facebook's New Realtime Analytics System: HBase to Process 20 Billion Events Per Day
Pig:Yahoo開發(fā)的,并行地執(zhí)行數(shù)據(jù)流處理的引擎,它包含了一種腳本語言,稱為Pig Latin,用來描述這些數(shù)據(jù)流。Pig Latin本身提供了許多傳統(tǒng)的數(shù)據(jù)操作,同時允許用戶自己開發(fā)一些自定義函數(shù)用來讀取、處理和寫數(shù)據(jù)。在LinkedIn也是大量使用。
Hive:Facebook領(lǐng)導的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進行運行。其優(yōu)點是學習成本低,可以通過類SQL語句快速實現(xiàn)簡單的MapReduce統(tǒng)計。像一些data scientist 就可以直接查詢,不需要學習其他編程接口。
Cascading/Scalding:Cascading是Twitter收購的一個公司技術(shù),主要是提供數(shù)據(jù)管道的一些抽象接口,然后又推出了基于Cascading的Scala版本就叫Scalding。Coursera是用Scalding作為MapReduce的編程接口放在Amazon的EMR運行。
Zookeeper:一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn)。
Oozie:一個基于工作流引擎的開源框架。由Cloudera公司貢獻給Apache的,它能夠提供對Hadoop MapReduce和Pig Jobs的任務(wù)調(diào)度與協(xié)調(diào)。
Azkaban: 跟上面很像,Linkedin開源的面向Hadoop的開源工作流系統(tǒng),提供了類似于cron 的管理任務(wù)。
Tez:Hortonworks主推的優(yōu)化MapReduce執(zhí)行引擎,與MapReduce相比較,Tez在性能方面更加出色。
數(shù)據(jù)存儲:(NoSQL)
當時為了解決Scale的問題,伴隨分布式系統(tǒng)發(fā)展,形成各個NoSQL軟件,百花齊放。下面介紹常見的一些:
Memcached:是高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提高動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。Memcached基于一個存儲鍵/值對的hashmap。性能瓶頸第一個就要想到用這個。有點萬金油的感覺。
Redis:一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多。
Cassandra:名稱來源于希臘神話,是特洛伊的一位悲劇性的女先知的名字。最初由Facebook開發(fā),用于儲存收件箱等簡單格式數(shù)據(jù),集Google BigTable的數(shù)據(jù)模型與Amazon Dynamo的完全分布式架構(gòu)于一身,可擴展型和性能都不錯,Coursera也是大量使用作為數(shù)據(jù)對象存儲。
Berkeley DB:文件數(shù)據(jù)庫,介于關(guān)系數(shù)據(jù)庫與內(nèi)存數(shù)據(jù)庫之間,使用方式與內(nèi)存數(shù)據(jù)庫類似,它提供的是一系列直接訪問數(shù)據(jù)庫的函數(shù)。之后被Oracle收購了。
CouchBase:文檔型數(shù)據(jù)庫,由CouchOne與Membase合并,之后的公司叫做Couchbase,功能還是挺強大的,自動備份,自動分片,在Linkedin廣告組和運維部門都大力推薦。
RocksDB: 比LevelDB更彪悍的引擎,代碼層面上是在LevelDB原有的代碼上進行開發(fā)的,但卻借鑒了Apache HBase的一些好的idea。
LevelDB:Google開發(fā)的,一個速度非常塊的KV存儲庫(storage library),它支持字符串的key與value,并且這種映射關(guān)系按key排序(ordered mapping)
MongoDB:一個基于分布式文件存儲的數(shù)據(jù)庫。為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。 介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間,是非關(guān)系數(shù)據(jù)庫當中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。
下面幾個都是Linkedin開源的數(shù)據(jù)技術(shù) Projects | LinkedIn Data Team
Voldemort:NoSQL 鍵/值存儲引擎,完全是分布式且去中心化的,支持分區(qū)與容錯。
Espresso:文檔型NoSQL數(shù)據(jù)存儲系統(tǒng),MySQL作為底層數(shù)據(jù)存儲,具有高性能、高擴展性、支持事務(wù)、容錯能力等重要特征。
Databus:實時低延遲數(shù)據(jù)抓取系統(tǒng)
AMP Lab三劍客
AMP Lab 是Berkeley的一個王牌實驗室,匯集系統(tǒng),數(shù)據(jù)庫,機器學習,各個領(lǐng)域的教授和豐富工業(yè)經(jīng)驗的學生,它們做出了很多有意思得到工業(yè)界認可的技術(shù)。
Mesos:一個分布式環(huán)境的資源管理平臺,它使得Hadoop、MPI、Spark作業(yè)在統(tǒng)一資源管理環(huán)境下執(zhí)行。它對Hadoop2.0支持很好。Twitter,Coursera都在使用。
Spark:已經(jīng)成為Apache的頂級項目了,2014年的當紅炸子雞,我在這個帖子里面也介紹的比較全面了,有什么關(guān)于 Spark 的書推薦? - Spark,它們也成立公司Databricks對cloud管理進行產(chǎn)品化。
Tachyon:是一個高容錯的分布式文件系統(tǒng),允許文件以內(nèi)存的速度在集群框架中進行可靠的共享,就像Spark和MapReduce那樣。有幸跟項目發(fā)起人李浩源聊過幾次,這個項目目前發(fā)展非常快,甚至比Spark當時還要驚人。目前到0.6版本,參與開源的規(guī)模和版本迭代速度都很快。
先進大數(shù)據(jù)技術(shù):流式,實時
由于Hadoop的火紅,整個業(yè)界都在喋喋不休地談?wù)摯髷?shù)據(jù)。Hadoop的高吞吐,海量數(shù)據(jù)處理的能力使得人們可以方便地處理海量數(shù)據(jù)。但是,Hadoop的缺點也和它的優(yōu)點同樣鮮明——延遲大,響應(yīng)緩慢,運維復(fù)雜。
Storm: 所謂流處理框架,就是一種分布式、高容錯的實時計算系統(tǒng)。Storm令持續(xù)不斷的流計算變得容易。經(jīng)常用于在實時分析、在線機器學習、持續(xù)計算、分布式遠程調(diào)用和ETL等領(lǐng)域。Twitter是他們的主推。
Kafka: 是Linkedin開源的一種分布式發(fā)布-訂閱消息系統(tǒng),它主要用于處理活躍的流式數(shù)據(jù)。我面試過很多硅谷創(chuàng)業(yè)公司都在使用,比如最重要的用戶Tracking數(shù)據(jù)。LinkedIn的開發(fā)者也出來成立公司Confluent,最新發(fā)布platform。
Samza: 一個分布式流處理框架,專用于實時數(shù)據(jù)的處理,非常像Twitter的流處理系統(tǒng)Storm,LinkedIn開源了這項技術(shù)。跟上面的幾個技術(shù)就可以比較一下了,https://tsicilian.wordpress.com/2015/02/16/streaming-big-data-storm-spark-and-samza/
SummingBird:將批處理和流處理無縫連接,通過整合批處理與流處理來減少它們之間的轉(zhuǎn)換開銷。把上面的Storm跟Scalding結(jié)合起來,所謂Lambda Architecture。跟這個相關(guān)組件是Algebird: 利用一些概率算法HyperLogLog來提高計算速度。
Drill:先說Dremel,是Google 的“交互式”數(shù)據(jù)分析系統(tǒng)。可以組建成規(guī)模上千的集群,處理PB級別的數(shù)據(jù)。MapReduce處理一個數(shù)據(jù),需要分鐘級的時間。Dremel將處理時間縮短到秒級。Apache推出Dremel的開源實現(xiàn)Drill。
Druid:在大數(shù)據(jù)集之上做實時統(tǒng)計分析而設(shè)計的開源數(shù)據(jù)存儲。這個系統(tǒng)集合了一個面向列存儲的層,一個分布式、shared-nothing的架構(gòu),和一個高級的索引結(jié)構(gòu),來達成在秒級以內(nèi)對十億行級別的表進行任意的探索分析。
Impala: Cloudera公司主導開發(fā)的新型查詢系統(tǒng),它提供SQL語義,能夠查詢存儲在Hadoop的HDFS和HBase中的PB級大數(shù)據(jù),號稱比Hive快5-10倍,但最近被Spark的風頭給罩住了,大家還是更傾向于后者。
Spark Streaming:建立在Spark上的應(yīng)用框架,利用Spark的底層框架作為其執(zhí)行基礎(chǔ),并在其上構(gòu)建了DStream的行為抽象。利用DStream所提供的api,用戶可以在數(shù)據(jù)流上實時進行count,join,aggregate等操作。
Spark SQL: 之前Spark類似Hive的工具稱為Shark,現(xiàn)在新替代就是Spark SQL, Big Data Benchmark 里面也跟Impala性能比較。
工具類:
Make:很多同學在學校時候,認為編程就是在編輯器里面運行,當離開了IDE,他們就不知道該怎么辦。C語言的打包工具,比如解析依賴,生成二進制和可執(zhí)行程序。
Ant:Java的傳統(tǒng)打包工具,需要寫個build.xml
Gradle:新一代的編譯構(gòu)建工具,結(jié)合ivy自動匹配和下載官方穩(wěn)定版本
Homebrew: 最近幾年都用Mac平臺,那么包的管理可以用這個
Eclipse:使用最廣泛的IDE,著名的日蝕標識。它的出現(xiàn)就是吃掉SUN(Java誕生地),我大多時間用這個,后來也用過Intellij 不過是商業(yè)版本的。跟Eclipse相比,管理大型代碼庫時候速度快。
Docker:作為一種新興的虛擬化方式,Docker容器的啟動可以在秒級實現(xiàn),這相比傳統(tǒng)的虛擬機方式要快得多,運行時所需的資源比虛擬機少,而效率又比虛擬機高提供隔離的執(zhí)行環(huán)境。算是2014年上升最快的一個工具了。
JUnit:java的單元測試,屬于測試驅(qū)動的利器。
Git:強大的分布式代碼版本管理,Linux那么多分支都沒亂正是它的功勞。但還是挺復(fù)雜,一大堆命令比SVN要多多了。目前GitHub就是最大的源碼管理平臺,我們公司也用它的企業(yè)版。有個結(jié)合Git和代碼審查的工具由Facebook開發(fā),Phabricator
SVN: 簡化的代碼管理,還有perforce Amazon和Google也用。最老的是CVS估計現(xiàn)在沒人用了呃。
瀏覽器:
Firefox:開源瀏覽器,當時靠豐富插件很強大,就靠Google的默認搜索來維持,但Google也開發(fā)了Chrome,給Firefox市場份額極大打擊。所謂成也Google,敗也Google。這個組織是Mozilla,就跟Coursera是鄰居。我當時用過很多插件,比如proxy,去除廣告,F(xiàn)irebug來調(diào)試,還有什么換皮膚,監(jiān)控網(wǎng)絡(luò)流量等。
Webkit:自從蘋果開源了這么好的內(nèi)核引擎,Google就就直接用它開發(fā)了Chrome。當時做信息抽取,有一種辦法是基于視覺的信息提取,VIPS算法,如果通過webkit,就可以拿到正文的一些具體坐標和字體顏色大小,然后再分塊確定重點內(nèi)容做提取。
Spidermonkey:就是Mozilla旗下的一個JS解析引擎,我用這個是因為當時為了抓取網(wǎng)頁,一些很變態(tài)的網(wǎng)站比如水木社區(qū):( 把內(nèi)容寫在javascript里面,都是用字符串拼接起來,我為了獲取完整的源碼就要涉及到JS的解析。
V8: Google 的一個開源項目,是一個高效的JavaScript 引擎,像Node.js基于Google V8提供了基于事件的I/O處理