1. 程式人生 > >前端技術選型及專案構建流程

前端技術選型及專案構建流程

前端框架React 與 Vue 比較選擇

Vue優勢:

1.模板和渲染函式的彈性選擇

2.簡單的語法及專案建立

3.更快的渲染速度和更小的體積

1.Vue應用的預設選項是把markup放入HTML檔案中。資料繫結表示式使用的是與Angular相似的雙大括號(moustache)語法,而指令(特殊的HTML屬性)則用於向模板中新增功能。React應用則與之相反,不使用模板,而是要求開發者藉助JSX在JavaScript中建立DOM。

2. 一個簡單的Vue專案能不需要轉譯直接使用在瀏覽器中,這使得在專案中使用Vue可以像使用jQuery一樣容易。當然這對於React來說在技術上也是可行的,但典型的React程式碼是更多地依賴於JSX和諸如class等ES6特性的。而Vue的簡單則是更深層地源於其設計的。React裡的狀態(state)是不可變(immutable)的,因此你不能直接地改變它,而是要用setState API方法。React是通過比較當前狀態和前一個狀態的區別來決定何時及如何重新渲染DOM的內容,因此需要使用不可變的狀態。而與此相反的是,Vue中的資料是可變的(mutated),所以同樣的資料變數可以用簡潔得多的方式修改。

3.當應用程式的狀態改變時,React和Vue都會構建一個虛擬DOM並同步到真實DOM中。兩者都有它們各自的優化這個過程的方式。Vue的核心開發者提供了一個benchmark測試,來表明Vue的渲染系統比React的更快,具體基準的設定以及同其他框架的比較詳見vuejs.org。從實用的角度來看,這種benchmark只跟邊緣情況有關,而大部分應用程式中不會經常進行這種操作,所以這不應該被視作一個重要的比較點。但是,頁面大小則是與所有專案有關的,這方面Vue又一次優於React,它目前的版本壓縮後只有25.6KB。要用React實現同樣的功能,你需要React DOM(37.4KB)和React withAddon庫(11.4KB),共計44.8KB,幾乎是Vue的兩倍大。雖然從React你的確會得到更豐富的API,但雙倍的體積並不能帶來雙倍的功能。

React優勢:

1.更適用於大型應用和更好的可測試性

2.同時適用於Web端和原生App

3.更大的生態圈帶來的更多支援和工具

