Programmer a mu 2021-08-06 11:22:09 阅读数:479
This is a classic interview question for the headline school recruitment test , If you look at the collection of facial sutras , Will find 3 At least one person appeared in the interview 1 Time , It is also a very basic knowledge point .
Okay , Don't say nonsense .
Basic information of synchronization status and identification hash code , altogether 6 A step :
DNS analysis
TCP Connect
send out http request
Server processing request
Browser parse render page
End of connection
DNS analysis
What is? DNS?
DNS It is a naming system for computer and network services organized into domain hierarchies , He used TCP/IP The Internet , The service it provides is used to convert host names and domain names into IP Address work .DNS This is one of them " The interpreter ", Its basic working principle can be represented by the following figure .
Root domain server (root Name server) Is the Internet domain name resolution system (DNS) The highest level domain name server in , Responsible for returning the authoritative domain name server address of the top-level domain . They are an important part of the Internet infrastructure , Because all domain name resolution operations are inseparable from them . because DNS And certain agreements ( Non fragmented user data protocol (UDP) The packet is in IPv4 The maximum valid size within is 512 byte ) Common limitations of , The number of root domain server addresses is limited to 13 individual .
Top-level domain name (TLD), It's the highest level domain name . In short , It's the last part of the website . such as , website www.baidu.com The top-level domain name of is .com. They can be divided into two categories . One is general top-level domain name (gTLD) It can also be called general top-level domain name , such as .com、net、.edu、.org wait , share 700 Multiple . The other is country top-level domain names (ccTLD), Representing different countries and regions , such as .cn( China )、.io( British Indian Ocean Territory ) etc. , share 300 Multiple .
Name server (Name Server): In the Internet, it refers to the program or server that provides domain name service agreement . It can be " Human beings can recognize " Identifier , It is mapped to the identification code in the system, usually in digital form . The domain name system (DNS) Server is the most famous name server : Domain name is one of the two main name spaces on the Internet .
DNS Analytic process
Check whether the domain name corresponding to... Has been cached in the browser cache ip Address
If not found in the browser cache ip, Then we will continue to find whether the local system has been cached ip
Initiate a domain name resolution request to the local domain name resolution service
Send a domain name resolution request to the root domain name resolution server
The root domain server returns gTLD( Common top level domain ) Domain name resolution server address
towards gTLD The server initiates a resolution request
gTLD The server receives the request and returns Name Server The server
Name Server Server return ip Address to local server
Local domain name server cache resolution results
Return the parsing result to the user
DNS Load balancing
DNS The implementation principle of load balancing technology is DNS Configure multiple... For the same hostname in the server IP Address , In response to NDS When inquiring ,DNS The server will use DNS Recorded by the host in the file IP The address returns different parsing results in order , Guide client access to different machines , Make different clients access different servers , So as to achieve the goal of load balancing .
TCP Connect
The purpose of the three handshakes
The purpose is to prevent the invalid connection request message segment from being suddenly transmitted to the server , So there's a mistake .
Three handshakes :
The client sends a SYN=1,Seq=X To the server ( The first handshake , Browser initiated , Tell the server I'm going to send a request )
The server plays a band SUN=1,ACK=Y Response package to convey the confirmation message ( The second handshake , Initiated by the server , Tell the browser I'm ready to receive , It's ready to send )
The client returns another tape ACK=Y+1,Seq=Z Datagram , The handshake is over ( The third handshake , Sent by browser , Tell the server , I'm ready to send )
Message format :
Serial number :Seq Serial number (Sequence number Sequence number ), Occupy 32 position , Used to identify from TCP Byte stream sent from source to destination , Flag this when the initiator sends data .
Confirm the serial number :Ack Serial number (Acknowledge number Confirmation number ), Occupy 32 position , Only ACK Sign bit is 1 when , Verify that the ordinal field is valid ,Ack=Seq+1.
Sign a ( Bit code ): common 6 individual , namely URG、ACK、PSH、RST、SYN、FIN, The specific meaning is as follows :
URG:urgent, emergency . Pointer to an emergency (urgent pointer) It works .
ACK:acknowledgement, confirm . Confirm that the serial number is valid .
PSH:push, delivery . The receiver should send this message to the application layer as soon as possible .
RST:reset, Reset . Reset connection .
SYN:synchronous, Establish online . Initiate a new connection .
FIN:finish, end . Release a connection .
It should be noted that :
Do not confirm the serial number Ack And in flags ACK Confused.
Confirmation party Ack= Initiator Seq+1, Pairing at ends .
(°ー°〃) Let's explain the next three handshakes in vernacular
Express little elder brother : Hello , Your express is here , You're not at home ? Xiao Ming : At home , Send it over . Express little elder brother : well , Send it to... Right away .
send out HTTP request
The request message is sent by the request line , Request header , Blank line , The request body consists of four parts .
The request line contains the request method ,URL, Protocol version
The request method includes :GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE.
URL The address of the request
The agreement version is http Version number
GET /js/count.js HTTP/1.1
In the above code GET On behalf of the request method ,/js/count.js Express URL,HTTP/1.1 representative http edition
The request line contains the additional information requested , By keyword / Value pairs , One pile per line , Use English colons for keywords and values ":" Separate .
The request header notifies the server of information about the client request . It contains a lot of useful information about the client environment and the request body . such as :
Host: Host name , Virtual host
Connection:HTTP/1.1 To increase the , Use keeoalive, That is, persistent connections , A connection can send multiple requests
User-Agent: Client program information , Is the browser information I sent the request
Accept: The type of media data that the browser can receive
Accept-Encoding: The browser is used to inform the server of the content encoding it can support and the priority order of content encoding , Multiple content codes can be specified at one time
Accept-Language: high hi The natural language set that the server browser can handle
Cookie: User related information recorded by the browser
Request body : It can carry data of multiple request parameters , Include carriage return 、 Line breaks and request data , Not all requests have request data .
The server processes the request and returns HTTP message
The response message consists of a phase response line 、 Response head 、 The response body consists of three parts , Here's the picture
The response line contains the protocol version 、 Status code 、 Status code description
HTTP/1.1 200 OK
Protocol version :HTTP/1.1
Status code :200
200: The request is successful
201: In order to create , Successfully requested and created a new resource
203: Unauthorized information . The request is successful , But returned meta The information is not on the original server , It's a copy
204: There is no content . Server processed successfully , But no content returned . Without updating the page , Ensures that the browser continues to display the current document
301: Permanent redirection
302: Temporary redirection
307: Temporary redirection . And 302 similar . Use GET request redirections
400: Syntax error in client request , Server does not understand ( The parameters passed to the server are different from the accepted fields specified by the server )
404: The server could not find the resource at the request of the client
405: Method in client request is forbidden ( The request method is wrong , For example, server settings GET request , Client side usage POST request )
500: Server internal error
Status code description :ok
Response head
The response header provides the client with additional information , So that the client can respond better .
Server: The server tells the client what is currently installed on the server HTTP Information about the service application , May contain the name of the software application on the server , Version number
Content-Type: Indicates the type of entity content returned by the server to the browser
Transfer-Encoding: chunked Indicates that the length of the output cannot be determined , Ordinary static pages 、 Pictures and the like basically don't use this . Dynamic pages may use .
Cache-Control: Cache control , The default value is private, Indicates that the content is only cached in the private cache ( Only clients can cache , The proxy server is not cacheable )
Expires: Tell the client the expiration date of the resource
Response subject
The text information returned by the server to the client
Browser parse render page
Critical render path
The key rendering path refers to the browser receiving the request from the beginning HTML、CSS、JS And so on , And then parse , Building tree 、 Render layout 、 draw , Finally, the whole process of presenting the interface that the customer can see
It mainly includes the following steps
analysis HTML Generate DOM Trees
analysis CSS Generate CSSOM The rule tree
take DOM Trees and CSSOM Combining rule trees to generate rendering trees
Traverse render tree to start layout , Calculate the location size information of each node
Draw each node of the rendering tree to the screen
structure DOM Trees
When the browser receives a response from the server HTML After the documents , Traversing document nodes , Generate DOM Trees . It should be noted that ,DOM Tree generation may be CSS and JS The load execution is blocked .
structure CSSOM Rule book
Browser parsing CSS File and generate CSS The rule tree , Every CSS The files are parsed into a StyleSheet object , Each object contains CSS The rules .CSS The rule object contains the corresponding to CSS Syntax selector and declaration objects and other objects
Rendering blocking
When the browser encounters a script When the tag ,DOM The build will pause , Until the script is finished executing , Then continue to build DOM. Every time I go to execute Js Scripts are severely blocked DOM The construction of trees , If js The script also operates CSSOM, And just this one CSSOM Not yet downloaded and built , Browsers even delay script execution and build DOM, Until it's done CSSOM Download and build .
therefore script The location of the label is very important . In actual use , Two principles can be followed :
CSS first : In the order of introduction ,CSS Resources precede JS resources .
JS Put it back : Usually we put JS Put the code at the bottom of the page , And JS We should try to have as little influence as possible DOM structure
Build the render tree
adopt DOM Trees and CSS Rule tree, we can build a rendering tree . The browser will start with DOM The root node of the tree begins traversing each visible node . For each visible node , Find the appropriate CSS Pattern rules and apply .
After the rendering tree is built , Each node is visible and contains its content and the style of the corresponding rule . This is also the rendering tree and DOM The biggest difference between trees . The rendering tree is used to display , Of course, those invisible elements will not appear in this tree , besides ,display be equal to none Will not be shown in this tree , however visibility be equal to hidden The elements of will be displayed in this tree .
Render tree layout
The layout phase starts from the root node of the rendering tree , Then determine the exact size and location of each receiving object on the page , The output of the layout phase is a box model , He will accurately capture the exact position and size of each element on the screen .
Rendering tree drawing
In the drawing phase , Traverse the rendering tree , Call the paint() Method to display its contents on the screen . Rendering tree is done by browser UI Back end components complete
Reflow and redraw
According to the selected Enron tree layout , Calculation CSS style , That is, geometric information such as line and position of each node in the page .HTML The default is flow layout ,CSS and JS Will break the layout , change DOM The appearance, style, size and location of . This triggers reflow and redraw
Repaint
Part of the screen redraw , Does not affect the overall layout , For example, a certain CSS The background color of , But the geometry and position of the elements are the same .
Common attributes that cause replay
color
border-style
box-shadow
background
background-size
border-radius
background-position
backflow
When the size and position of the element change , Need to revalidate and compute the render tree . Part or all of the rendering tree has changed .
Common attributes and methods that cause backflow
Add or remove visible DOM Elements
Element size change -- Margin 、 fill 、 Frame 、 Width and height
Content change , Let's say the user input Enter text in
Browser window size changed
Calculation offsetWidth and offsetHeight
As can be seen from the above : Reflow must cause redrawing , Redrawing does not necessarily cause reflow .
Browser's rendering queue
Think about the following code that triggers several renderings ?
div.style.left = '10px'; div.style.top = '10px'; div.style.width = '20px'; div.style.height = '20px';
This code will theoretically trigger 4 Second redraw and reflow , Because the collection attribute of the element is changed every time , In fact, the final expenditure method has a return , It all benefits from
Browser's rendering queue mechanism
When the browser finds that a line of code is changing the element style , The browser does not render immediately , But slow down the shivering , See if your next line of code is changing the style , If you change the style on the next line , I'm shivering , If you find that several lines of code are changing the style , The browser will wait for these lines of code to complete , Before rendering , This is the browser's rendering queue mechanism
Animation effect application position The attribute is absolute or fixed Element ( Off stream )
This method also causes backflow , But it will have no effect on other elements , Can improve performance
css3 Hardware acceleration (GPU Speed up )
Hardware acceleration will automatically avoid backflow and redrawing css Here are a few more attributes that can trigger hardware acceleration
transform
opacity
filter
will-change
If there are some elements that do not need the above attributes , But you need to trigger the hardware acceleration effect , You can use some tips to induce browsers to turn on hardware acceleration .
-webkit-transform: translateZ(0); -moz-transform: translateZ(0); -ms-transform: translateZ(0); -o-transform: translateZ(0); transform: translateZ(0); / perhaps / transform: rotateZ(360deg); transform: translate3d(0, 0, 0);
What to pay attention to
Too much hardware acceleration may consume more memory .
GPU Rendering will affect the anti aliasing effect of Fonts . This is because GPU and CPU With different rendering mechanisms , Even if the hardware acceleration finally stops , The text will still be blurred during the animation .
disconnect
Now the page in order to optimize the time-consuming request , Persistent connections are enabled by default (keep-alive), So one TCP The exact time the connection was closed , This is it tab When the tabs are closed . The closing process is four waves . because TCP Full duplex on connection , therefore , Each direction must be closed separately , The principle is that when one party completes the data transmission task , Send a FIN To terminate the connection in this direction , Receive a FIN It just means there's no data flow in this direction , No more data , But here TCP Data can still be sent on the connection , Until it's sent in that direction FIN. Active shutdown will be performed by the first party to close , The other party performs a passive shutdown
client Send a FIN, Used to close client To server Data transfer of ,cliient Get into FIN_WAIT_1 state
server received FIN after , Send a ack to client, Confirm that the serial number is the received serial number +1( And SYN identical , One FIN Occupy a sequence number ),server Get into CLOSE_WAIT state
server Send a FIN, Used to close server To client Data transfer of ,server Get into LAST_ACK state
client received FIN after ,client Get into TIME_WAIT state , And then send a ack to server, Confirm that the serial number is the received serial number +1,server Get into CLOSED state , Finish four waves
State details :
**CLOSED:** Represents the initial state .
**LISTEN:** Represents some... On the server side SOCKET In a listening state , The connection is acceptable .
**SYN_RCVD:** This state indicates acceptance of SYN message , Under normal circumstances , This state is on the server side SOCKET In establishment TCP An intermediate state in a three-way handshake session when connecting , It's short , Basically used netstat It's hard for you to see this kind of state , Unless you specifically write a client test program , Deliberately three times TCP The last one in the handshake ACK The message will not be sent . So in this state , When received from client ACK After the message , It's going to go in ESTABLISHED state .
**SYN_SENT:** This state is related to SYN_RCVD To echo in the distance , When the client SOCKET perform CONNECT When the connection , It first sends SYN message , So then it goes into SYN_SENT state , And wait for the third handshake sent by the server 2 A message .SYN_SENT Status indicates that the client has sent SYN message .
**ESTABLISHED:** Indicates that the connection has been established .
**FIN_WAIT_1:** This state needs to be explained , Actually FIN_WAIT_1 and FIN_WAIT_2 The real meaning of state is waiting for each other FIN message . And the difference between these two states is :FIN_WAIT_1 State is actually when SOCKET stay ESTABLISHED In the state of , It wants to actively close the connection , Sent... To the other party FIN message , At this point the SOCKET That is to enter into FIN_WAIT_1 state . And when the other side responds ACK After the message , Then go to FIN_WAIT_2 state , Of course, in the actual normal situation , No matter what the other party's situation , We should respond immediately ACK message , therefore FIN_WAIT_1 State is generally more difficult to see , and FIN_WAIT_2 State can be used sometimes netstat notice .
**FIN_WAIT_2:** This state has been explained in detail above , actually FIN_WAIT_2 In state SOCKET, Indicates a half connection , That is to say, there is a demand for close Connect , But also tell the other person , I still have some data to transmit to you , Close the connection later .
**TIME_WAIT:** It means that I have received FIN message , And sent out ACK message , Just wait 2MSL(Max Segment Lifetime) And then you can go back to CLOSED Available state . If FIN_WAIT_1 State, , Received the other side at the same time with FIN Logo and ACK When the message is marked , You can go directly to TIME_WAIT state , Without going through FIN_WAIT_2 state .
**CLOSING:** This state is quite special , In fact, it should be very rare , It belongs to a rare exception . Under normal circumstances , When you send FIN After the message , It should be received first ( Or received at the same time ) The other person's ACK message , I'll get it back FIN message . however CLOSING Status means you send FIN After the message , Didn't receive the other party's ACK message , But also received the other side's FIN message . When will this happen ? Actually, think about it , It's not hard to come to a conclusion : That is, if both sides are almost at the same time close One SOCKET Words , So there's a simultaneous delivery FIN Message situation , That is to say, there will be CLOSING state , That both sides are closing down SOCKET Connect .
**CLOSE_WAIT:** The meaning of this state is that it is waiting to close . How do you understand that ? When the other side close One SOCKET Post send FIN Message to yourself , Your system will undoubtedly respond to a ACK Message to the other party , At this point, you will enter CLOSE_WAIT state . The next? , In fact, what you really need to consider is to see if you still have data to send to the other party , If not , Then you can close This SOCKET, send out FIN Message to the other party , That is, close the connection . So you're CLOSE_WAIT State, , What needs to be done is waiting for you to close the connection .
**LAST_ACK:** It's passively shut down when the party is sending FIN After the message , Finally, wait for each other's ACK message . When I received ACK After the message , That is to say, you can enter CLOSED Available state .
This article is from WeChat official account. - Programmer Yifan (gh_6cafb826630a).
If there is any infringement , Please delete .
版权声明:本文为[Programmer a mu]所创,转载请带上原文链接,感谢。 https://car.inotgo.com/2021/08/20210806112006842c.html