user38558: I am trying to incorporate IoT to my embedded system project. I would call it soft real-time embedded system project. 
But because of these 'LAZY' lines,
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
if (!client) {
  return;  // Wait until the client sends some data
}
Serial.println("new client");
while (!client.available()) {
  delay(1);
}

The rest of the embedded system project has become so slow. If I don't put any of those lines, there will be obnoxious side-effects. How can I run this code along my actual embedded system project and still get done the soft real-time job?
[Edited] Full code:
#include <ESP8266WiFi.h>

const char* ssid = "Linux"; // SSID i.e. Service Set Identifier is the name of your WIFI
const char* password = "0123456789"; // Your Wifi password, in case you have open network comment the whole statement.

int ledPin = 13; // GPIO13 or for NodeMCU you can directly write D7 
WiFiServer server(80); // Creates a server that listens for incoming connections on the specified port, here in this case port is 80.

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP()); //Gets the WiFi shield's IP address and Print the IP address of serial monitor
  Serial.println("/");

}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

// Set ledPin according to the request
//digitalWrite(ledPin, value);

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");

  client.print("Led pin is now: ");

  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
  client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");  
  client.println("</html>");

  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");

}


user-1: I tested your sketch on a NodeMCU 0.9 and it works fine. Response times is sub-second. I'm using Firefox on a Linux Mint as a client.

I added code to timed each loop execution. The average time is 20-30 ms per loop. It looks fine to me or is it to long for you?
I think using a ESP8266WebServer is overkill and probably will take more resources to run. Having used ESP8266WebServer, for a project with one or two pages, using your approach is just fine. 

38558: <p>I am trying to incorporate IoT to my embedded system project. I would call it soft real-time embedded system project. 
But because of these '<em>LAZY</em>' lines,</p>

<pre><code>while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
if (!client) {
  return;  // Wait until the client sends some data
}
Serial.println("new client");
while (!client.available()) {
  delay(1);
}
</code></pre>

<p>The rest of the embedded system project has become so slow. If I don't put any of those lines, there will be obnoxious side-effects. How can I run this code along my actual embedded system project and still get done the soft real-time job?</p>

<p>[Edited] Full code:</p>

<pre><code>#include &lt;ESP8266WiFi.h&gt;

const char* ssid = "Linux"; // SSID i.e. Service Set Identifier is the name of your WIFI
const char* password = "0123456789"; // Your Wifi password, in case you have open network comment the whole statement.

int ledPin = 13; // GPIO13 or for NodeMCU you can directly write D7 
WiFiServer server(80); // Creates a server that listens for incoming connections on the specified port, here in this case port is 80.

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP()); //Gets the WiFi shield's IP address and Print the IP address of serial monitor
  Serial.println("/");

}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

// Set ledPin according to the request
//digitalWrite(ledPin, value);

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("&lt;!DOCTYPE HTML&gt;");
  client.println("&lt;html&gt;");

  client.print("Led pin is now: ");

  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("&lt;br&gt;&lt;br&gt;");
  client.println("&lt;a href=\"/LED=ON\"\"&gt;&lt;button&gt;Turn On &lt;/button&gt;&lt;/a&gt;");
  client.println("&lt;a href=\"/LED=OFF\"\"&gt;&lt;button&gt;Turn Off &lt;/button&gt;&lt;/a&gt;&lt;br /&gt;");  
  client.println("&lt;/html&gt;");

  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");

}
</code></pre>
 -1: <p>I tested your sketch on a NodeMCU 0.9 and it works fine. Response times is sub-second. I'm using Firefox on a Linux Mint as a client.</p>

<p><a href="https://i.stack.imgur.com/ntP1K.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ntP1K.png" alt="Test run"></a></p>

<p>I added code to timed each <code>loop</code> execution. The average time is 20-30 ms per loop. It looks fine to me or is it to long for you?</p>

<p>I think using a ESP8266WebServer is overkill and probably will take more resources to run. Having used ESP8266WebServer, for a project with one or two pages, using your approach is just fine. </p>