1.用Vue和React實現的簡單應用程式來比較兩者,可能會讓一個開發者從一開始就更傾向於Vue。這是因為基於模板的應用程式乍看上去更易理解,而且能很快地寫好並跑起來。但是這些最初的便利會引入技術債並阻礙應用擴充套件到更大的規模。模板容易出現難以注意到的執行時錯誤,同時也不易於測試,重構和分解。相比之下,Javascript模板可以組織成經過良好分解,且使用DRY(don't repeat yourself - 避免重複程式碼)原則的程式碼的元件,因而具有更強的可重用性和可測試性。Vue也有元件系統和渲染函式,但React的渲染系統可配置性更強,幷包含如shallow rendering這樣的特性,可結合React的測試工具一起使用,從而大為提高程式碼的可測試性及可維護性。雖然React的不可變(immutable)應用狀態寫起來可能不夠Vue簡潔,但它在大型應用中仍會大放異彩,因為透明度和可測試性此時變得至關重要。

2.React Native是一個用於通過Javascript構建移動端原生應用程式的庫。它與React.js相同,只是不使用Web元件,而是使用原生元件。如果學過React.js,很快就能上手React Native,反之亦然。其意義在於,開發者只需要一套知識和工具就能開發Web應用和移動端原生應用。如果你想同時做Web端開發和移動端開發,選用React是相當划算的。阿里的Weex也是一個跨平臺UI專案,目前它以Vue為靈感,使用了許多相同的語法,並計劃未來實現完全整合Vue,不過整合的時間和具體細節還未確定。由於Vue的設計中將HTML模板作為其核心部分之一,並且現有特性不支援自定義渲染,因此以Vue.js目前的形態來說,很難看到Weex與之的關係將能像React和React Native一樣緊密。

3. React目前比Vue要受歡迎許多——它在NPM上每個月的下載量約為250萬次,而Vue只有22.5萬次。人氣帶來的好處不僅是表面上的名聲,還意味著更多相關的技術文章,教程和更多Stack Overflow上的解答和幫助;以及有著更多的工具和外掛可以在專案中使用,開發者不用從零開始,可以省很多力氣。這兩個框架都是開源的,但是React誕生於Facebook,自帶給力的資助,它的開發者和Facebook都承諾會持續維護React。而Vue則是由獨立開發者尤雨溪創造,目前也只有他一名全職維護者。雖然也有一些公司資助Vue,但是規模和Facebook和Google沒得比。不過由於Vue的團隊的努力,它的小規模和獨立性並沒有成為劣勢。Vue有著固定的釋出週期,甚至更令人稱道的是,Github上Vue只有54個待解決問題(open issue),已關閉問題(closed issue)則有3456個;與之相比,React的已關閉問題數目相差不多(3447個),待解決問題卻有多達530個。

前端框架總結:

React和Vue都是非常優秀的框架,它們之間的相似之處多過不同之處,並且它們大部分最棒的功能是相通的。鑑於公司專案排程臺還有移動端模組,建議選用React框架,更能節省開發成本,對於日後的維護也比較方便。

-------------------------------------------------------------------------------------------

構建工具gulp、grunt

 gulp與grunt部署對比

1.上手難度:gulp實現包括require(引入模組),gulp.task(定義任務名稱、任務執行)兩部分(上述配置檔案中的cb函式為連續任務時使用,單獨用clean可以忽略cb);而grunt實現包括grunt.initConfig(任務執行)、grunt.loadNpmTasks(引入模組)、grunt.registerTask(定義任務名稱)三部分;所以gulp配置更容易掌握;

2.執行效率,gulp用了5.71ms, grunt使用時間也很快無法比較;

Gulp與grunt複製檔案

壓縮、合併指令碼(JS)檔案

兩者速度差不多,只不過gulp更為簡單。

壓縮樣式(CSS)檔案

用法、速度都同其他外掛差不多,主要是執行指令後的提示:

gulp 外掛還是統一的列出執行指令的時間(執行時系統時間、執行任務消耗時間);

grunt 外掛的提示終於比gulp有了一些亮點,列出了壓縮前後的容量對比;

壓縮圖片

1.grunt外掛的舊版本有一些坑,具體來說就是相同的版本、相同的配置程式碼換一臺電腦執行的時會報錯(新版本已解決該bug, 建議使用最新版);

2.最新版grunt外掛在執行以上任務時(壓縮307張圖片),速度上的劣勢就比較明顯了,等待的時間比較長一些;

3.壓縮出來的效果,本專案圖片都是PS批量另存為“web所用格式”過,所以gulp跟grunt壓縮後的容量幾乎沒變化;

HTML檔案壓縮、依賴載入替換

速度上gulp比grunt快一些(grunt主要卡在壓縮圖片);

構建工具總結:

Gulp相比於grunt更簡潔,更容易上手。

-------------------------------------------------------------------------------------------

Css預處理LESS、SASS

Sass有很多可用的方法和邏輯。例如:條件和迴圈語句。LESS也可以做到,但不是很高效且不直觀。像LESS一樣,Sass也內建了一些非常友好的函式,像顏色,數字,還有變數列表。

Sass使用者可以使用功能強大的Compass庫。這些庫LESS使用者也可以用,但並不完全一樣,因為這是由一個龐大的社群來共同維護的。Compass有非常強大的特性,像自動生成圖片切片(CSS Sprites),傳統瀏覽器支援,還有對CSS3的跨瀏覽器支援等。

Compass同樣允許你使用外部框架像Blueprint, Foundation 或 Bootstrap。這也意味著你可以非常容易的使用你喜歡的框架而不需要掌握各種不同的工具。

--------------------------------------------------------------------------------

Css模板

基礎功能

1.響應式網格系統

2.表格

3.表單

4.按鈕

5.圖片

佈局元件

1.下拉選單

2.導航元素

3.麵包屑導航

4.分頁

5.進度條

6.過度效果

7.模態框

8.下拉選單

9.標籤頁

10.提示框

11.警告框

12.彈出框

13.輪播

------------------------------------------------------------------------------------------------------------

常用JavaScript外掛

常用外掛

1.日期格式統一(例如:2017-06-12 09:59:12)

2.AJAX非同步請求

3.表單驗證

------------------------------------------------------------------------------------------------------------

前端專案構建

示意圖

描述

整個Web應用由頁面組成

頁面由元件組成

一個元件一個目錄,資源就近維護

元件可組合,
元件的JS可依賴其他JS模組,
CSS可依賴其他CSS單元

專案搭建流程化(例):

建立專案並初始化

$ mkdir webpack-react-demo
$ cd webpack-react-demo
$ npm init
$ touch .gitignore
$ touch webpack.config.js

其中.gitignore用於說明程式碼提交時忽略的檔案,可參考下面的常用配置

logs
*.log
.grunt
node_modules
bower_components
build

通過npm安裝專案所需的依賴包

webpack相關包

$ npm install webpack webpack-dev-server html-webpack-plugin--save-dev

css\scss樣式檔案,圖片檔案相關包

·         $ npm install css-loader style-loader sass-loader node-sass --save-dev
$ npm installfile-loader url-loader --save-dev

babel\react\es6支援包

·         $ npm install babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev
·         $ npm install jshint jshint-loader --save-dev
·         $ npm install react react-dom --save
$ npm install [email protected] --save-dev

bootstrap\jquery\moment支援包

·         $ npm install [email protected] --save-dev
$ npm install jquery moment --save-dev

 建立工程結構,目錄如下:

·        app/

o   index.jsx (程式入口)

o   components/ (元件資料夾)

§ plist.jsx (展示使用者列表)

§ search.jsx (搜尋框元件)

o   utils/ (工具類)

·        templates (模版資料夾)

o   index.html

o   mobile.html

·        package.json (專案及npm包版本資訊)

·        webpack.config.js (webpack配置檔案)

配置webpack

向webpack.config.js檔案寫入一下內容:

var path = require('path');
var webpack = require('webpack');
var HtmlwebpackPlugin = require('html-webpack-plugin');
var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, 'app');
var BUILD_PATH = path.resolve(ROOT_PATH, 'build');
var TEM_PATH = path.resolve(ROOT_PATH, 'templates');
module.exports= {
  entry: {
    app: path.resolve(APP_PATH, 'index.jsx'),
    mobile: path.resolve(APP_PATH, 'mobile.jsx'),
    vendors: ['jquery', 'moment']
  },
  output: {
    path: BUILD_PATH,
    filename: '[name].js'
  },
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  devtool: 'eval-source-map',
//enable dev server
  devServer: {
    historyApiFallback: true,
    hot: true,
    inline: true,
    progress: true,
    proxy:{
'/api/*':{
        target: 'http://localhost:8080',
        secure: false
      }
    }
  },
module: {
    preLoaders: [
       {
         test: /\.jsx?$/,
         include: APP_PATH,
         loader: "jshint-loader"
       }
     ],
    loaders: [
      {
        test: /\.jsx?$/,
        loader: 'babel',
        include: APP_PATH,
        query: {
          presets: ['es2015', 'react']
        }
      },
      {
        test: /\.scss$/,
        loaders: ['style', 'css', 'sass']
      }
    ]
  },
// any jshint option http://www.jshint.com/docs/options/
   jshint: {
"esnext": true
   },
  plugins: [
new webpack.optimize.UglifyJsPlugin({minimize: true}),
new HtmlwebpackPlugin({
      title: 'My first react app',
      template: path.resolve(TEM_PATH, 'index.html'),
      filename: 'index.html',
      chunks: ['app', 'vendors'],
      inject: 'body'
    }),
new HtmlwebpackPlugin({
      title: 'Hello Mobile app',
      template: path.resolve(TEM_PATH, 'mobile.html'),
      filename: 'mobile.html'
    }),
new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js')
  ]
}

