要:在IT行業(yè)中,后端開發(fā)者發(fā)揮著至關(guān)重要的作用。尤其是在技術(shù)變革日新月異的時(shí)代,更需要后端開發(fā)者不斷提升自我的技能,但是,無論技術(shù)迭代如何迅速,后端開發(fā)人員的“基本功”都不可以落下。本文展開討論成為JavaScript堆棧后端開發(fā)人員,必須經(jīng)歷的那些事……
原文鏈接:
https://billypentester.medium.com/ultimate-10-stages-to-master-backend-development-f6f65f22a327
聲明:本文為CSDN翻譯,轉(zhuǎn)載請(qǐng)注明來源。
譯者 | 朱珂欣 責(zé)編 | 屠敏
出品 | CSDN(ID:CSDNnews)
隨著時(shí)代的發(fā)展,越來越多編程語言和開發(fā)工具的出現(xiàn),讓開發(fā)者能夠方便且快捷地開發(fā)和部署應(yīng)用程序。其中,后端開發(fā)多是指服務(wù)器端編程,開發(fā)人員通過創(chuàng)建應(yīng)用程序體系結(jié)構(gòu)和業(yè)務(wù)邏輯,以此處理和存儲(chǔ)數(shù)據(jù)并輸出有用的信息。
毋庸置疑,成為后端開發(fā)人員必然有門檻,掌握Web和操作系統(tǒng)的基礎(chǔ)知識(shí)、了解數(shù)據(jù)庫、計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)結(jié)構(gòu)和算法、開發(fā)工具等,逐漸成為后端開發(fā)人員的入門技能。后端編程語言、框架和堆棧也很多,例如JavaScript、Python、PHP、Java、Ruby等。那么,成為JavaScript堆棧后端開發(fā)人員,需要面臨那幾個(gè)必須經(jīng)歷的階段呢?
第1階段:掌握Web基礎(chǔ)知識(shí)
在開發(fā)人員的初始階段,學(xué)習(xí)Web的基礎(chǔ)知識(shí)是至關(guān)重要的。因?yàn)閾碛蠾eb概念可以幫助開發(fā)人員更好地了解互聯(lián)網(wǎng)的工作原理,例如使用哪些協(xié)議、如何傳遞消息等。
首當(dāng)其沖的是了解Web中的一些基本概念,例如HTTP的概念、HTTP的基本方面、HTTP 請(qǐng)求的類型及作用、客戶端和服務(wù)器模型、OSI 模型、DNS 工作原理等。
第3階段:學(xué)習(xí)后端框架和語言
第4階段:使用服務(wù)器框架和API開發(fā)
第5階段:使用模板引擎
第6階段:了解數(shù)據(jù)庫
后端應(yīng)用程序可以通過使用MongoDB,MySQL等第三方npm包查詢數(shù)據(jù)庫來直接與數(shù)據(jù)庫交互。如果開發(fā)人員不了解SQL或數(shù)據(jù)庫語言,則需要學(xué)習(xí)任何ORM/ODM作為中間件,將對(duì)象方法轉(zhuǎn)換為復(fù)雜的數(shù)據(jù)庫查詢,這些中間件為開發(fā)人員提供了一個(gè)名為模型的完整結(jié)構(gòu),用于在將數(shù)據(jù)輸入數(shù)據(jù)庫之前驗(yàn)證數(shù)據(jù)。此外,它在對(duì)象模型之上提供了一個(gè)額外的安全層。
第7階段:關(guān)注安全性
安全性是企業(yè)級(jí) Web 應(yīng)用程序的一大關(guān)注點(diǎn)。單個(gè)漏洞會(huì)導(dǎo)致數(shù)據(jù)泄露或應(yīng)用程序故障。Web 應(yīng)用中應(yīng)有適當(dāng)?shù)尿?yàn)證、身份驗(yàn)證和授權(quán)。
限制:使用中間件應(yīng)用請(qǐng)求限制,防止DDOS攻擊。
第8階段:使用消息代理
消息代理成為幫助克服其中一些困難的解決方案之一。消息代理由 3 個(gè)組件組成:
制作人:生產(chǎn)者發(fā)送有關(guān)主題的消息。一個(gè)或多個(gè)發(fā)布者可以針對(duì)同一主題發(fā)布內(nèi)容;
消費(fèi)者:訂閱者訂閱主題,發(fā)布到該主題的所有消息都將由該主題的所有訂閱者接收;
在實(shí)時(shí)服務(wù)器上部署Web應(yīng)用程序之前,為了減少單個(gè)錯(cuò)誤的輸入或缺少數(shù)據(jù)導(dǎo)致正在運(yùn)行的服務(wù)器出現(xiàn)故障,需要進(jìn)行測(cè)試。
測(cè)試可以根據(jù)多個(gè)標(biāo)準(zhǔn)在多個(gè)級(jí)別上進(jìn)行,開發(fā)人員可以檢查Web應(yīng)用是否返回了正確的狀態(tài)代碼、錯(cuò)誤消息、數(shù)據(jù)等。
在部署Web應(yīng)用之前,開發(fā)人員需要學(xué)習(xí)Git、GitHub的操作以及版本控制工具的使用,以使部署靈活且可擴(kuò)展。
Git可以用于版本控制,通過創(chuàng)建多個(gè)分支,跟蹤源代碼中的更改,并使多個(gè)開發(fā)人員能夠協(xié)同工作。GitHub是一個(gè)用于版本控制和協(xié)作的代碼托管平臺(tái),可以允許開發(fā)人員和其他人共同處理項(xiàng)目。GitHub操作可幫助您自動(dòng)執(zhí)行軟件開發(fā)工作流。單個(gè)操作是可重用的代碼段,可用于在 GitHub上生成、測(cè)試、打包或部署項(xiàng)目。它還可用于自動(dòng)執(zhí)行工作流程的任何步驟。部署完整的Web應(yīng)用非常復(fù)雜。開發(fā)者還需要一個(gè)專用服務(wù)器來響應(yīng)HTTP請(qǐng)求,并使用在線數(shù)據(jù)庫。
Harbor是一個(gè)用于存儲(chǔ)和分發(fā)Docker鏡像的企業(yè)級(jí)Registry服務(wù)器,通過添加一些企業(yè)必需的功能特性,例如安全、標(biāo)識(shí)和管理等,擴(kuò)展了開源Docker Distribution。
作為一個(gè)企業(yè)級(jí)私有Registry服務(wù)器,Harbor提供了更好的性能和安全。
提升用戶使用Registry構(gòu)建和運(yùn)行環(huán)境傳輸鏡像的效率。
Harbor支持安裝在多個(gè)Registry節(jié)點(diǎn)的鏡像資源復(fù)制,鏡像全部保存在私有Registry中, 確保數(shù)據(jù)和知識(shí)產(chǎn)權(quán)在公司內(nèi)部網(wǎng)絡(luò)中管控。
另外,Harbor也提供了高級(jí)的安全特性,諸如用戶管理,訪問控制和活動(dòng)審計(jì)等。
主從同步
harbor官方默認(rèn)提供主從復(fù)制的方案來解決鏡像同步問題,通過復(fù)制的方式,我們可以實(shí)時(shí)將測(cè)試環(huán)境harbor倉庫的鏡像同步到生產(chǎn)環(huán)境harbor,類似于如下流程:
img
在實(shí)際生產(chǎn)運(yùn)維的中,往往需要把鏡像發(fā)布到幾十或上百臺(tái)集群節(jié)點(diǎn)上。這時(shí),單個(gè)Registry已經(jīng)無法滿足大量節(jié)點(diǎn)的下載需求,因此要配置多個(gè)Registry實(shí)例做負(fù)載均衡。手工維護(hù)多個(gè)Registry實(shí)例上的鏡像,將是十分繁瑣的事情。Harbor可以支持一主多從的鏡像發(fā)布模式,可以解決大規(guī)模鏡像發(fā)布的難題:
只要往一臺(tái)Harbor上發(fā)布,鏡像就會(huì)像"仙女散花"般地同步到多個(gè)Registry中,高效可靠。
如果是地域分布較廣的集群,還可以采用層次型發(fā)布方式,比如從集團(tuán)總部機(jī)房同步到分公司1機(jī)房,再從分公司1機(jī)房同步到分公司2機(jī)房:
然而單靠主從同步,仍然解決不了harbor主節(jié)點(diǎn)的單點(diǎn)問題。
雙主復(fù)制說明
所謂的雙主復(fù)制其實(shí)就是復(fù)用主從同步實(shí)現(xiàn)兩個(gè)harbor節(jié)點(diǎn)之間的雙向同步,來保證數(shù)據(jù)的一致性,然后在兩臺(tái)harbor前端頂一個(gè)負(fù)載均衡器將進(jìn)來的請(qǐng)求分流到不同的實(shí)例中去,只要有一個(gè)實(shí)例中有了新的鏡像,就是自動(dòng)的同步復(fù)制到另外的的實(shí)例中去,這樣實(shí)現(xiàn)了負(fù)載均衡,也避免了單點(diǎn)故障,在一定程度上實(shí)現(xiàn)了Harbor的高可用性:
這個(gè)方案有一個(gè)問題就是有可能兩個(gè)Harbor實(shí)例中的數(shù)據(jù)不一致。假設(shè)如果一個(gè)實(shí)例A掛掉了,這個(gè)時(shí)候有新的鏡像進(jìn)來,那么新的鏡像就會(huì)在另外一個(gè)實(shí)例B中,后面即使恢復(fù)了掛掉的A實(shí)例,Harbor實(shí)例B也不會(huì)自動(dòng)去同步鏡像,這樣只能手動(dòng)的先關(guān)掉Harbor實(shí)例B的復(fù)制策略,然后再開啟復(fù)制策略,才能讓實(shí)例B數(shù)據(jù)同步,讓兩個(gè)實(shí)例的數(shù)據(jù)一致。
另外,這里還需要多吐槽一句:在實(shí)際生產(chǎn)使用中,主從復(fù)制十分的不靠譜!!所以這里推薦使用下面要說的這種方案。
方案說明
共享后端存儲(chǔ)算是一種比較標(biāo)準(zhǔn)的方案,就是多個(gè)Harbor實(shí)例共享同一個(gè)后端存儲(chǔ),任何一個(gè)實(shí)例持久化到存儲(chǔ)的鏡像,都可被其他實(shí)例中讀取。通過前置LB進(jìn)來的請(qǐng)求,可以分流到不同的實(shí)例中去處理,這樣就實(shí)現(xiàn)了負(fù)載均衡,也避免了單點(diǎn)故障。
本次搭建以NFS作為共享存儲(chǔ)存放Harbor相關(guān)data,并分離PostgreSQL與Redis為多個(gè)Harbor共同連接使用,使用Nginx做負(fù)載均衡。
如果最終生產(chǎn)環(huán)境集群中服務(wù)器較多,依賴做完LB的Harbor也無法完全達(dá)到需求時(shí),可以使用如下架構(gòu),部署下級(jí)Harbor節(jié)點(diǎn)從主節(jié)點(diǎn)同步鏡像,然后再分發(fā)給生產(chǎn)服務(wù)器。
這個(gè)方案在實(shí)際生產(chǎn)環(huán)境中部署需要考慮三個(gè)問題:
1. 共享存儲(chǔ)的選取,Harbor的后端存儲(chǔ)目前支持AWS S3、Openstack Swift, Ceph等,在下面的實(shí)驗(yàn)環(huán)境里,暫且直接使用nfs。
2. Session在不同的實(shí)例上共享,這個(gè)現(xiàn)在其實(shí)已經(jīng)不是問題了,在最新的harbor中,默認(rèn)session會(huì)存放在redis中,只需要將redis獨(dú)立出來即可。可以通過redis sentinel或者redis cluster等方式來保證redis的可用性。在下面的實(shí)驗(yàn)環(huán)境里,暫且使用單臺(tái)redis。
3. Harbor多實(shí)例數(shù)據(jù)庫問題,這個(gè)也只需要將harbor中的數(shù)據(jù)庫拆出來獨(dú)立部署即可。讓多實(shí)例共用一個(gè)外部數(shù)據(jù)庫,數(shù)據(jù)庫的高可用也可以通過數(shù)據(jù)庫的高可用方案保證。
環(huán)境說明
Docker
1)安裝依賴包:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2)官方一鍵腳本安裝
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
3)添加內(nèi)核參數(shù)
tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
將net.ipv4.ip_forward賦值為1
然后刷新內(nèi)核參數(shù)
sysctl -p
4)修改Docker倉庫為國內(nèi)鏡像站
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s https://pclhthp0.mirror.aliyuncs.com
5)啟動(dòng)Docker
systemctl enable docker && systemctl start docker
Compose
compose是Docker提供的一個(gè)命令行工具,用來定義和運(yùn)行由多個(gè)容器組成的應(yīng)用。使用compose,我們可以通過YAML文件聲明式的定義應(yīng)用程序的各個(gè)服務(wù),并由單個(gè)命令完成應(yīng)用的創(chuàng)建和啟動(dòng)。
由于國內(nèi)政策原因,可能在海外網(wǎng)站上下載文件速度較慢,建議下載本地后上傳至服務(wù)器
1)下載docker-compose并賦予可執(zhí)行權(quán)限
# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
cd /usr/local/bin
scp 192.168.166.96:/usr/local/bin/docker-compose .
注意:由于我其他服務(wù)器已經(jīng)存在,所以我直接拷貝了
2)安裝bash補(bǔ)全命令
# curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
scp 192.168.166.96:/etc/bash_completion.d/docker-compose /etc/bash_completion.d/
重新連接終端即生效
注意:由于我其他服務(wù)器已經(jīng)存在,所以我直接拷貝了
服務(wù)端
1)安裝必需的RPM包
yum -y install nfs-utils rpcbind
2)創(chuàng)建NFS共享目錄
mkdir -p /data/harbor_data
chown nobody:nobody /data/harbor_data/
3)修改NFS服務(wù)配置文件
echo "/data/harbor_data 192.168.166.0/24(rw,sync,no_root_squash)" >> /etc/exports
4)啟動(dòng)NFS服務(wù)器
systemctl enable rpcbind && systemctl restart rpcbind
systemctl enable nfs && systemctl restart nfs
客戶端
1)安裝nfs-utils
yum -y install nfs-utils
2)在NFS客戶端上查看NFS的連通性
# showmount -e 192.168.166.122
Export list for 192.168.166.122:
/data/harbor_data 192.168.166.0/24
3)掛載NFS共享存儲(chǔ)
創(chuàng)建掛載目錄
mkdir /data
修改/etc/fstab配置文件加入以下內(nèi)容
192.168.166.122:/data/harbor_data /data nfs defaults 0 0
mount掛載
mount -a
1)下載PostgreSQL官方Y(jié)UM源配置文件包并安裝
wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
2)安裝PostgreSQL
yum -y install postgresql96-server postgresql96-contrib
3)初始化數(shù)據(jù)庫
/usr/pgsql-9.6/bin/postgresql96-setup initdb
4)啟動(dòng)數(shù)據(jù)庫
systemctl enable postgresql-9.6 && systemctl restart postgresql-9.6
5)PostgreSQL數(shù)據(jù)庫配置
# su - postgres
-bash-4.2$ psql
psql (9.6.17)
Type "help" for help.
postgres=# ALTER USER postgres WITH PASSWORD 'postgres';
ALTER ROLE
2、開啟遠(yuǎn)程訪問
vi /var/lib/pgsql/9.6/data/postgresql.conf
# listen_addresses = 'localhost' 改為 listen_addresses='*'
3、信任遠(yuǎn)程連接
vim /var/lib/pgsql/9.6/data/pg_hba.conf
加入:
host all all 192.168.166.203/32 trust
host all all 192.168.166.81/32 trust
host all all 192.168.166.212/32 trust
6)重啟PostgreSQL服務(wù)
systemctl restart postgresql-9.6
7)驗(yàn)證服務(wù)
psql -h 192.168.166.203 -p 5432 -U postgres
8)遷移數(shù)據(jù)庫
簡(jiǎn)要步驟如下:
# yum install -y yum-utils device-mapper-persistent-data lvm2
# curl -fsSL get.docker.com -o get-docker.sh
# sh get-docker.sh --mirror Aliyun
#curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s https://pclhthp0.mirror.aliyuncs.com
# systemctl enable docker && systemctl start docker
# cd /usr/local/bin
# scp 192.168.166.96:/usr/local/bin/docker-compose .
# scp 192.168.166.96:/etc/bash_completion.d/docker-compose /etc/bash_completion.d/
# cd ~
# scp 192.168.166.96:/root/harbor-offline-installer-v1.10.2.tgz .
# tar -xvf harbor-offline-installer-v1.10.2.tgz -C /usr/local/
# cd /usr/local/harbor/
# vim harbor.yml ###修改hostname: 192.168.166.203 ####注釋掉https段即可
# ./prepare
# ./install.sh
# docker-compose up -d
2、進(jìn)入harbor-db容器導(dǎo)出相關(guān)表及數(shù)據(jù)
# docker container exec -it harbor-db /bin/bash
pg_dump -U postgres registry > /tmp/registry.sql
pg_dump -U postgres notarysigner > /tmp/notarysigner.sql
pg_dump -U postgres notaryserver > /tmp/notaryserver.sql
3、導(dǎo)出數(shù)據(jù)庫
docker container cp harbor-db:/tmp/registry.sql /tmp
docker container cp harbor-db:/tmp/notarysigner.sql /tmp
docker container cp harbor-db:/tmp/notaryserver.sql /tmp
4、將數(shù)據(jù)導(dǎo)入至外部PostgreSQL數(shù)據(jù)庫
# psql -h 192.168.166.203 -U postgres
postgres=# create database registry;
CREATE DATABASE
postgres=# create database notarysigner;
CREATE DATABASE
postgres=# create database notaryserver;
CREATE DATABASE
psql -h 192.168.166.203 -U postgres registry < /tmp/registry.sql
psql -h 192.168.166.203 -U postgres notarysigner < /tmp/notarysigner.sql
psql -h 192.168.166.203 -U postgres notaryserver < /tmp/notaryserver.sql
1)安裝redis
yum -y install redis
2) 修改配置參數(shù)
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis.conf
sed -i 's/daemonize no/daemonize yes/g' /etc/redis.conf
3)啟動(dòng)并測(cè)試redis連接
systemctl enable redis && systemctl restart redis
redis-cli
下載Harbor離線安裝包,離線安裝包文件較大(約為:590M),建議在本地使用多線程工具下載后上傳服務(wù)器使用。
1)下載
cd ~
scp 192.168.166.96:/root/harbor-offline-installer-v1.10.2.tgz .
2)解壓
tar -xvf harbor-offline-installer-v1.10.2.tgz -C /usr/local/
3)修改配置文件
# cd /usr/local/harbor/
# vim harbor.yml
修改的內(nèi)容有
修改完的樣例文件,如下
hostname: 192.168.166.81
http:
port: 80
harbor_admin_password: Harbor12345
data_volume: /data
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 1.10.0
external_database:
harbor:
host: 192.168.166.203
port: 5432
db_name: registry
username: postgres
password: postgres
ssl_mode: disable
max_idle_conns: 2
max_open_conns: 0
clair:
host: 192.168.166.203
port: 5432
db_name: clair
username: postgres
password: postgres
ssl_mode: disable
notary_signer:
host: 192.168.166.203
port: 5432
db_name: notarysigner
username: postgres
password: postgres
ssl_mode: disable
notary_server:
host: 192.168.166.203
port: 5432
db_name: notaryserver
username: postgres
password: postgres
ssl_mode: disable
external_redis:
host: 192.168.166.245
port: 6379
password:
registry_db_index: 1
jobservice_db_index: 2
chartmuseum_db_index: 3
clair_db_index: 4
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- clair
4)生成harbor運(yùn)行的必要文件(環(huán)境)以及docker-compose.yml文件;執(zhí)行后會(huì)通過網(wǎng)絡(luò)獲取Docker Image,建議提前修改好國內(nèi)鏡像站加速。
./prepare
5)安裝Harbor
./install.sh
1)安裝nginx
安裝可以參考https://wiki.clay-wangzhi.com/7-nginx/1.-chu-shi-nginx#4-bian-yi-an-zhuang-nginx
這里我就不再詳細(xì)講了
2)編寫配置文件
# cat harbor.schengle.com.conf
upstream harbor {
ip_hash;
server 192.168.166.81:80;
server 192.168.166.212:80;
}
server {
listen 80;
server_name harbor.***.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name harbor.schengle.com;
ssl_certificate ***.crt;
ssl_certificate_key ***.key;
client_max_body_size 0;
chunked_transfer_encoding on;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
proxy_ssl_verify off;
proxy_ssl_session_reuse on;
proxy_pass http://harbor;
proxy_redirect default;
proxy_http_version 1.1;
}
location /v2/ {
proxy_pass http://harbor/v2/;
proxy_redirect default;
#proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ssl_verify off;
proxy_ssl_session_reuse on;
proxy_buffering off;
proxy_request_buffering off;
}
}
3)平滑重啟nginx
nginx -s reload
https://www.cnblogs.com/kevingrace/p/11422710.html
https://juejin.im/post/5d973e246fb9a04dfa0963fb#heading-18
http://dwz-9.cn/_L4me
篇幅有限,關(guān)于生產(chǎn)級(jí)harbor可用的搭建就介紹到這了,大家感興趣也可以自己測(cè)試一下。
后面會(huì)分享更多運(yùn)維方面內(nèi)容,感興趣的朋友可以關(guān)注下!
言:
隨著JavaScript的不斷發(fā)展,開發(fā)者們正在尋找更靈活和可擴(kuò)展的方式來修改或擴(kuò)展現(xiàn)有的代碼。其中一種廣泛應(yīng)用的技術(shù)是"Hook",它允許開發(fā)者攔截和修改現(xiàn)有的函數(shù)或方法的行為。本文將詳細(xì)介紹JavaScript中的Hook技術(shù),包括其特性、優(yōu)點(diǎn)、缺點(diǎn)和使用場(chǎng)景,并提供示例代碼進(jìn)行說明。
在JavaScript中,Hook是一種能夠攔截和修改函數(shù)或方法行為的技術(shù)。通過使用Hook,開發(fā)者可以在現(xiàn)有的函數(shù)執(zhí)行前、執(zhí)行后或者替換函數(shù)的實(shí)現(xiàn)邏輯。這種靈活的能力使得開發(fā)者能夠定制和擴(kuò)展現(xiàn)有代碼的行為,而無需修改原始代碼。
示例代碼:
下面是一個(gè)使用Hook技術(shù)的示例代碼,用于在函數(shù)執(zhí)行前后打印日志:
function withLogging(fn) {
return function (...args) {
console.log(`Calling function ${fn.name} with arguments: ${args.join(', ')}`);
const result = fn.apply(this, args);
console.log(`Function ${fn.name} returned: ${result}`);
return result;
}
}
function add(a, b) {
return a + b;
}
const hookedAdd = withLogging(add);
const result = hookedAdd(2, 3); // Output: Calling function add with arguments: 2, 3
// Function add returned: 5
console.log(result); // Output: 5
在上面的示例中,withLogging函數(shù)是一個(gè)Hook函數(shù),用于攔截目標(biāo)函數(shù)add的執(zhí)行,并在執(zhí)行前后打印日志信息。通過調(diào)用hookedAdd函數(shù),可以觸發(fā)攔截和日志輸出的過程。
結(jié)論:
通過使用Hook技術(shù),JavaScript開發(fā)者可以靈活地修改和擴(kuò)展現(xiàn)有代碼的行為,而無需修改原始代碼。盡管Hook技術(shù)具有一些潛在的缺點(diǎn)和復(fù)雜性,但在日志、調(diào)試、性能監(jiān)測(cè)以及行為定制和擴(kuò)展等場(chǎng)景中,它仍然是一個(gè)強(qiáng)大且有用的工具。開發(fā)者可以根據(jù)自己的需求,靈活地使用Hook技術(shù)來滿足特定的編程需求。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。