Cómo optimizar la página web y las bases de datos de un sitio web de gran contenido

Un sitio web relacionado con el comercio electrónico de compras. El sitio web tiene una gran cantidad de datos para almacenar en la base de datos. hasta ahora, la tabla de productos en db tiene casi 18K registros con 20 campos. he creado la estructura db de la siguiente manera

 - brands
 - products
 - shopslist
 - shopping_details

El sitio web tiene más de 100 páginas, todo lo relacionado con productos y marcas.

eg.pages are 
www.example.com/nokia-mobile-phones.php , www.example.com/samsung-mobile-phones.php 
www.example.com/samsung-galaxy-s3-price.php,www.example.com/android-mobile-phones.php

He escrito las consultas para obtener los detalles del producto correspondientes a las páginas de forma dinámica. Esto hace que mi sitio web sea un poco más lento para obtener los datos de db y mostrarlos.

Actualmente, el sitio web tiene entre 14 y 15 visitas al día. De repente, el sitio web se vuelve muy lento y deja de responder durante más de 10 horas al día. Los técnicos del lado del alojamiento dijeron que el problema se debe a una mayor cantidad de solicitudes en un solo día y su base de datos ocupa el 75% de la memoria, optimice su sitio y base de datos para obtener mejores resultados. El sitio web está alojado en VPS con mejores configuraciones.

Amablemente brinde soluciones para optimizar un sitio web, consultas y db.

preguntado el 02 de julio de 12 a las 12:07

¿El sitio de comercio electrónico de compras se está construyendo desde cero o se basa en algún proyecto de código abierto? -

¿Estás buscando según el texto de las URL? Lo que definitivamente ralentizará la búsqueda, ya que la búsqueda de texto no es tan buena en DB... Mi sugerencia es agregar algunos identificadores en la URL www.example.com/ /nokia-mobile-phones.php y consulte la base de datos con esa identificación e indexe el campo (si no es la clave principal) -

en primer lugar, debe optimizar las consultas para obtener solo los campos obligatorios y verificar si la base de datos está normalizada; también debe pensar en agregar índices. -

Guarda en caché tus páginas. eso ejercerá menos presión sobre el DB. incluso con una gran estructura, página web optimizada, llegará un día en que no podrá aceptar más solicitudes. así que guarde en caché por ahora, sugiero:

Sugiero ir con la sugerencia dada por @Dreadedsemicolon y también la sugerencia crosschec naveen-kumar.... ya que su página se llama "sony-mobile-phones.php" ¿cómo busca en la base de datos los productos de sony-mobile-phones? .... puede agregar un md5 del nombre de la página en el índice de campo alternativo y luego usarlo como una búsqueda en lugar de una simple búsqueda de "teléfonos móviles sony" en DB -

3 Respuestas

  1. Usar sistemas de almacenamiento en caché

  2. Evite cambiar el tamaño de las imágenes en HTML, si una imagen tiene una dimensión original de 1280x900px. (es decir <img width="400" height="280" src="myimage.jpg" />)

  3. Usar archivos JS y CSS externos

  4. Optimice la forma en que escribe código: por ejemplo, en lugar de usar <h1><em>Your heading</em></h1>, puede usar fácilmente CSS para hacer que sus encabezados estén en cursiva usando la propiedad de estilo de fuente

  5. Utilice una red de entrega de contenido (CDN)

Respondido 02 Jul 12, 12:07

Perfile su código para identificar cuellos de botella

El dictamen de Hoare establece que la optimización prematura es la raíz de todos los males, algo importante a tener en cuenta cuando se trata de hacer que sus sitios web sean más rápidos. Antes de cambiar su código, deberá determinar qué está causando que sea lento. Puede leer esta guía y muchas otras sobre cómo optimizar PHP, cuando el problema podría estar relacionado con la base de datos o la red. Al perfilar su código PHP, puede intentar identificar cuellos de botella.

Actualiza tu versión de PHP

El equipo de desarrolladores que mantienen el motor PHP ha realizado una serie de mejoras de rendimiento significativas a lo largo de los años. Si su servidor web aún ejecuta una versión anterior, como PHP 3 o PHP 4, es posible que desee investigar la actualización antes de intentar optimizar su código.