npm中新增webpack啟動命令

在package.json檔案中新增:

  ...
"scripts": {
"dev": "webpack-dev-server --progress --profile --colors --hot --inline",
"build": "webpack --progress --profile --colors",
"test": "test",
  },
  ...

新增首頁

寫入index.jsx

import'../node_modules/bootstrap/scss/bootstrap.scss';
import React from'react';
import ReactDOM from'react-dom';
import $ from'jquery';
classAppextendsReact.Component{
constructor() {
super();
    }
    render() {
return (
<divclassName="container">
            <sectionclassName="jumbotron">
              <h3className="jumbotron-heading">Search Github Users</h3>
            </section>
          </div>
        )
    }
};
const app = document.createElement('div');
$('body').append(app);
ReactDOM.render(<App />, app);

相關推薦

前端技術選型專案構建流程

前端框架React 與 Vue 比較選擇 Vue優勢: 1.模板和渲染函式的彈性選擇 2.簡單的語法及專案建立 3.更快的渲染速度和更小的體積 1.Vue應用的預設選項是把markup放入HTML檔案中。資料繫結表示式使用的是與Angular相似的雙大括號(moustac

搭建eclipse+tomcat+maven+shiro+springmvc+jpa專案(一):技術選型架構文件

一、Java語言 Java是一門面向物件程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指標等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向物件程式語言的代表,極好地實現了面向物件理論,允許程式設計師以優雅的思維方式進行復雜的程式設計。

前端測試 —— 技術選型入門

為什麼要撰寫前端的測試? 在前端發展日益壯大後,我們在專案中往往引入了工程化、模組化的概念,這和數年前前端極度依賴後端渲染以及切圖工作產生了極大的進步,當然這些進步也使得我們的專案變得更加複雜龐大,並且在專案中使用了SPA的應用概念,每個工程的複雜化、程式碼的

springbooot+springcloud初步使用專案構建

springboot與springcloud初步使用 一、使用idea建立springboot專案 二、對應版本並匯入eureka依賴 <dependency> <groupId>org.springframework.cloud</grou

資料產品的前端技術選型的思考

資料產品首先也是一個web工程,這裡不談是react還是vue,個人認為憑喜好即可。本文想說說關於高互動,多維資料分析,多圖表展示的產品如何選擇工具庫,以及有哪些庫可以用。 圖表庫選擇 主流的web圖表庫有:echarts;highcharts;D3js;antv(G2,G6,F2)基於D3封裝的re

高通MSM8974晶片技術分享專案資料下載

高通MSM8974晶片技術分享及專案資料下載 MSM8974(LTE)是高通2013年推出的Snapdragon 800系列產品。今天分享高通MSM8974的晶片資料,不知道還有沒有在找這個晶片資料的朋友,其資料關於開發資料,資料表、原理圖和晶片專案案例都打包放到闖客網技術論壇了,有興趣的小夥伴自己去下載吧

高通MSM8937晶片技術分享專案資料下載

高通MSM8937晶片技術分享及專案資料下載 這個是個牛逼的的文件資料,因為它關於MSM8937的開發資料都很齊全,在某次開發中需要MSM8937晶片的資料,所以特意去找了一下,現在專案完成了,也把它整理了出來了,希望能幫到更多的人,開發出MSM8937晶片更強大的功能,資料整理放在闖客網技術論壇了,有興趣

深度學習(五十六)tensorflow專案構建流程

tensorflow專案構建流程微博:黃錦池-hjimce qq:1393852684一、構建路線個人感覺對於任何一個深度學習庫,如mxnet、tensorflow、theano、caffe等,基本上我都採用同樣的一個學習流程,大體流程如下:(1)訓練階段:資料打包-》網路構

Tensorflow專案構建流程

參考部落格http://blog.csdn.net/hjimce/article/details/51899683 整理 一。訓練階段     1.tensorflow打包資料         1)線

微服務時代之閘道器相關技術選型部署(nacos+gateway)

1.場景描述 因要用到微服務,關於註冊中心這塊,與同事在技術原型上做了討論,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的註冊中心對比,以前用的springcloud的eureka作為註冊中心(springcloud-高可用部署),與eurka相比,這次

【轉載】前端專案開發流程技術選型

喂喂喂,那個切圖的,把頁面寫好就發給研發工程師套模板吧。 你好,切圖仔。 不知道你的團隊如何定義前端開發,據我所知,時至今日仍然有很多團隊會把前端開發歸類為產品或者設計崗位,雖然身份之爭多少有些無謂,但我對這種偏見還是心存芥蒂,醞釀了許久,決定寫一個

構建NetCore應用框架之實戰篇(四):BitAdminCore框架1.0登錄功能細化技術選型

1.0 dmi 也會 繼承 blank bit 技術選型 cor 我會 本篇承接上篇內容,如果你不小心點擊進來,建議從第一篇開始完整閱讀,文章內容繼承性連貫性。 構建NetCore應用框架之實戰篇系列 一、BitAdminCore框架1.0版本 1、1.0版本是指

前端開發構建流程

前端 IDE: VS Code , git for vscode , tfs for vscode 前端 js 框架: Angular 前端第三方依賴包管理: NPM

麥司機部落格專案技術選型-開發工具資源

開發中常用的幾款工具 工欲善其事必先利其器 Intellij IDEA:Java開發等 Eclipse:Java開發等 Chrome:除錯神器 WebStorm:JavaScript開發 Andro

Spring+SpringMVC+MyBatis+easyUI整合基礎篇(一)專案簡述技術選型介紹

萌芽階段 很久之前就開始打算整理一下自己的技術部落格了,由於各種原因(藉口總是可以找到的),實在抽不出時間所以計劃一直處於擱置狀態,一直只是心底的一顆小萌芽,日復一日的悠悠歲月如同手中緊抓的沙子,無聲無息的流失,不過這顆小生命也在我渴望與期待的澆灌下不斷的長大。

web前端技術框架選型參考

hub 社區 規範 應用設計 one 屬於 webpack body 數據流 一、出發點   隨著Web技術的不斷發展,前端架構框架、UI框架、構建工具、CSS預處理等層出不窮,各有千秋。太多的框架在形成初期,都曾在web領域 掀起過一場技術浪潮,可有些卻僅僅是曇花

Hyperledger fabric 1.0Beta網絡組成構建流程

負責 組成 proposal 安裝 style 客戶端 invoke install eat 一、fabric網絡結構(暫時不包括CA)   如上圖所示,在fabric網絡中,O表示Orderer,P代表Peer,EP代表Endorsing Peer(endors

你可能需要的一本前端小冊:Vue 專案構建與開發入門

最近抽時間寫了一本關於 Vue 的小冊:《Vue 專案構建與開發入門》,前前後後斷斷續續花了大概兩個月的時間。作為 Vue 的第一批使用者,同時也作為一名專欄作者,雖然我之前寫過好幾篇關於 Vue 的文章,但是該小冊是我第一本系統性介紹 Vue 專案構建與開發相關知識的書籍,也是我對於自己積累的 Vue 經驗

IDEA JSP專案構建學習心得

  近期學習的東西比較雜亂,導致了很多東西都有些忘卻。在這裡記錄一份心得。 簡而言之JSP也就是Java程式碼在頁面上的一種呈現方式,用於Web專案的前臺展示。 在這裡不做過多的闡述。 MVC設計模式,Servlet充當的是控制器,控制專案的顯示  M 模型 V 檢視。 專案暫時

web前端技術基礎課程講解之Vue.js構建方式

先介紹下Vue,它是一套用於構建使用者介面的漸進式框架。與其他大型框架不同的是Vue被設計為可以自底向上逐層應用。Vue的核心庫只關注檢視層,不僅易於上手,還方便與第三方庫或既有專案整合。另一方面當與現代化的工具鏈以及各種支援類庫結合使用時,Vue也完全能夠為複雜的單頁應用提供驅動。 Vue構建方式 有兩