講故事:
她咬下嘴唇,默默地搓著衣角。辦公室已經空無一人,我不知道她在思索著什麼。下班後的寒冬臘月,刺骨的北風中空蕩的街區。
半晌,她悄悄問了十萬個為什麼:
程式設計師:「介個是JS腳本運行出錯的」,「介個好計算,跑個腳本就OK」,「介個bug要在雲端腳本進行修復」;測試大妹子操著東北方言:「可不咋地~效率有提升啊現在,俺們都是用自動化腳本解決問題滴」;數據分析師:「這條數據,需要重寫個腳本,Hadoop再跑三天」。「腳本」到底是什麼呢,它和「腳氣」究竟是什麼關係啊?
答:腳本,是使用一種特定的描述性語言,依據一定的格式編寫的可執行文件。
正當她陷入沉思之時,我又開始了一個美好的裝逼之旅。
「腳本」一詞其實令很多人懵逼。「很多人」這個概念包括了一部分程序猿在內。他們可能每天都在寫腳本,不過似乎並不十分清楚它的來源與為啥這麼叫的,就像現在很普遍的都把「網誌」叫做了「博客」,可你似乎並不清楚博客原本的含義。或者說,年會了你老闆天天喊要拍「VCR」,可他根本不知道「VCR」的本來意義。
腳本,英文:Script,咱們先看看它的釋義,作為名詞來件,是劇本的意思,作為動詞的話,那就是寫劇本的意思,亦做戲劇中底本的意思,譯做「腳本」似乎並不好理解,那理解成話劇、戲劇等的「劇本」就是OK。
對應在現實當中,提起劇本閃現腦的是一摞已經被翻得起了黑邊的A4紙,上面寫滿了密密麻麻的文字(都是我們能讀懂的哦)。劇本描述了這部劇的整個流程,出場、順序、包袱、臺詞、旁白、舞臺效果等等都囊括其中,同時按照劇本所編排的節奏與順序執行,一部劇的演出效果,應該等同於劇本描述。
類似按照劇本完成任務的工作或思維方式充斥整個生活,KFC負責清理衛生間的員工是以1小時為單位,籤到並且打掃衛生的。CCTV春晚的主持人是按照提前設計好的臺詞去主持節目的。富二代王思聰想當網紅,同樣也是有劇本的。
龐雜的生活場景,在高度抽象之後,被「抄襲」到計算機中。
腳本就是劇本
腳本是普通的文本文件(和txt類似)
腳本是批處理文件
腳本導演了一個序列事件的發生
腳本大幅提升一個例行任務的效率
在win系列作業系統當中常見擴展名為.bat的批處理文件,雙擊打開,出現一個黑底的窗口,同時若干白色文字迸發而出,這是批處理文件,也就是腳本。
cos寫了個很簡單的Windows作業系統下的批處理文件,用於實現列印 Disk C ,並且輸出C盤的目錄,最後停止在命令行界面,代碼如下:
雙擊批處理運行如下:
現在呈現的內容是這個文件執行了兩個步驟所得的結果:
1.列印「Disk C」;
2.調用 dir 命令輸出C盤目錄。
發現沒有,如果手工操作,要實現這兩個步驟至少要輸入兩次,現在用批處理,效率大幅提升有沒有? 哦,說明一點,不可以用剛剛這個例子來計算所得收益,你自行腦補,如果是一個每天都要操作,並且有數千步驟的操作流程,你看這樣是不是高效多了……
作為一個最簡單的腳本,是Windows系列作業系統直接支持滴。而JavaScript腳本則是瀏覽器支持的。同時寫JS的語法和Windows批處理命令的語法規則是不相同的,不相同的寫法,運行在不同的環境中。腳本的運行環境被稱為「解釋器」,就說怎麼理解這段純文本編寫的腳本。
假設你去了泰國,腳本是「薩瓦迪卡」,對應的解釋器就是泰語。
要是你到了韓國,腳本寫的是「阿尼阿塞呦」,對應的解釋器就是韓語。
每種腳本都對應著一種解釋器,JavaScript最流行的解釋器是Chrome V8引擎(裝逼可用。我在文末解釋下)。
假設腳本語言是「錘子」,那在陝西和其他地區的解釋器當中的意義是不一樣的,這種只適用於漢語,畢竟漢語由於地域劃分,解釋器會很多的。
現在哪些腳本語言比較流行?
PS: Lua(這個不要讀成「擼啊」,標準讀音是「擼哇」,好像讀起來就感覺沒那麼下流了是不是/壞笑。)
腳本語言有很多種,也有相應配套的解釋器。每種有其特殊的使用場景或擅長場景,不同場景要選用不同的工具。在一些交流群經常看到很多程序猿裝逼:「我只用Python」。我告訴你哈,這個是因為他就只會Python。
下文裝逼可用,看不看隨你。
Chrome V8引擎:
V8 是一個全新的Google的開源JavaScript引擎,它在設計之初就以高效地執行大型的JavaScript應用程式為目的。
在一些性能測試中,V8 比 Internet Explorer 的 JScript 、Firefox(IE9使用JS引擎為:Chakra引擎)中的 SpiderMonkey (火狐4.0後用的JS引擎為JaegerMonkey) 以及 Safari 中的JavaScriptCore 要快上數倍。
V8 採用 C++ 編寫,可在谷歌瀏覽器中使用。
V8 根據 ECMA-262 第三版中的說明使用 ECMAScript,並在使用 IA-32或 ARM 處理器的 Windows XP 和 Vista、Mac OS X 10.5 (Leopard) 以及 Linux 系統中運行。
V8 可以獨立運行,也可以嵌入任何C++應用程式中。
V8 性能的3個關鍵方面:①快速屬性訪問;②動態生成機器碼;③高效的垃圾回收;
在執行垃圾回收的時候會中斷程序的執行。大部分情況下,每個垃圾收集周期只處理整個對象堆的一部分,這讓程序中斷造成的影響得以減輕。
總是知道內存中所有的對象和指針所在的位置,這避免了非 accurate 的垃圾收集器中普遍存在的由於錯誤地把對象當作指針而造成的內存溢出的情況。