Usar almacenamiento en caché

Hacer uso de un módulo de almacenamiento en caché, como Memcache, o un sistema de plantillas que admita el almacenamiento en caché, como Smarty, puede ayudar a mejorar el rendimiento de su sitio web al almacenar en caché los resultados de la base de datos y las páginas renderizadas.

Usar almacenamiento en búfer de salida

PHP usa un búfer de memoria para almacenar todos los datos que su secuencia de comandos intenta imprimir. Este búfer puede hacer que sus páginas parezcan lentas, porque sus usuarios tienen que esperar a que el búfer se llene antes de enviarles datos. Afortunadamente, puede realizar algunos cambios que forzarán a PHP a vaciar los búferes de salida antes y con mayor frecuencia, lo que hará que los usuarios vean que su sitio es más rápido.

Evite escribir setters y getters ingenuos

Al escribir clases en PHP, puede ahorrar tiempo y acelerar sus scripts trabajando directamente con las propiedades de los objetos, en lugar de escribir setters y getters ingenuos. En el siguiente ejemplo, la clase dog usa el setName() y getName() métodos para acceder a la propiedad de nombre.

class dog {
  public $name = '';

  public function setName($name) {
    $this->name = $name;
  }

  public function getName() {
    return $this->name;
  }
}

Darse cuenta de setName() y getName() no hace nada más que almacenar y devolver la propiedad de nombre, respectivamente.

$rover = new dog();
$rover->setName('rover');
echo $rover->getName();

Establecer y llamar directamente a la propiedad de nombre puede ejecutarse hasta un 100 % más rápido, además de reducir el tiempo de desarrollo.

$rover = new dog();
$rover->name = 'rover';
echo $rover->name;

No copiar variables sin motivo

A veces, los novatos de PHP intentan hacer que su código sea "más limpio" copiando variables predefinidas a variables con nombres más cortos antes de trabajar con ellas. Lo que esto realmente da como resultado es un consumo de memoria duplicado (cuando se modifica la variable) y, por lo tanto, scripts lentos. En el siguiente ejemplo, si un usuario hubiera insertado 512 KB de caracteres en un campo de área de texto. Esta implementación daría como resultado el uso de casi 1 MB de memoria.

$description = strip_tags($_POST['description']);
echo $description;

No hay razón para copiar la variable anterior. Simplemente puede hacer esta operación en línea y evitar el consumo de memoria adicional:

echo strip_tags($_POST['description']);

Evite hacer consultas SQL dentro de un bucle

Un error común es colocar una consulta SQL dentro de un bucle. Esto da como resultado múltiples viajes de ida y vuelta a la base de datos y scripts significativamente más lentos. En el siguiente ejemplo, puede cambiar el bucle para crear una sola consulta SQL e insertar todos sus usuarios a la vez.

foreach ($userList as $user) {
  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
  mysql_query($query);
  }

Produce:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe")

En lugar de usar un bucle, puede combinar los datos en una sola consulta de base de datos.

$userData = array();
foreach ($userList as $user) {
    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
 }
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);

Produce:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...

Un buen enfoque cuando se trata de SQL la optimización es seleccionar SOLO los campos que necesita, no todos en su caso. Esto casi siempre tiene un gran impacto en el rendimiento, especialmente cuando los campos están BLOB's. Y, la indexación también es muy importante, PERO solo si la ha creado correctamente. un uso de LIMIT La cláusula en su consulta también es una buena idea, si no necesita mostrar su resultado a la vez.

Aquí hay más información sobre la optimización JavaScript código y aquí para optimizar gráficos web.

Respondido 02 Jul 12, 13:07

  • Obtén imágenes, estilos, etc. desde un dominio estático.
  • Utilice Master & Slave para sus bases de datos
  • verifique índices, esquemas y tipos de datos en sus tablas.

Puedo asegurarle que la configuración de su base de datos, índices, etc. están sufriendo. Si brinda más información sobre las tablas de su base de datos, lo ayudaremos con mejores respuestas;)

Respondido 02 Jul 12, 12:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.