Krypton Solid

La última tecnología en raciones de 5 minutos

Cómo potenciar la velocidad de su sitio con AJAX y JQuery

Cómo potenciar la velocidad de su sitio con AJAX y JQuery

En este tutorial, veremos cómo acelerar la experiencia del usuario en pequeños sitios estáticos utilizando algunos métodos diferentes. (Un sitio estático es uno que no tiene ningún contenido renovable, por lo que no hay publicaciones de blog o secuencias de fotos, etc.)

La forma en que lo haremos es eliminando las recargas de página. En pocas palabras, cuando el usuario usa algunos enlaces de navegación, solo cambia el contenido principal de la página y no hace que el navegador vuelva a cargar la página.

Lograremos este efecto de dos maneras diferentes, la primera solo usa jQuery y la otra usa AJAX y algo de PHP. Ambos tienen sus pros y sus contras, que también veremos. Eche un vistazo a la demostración para ver lo que estamos tratando de lograr y comencemos con el primer método jQuery (y más simple).

Lograr el efecto con jQuery

Primero veremos la configuración de la página. El HTML es muy simple pero tiene algunas partes importantes, «lo esencial» por así decirlo. Necesitamos algunos enlaces de navegación que tengan un hash href específico (que explicaremos en un minuto) y un área de contenido específica que ya tendría en cualquier otro sitio de todos modos. Primero veamos qué hay en nuestro archivo index.html:

<body>
<header>
    <h1>Speed Up Static Sites with jQuery</h1>
    <nav>
        <ul>
            <li><a href="https://www.webdesignerdepot.com/2014/02/how-to-supercharge-your-sites-speed-with-ajax-and-jquery/#page1" class="active" id="page1-link">Page 1</a></li>
            <li><a href="#page2" id="page2-link">Page 2</a></li>
            <li><a href="#page3" id="page3-link">Page 3</a></li>
            <li><a href="#page4" id="page4-link">Page 4</a></li>
        </ul>
    </nav>
</header>
<div id="main-content">
    <section id="page1">
        <h2>First Page Title</h2>
        <p>First page content.</p>
    </section>
    <section id="page2">
        <h2>Look, no page load!</h2>
        <p>Second page content.</p>
    </section>
    <section id="page3">
        <h2>Ooh fade!</h2>
        <p>Third page content.</p>
    </section>
    <section id="page4">
        <h2>Fourth Page Title</h2>
        <p>Fourth page content.</p>
    </section>
</div> <!-- end #main-content -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="custom.js"></script>
</body>

Entonces, para recapitular las partes importantes de lo que debe incluirse en el marcado: tenemos nuestra navegación en la que cada enlace tiene un href del DIV correspondiente. Entonces, el enlace a “Página 2 ″ tiene un href =” # página2 ”(que es la identificación del elemento

más abajo). Entonces, con este primer método, como puede ver, tenemos un div de # main-content alrededor de nuestras secciones, y luego cada contenido de página, uno tras otro, en su propio elemento de ‘sección’ separado. También llamamos jQuery y nuestro propio archivo javascript custom.js en el que se realizará la funcionalidad real del sitio.

Pero antes de llegar a eso, debemos agregar una línea a nuestro CSS, no es necesario repasar todo el archivo CSS para este ejemplo, ya que todo es solo por apariencia, que cambiará con cualquier proyecto en el que esté trabajando. Sin embargo, con este primer método hay una línea que es esencial y es:

#page2, #page3, #page4 {
display: none;
}

Esto oculta todas las ‘páginas’ excepto la primera. Entonces, la página aparece normalmente en la primera carga.

CONTENIDO RELACIONADO  La actualización de Google Pixel incluye funciones para compartir para grabaciones de audio

El JavaScript

Entonces, ahora para explicar lo que necesitamos lograr a través de jQuery. En nuestro archivo custom.js, debemos orientarnos cuando el usuario hace clic en un enlace de navegación. Recupere su enlace href y busque la ‘sección’ con ese mismo ID, luego oculte todo en el div # main-content y desaparezca en la nueva sección. Esto es lo que parece:

$(function() {
    $('header nav a').click(function() {
        var $linkClicked = $(this).attr('href');
        document.location.hash = $linkClicked;
        if (!$(this).hasClass("active")) {
            $("header nav a").removeClass("active");
            $(this).addClass("active");
            $('#main-content section').hide();
            $($linkClicked).fadeIn();
            return false;
        }
        else {
            return false;
        }
    });
    var hash = window.location.hash;
    hash = hash.replace(/^#/, '');
    switch (hash) {
        case 'page2' :
            $("https://www.webdesignerdepot.com/2014/02/how-to-supercharge-your-sites-speed-with-ajax-and-jquery/#" + hash + "-link").trigger("click");
            break;
        case 'page3' :
            $("https://www.webdesignerdepot.com/2014/02/how-to-supercharge-your-sites-speed-with-ajax-and-jquery/#" + hash + "-link").trigger("click");
            break;
        case 'page4' :
            $("https://www.webdesignerdepot.com/2014/02/how-to-supercharge-your-sites-speed-with-ajax-and-jquery/#" + hash + "-link").trigger("click");
            break;
    }
});

Este código se divide en dos secciones, la primera logra lo que acabamos de hablar. Tiene una función de clic en los enlaces de navegación del encabezado. Luego coloca ‘# page1, # page2’, etc.en una variable llamada $ linkClicked. Luego, actualizamos la URL del navegador para que tenga el mismo nombre de hash. Luego tenemos una declaración if que asegura que el enlace en el que estamos haciendo clic no es la pestaña actual, si es así, no haga nada, pero si no, oculte todo el contenido actual y muestre el div con un ID de $ linkClicked. ¡Simple como eso!

La segunda sección verifica si la URL tiene un enlace hash al final, si lo tiene, encuentra un enlace correspondiente en la página con el mismo valor (es por eso que los enlaces tienen ID específicos en el marcado) y luego activa eso enlace (hace clic en él). Esto significa que el usuario puede volver a cargar una página después de haber navegado a una ‘página’ y la actualización enviará al usuario de regreso allí en lugar de volver a la primera página, lo que a menudo puede ser un problema con este tipo de sistema.

Así que ese es el final del primer método, esto da como resultado un sitio estático que funciona con intercambio instantáneo de contenido y sin recargas de página. El único inconveniente de este método es el hecho de que todo el contenido se llama en la carga inicial, ya que todo está en el archivo de índice. Esto puede comenzar a ser un problema con las fotos y el contenido adicional, lo que hace que la primera visita al sitio se cargue un poco más. Así que veamos otra forma de hacer este mismo efecto que puede eliminar ese problema.

CONTENIDO RELACIONADO  Los mejores fabricantes de dispositivos Android hicieron trampa en las puntuaciones de las pruebas de rendimiento

Usando AJAX y PHP

Para lograr este mismo efecto pero de una manera ligeramente diferente, de modo que la carga inicial no vaya a cargar todo nuestro contenido y así ralentizarlo (anulando el punto si el sitio tiene mucho contenido) usaremos un poco PHP y AJAX. Esto significa que la estructura de archivos de nuestro proyecto cambiará y se verá así:

estructura

Entonces, si miras, el archivo de índice ahora es un .php y no un .html. También tenemos un archivo adicional llamado ‘load.php’, así como una nueva carpeta / directorio llamado páginas en el que hay cuatro páginas HTML. Ahora bien, esto significa que si está trabajando localmente, necesita configurar un entorno de desarrollo local usando algo como MAMP (para Mac) o Servidor WAMP (para ventanas). O puede cargar la carpeta completa en un servidor web si tiene acceso y editar allí, básicamente necesitará un entorno donde funcione PHP.

El index.php solo ha cambiado una cosa, pero es importante, ahora no cargaremos todo el contenido allí, y simplemente llamaremos al contenido inicial con una inclusión de PHP. Ahora se verá más o menos así:

<body>
<header>
    <h1>AJAX a Static Site</h1>
    <nav>
        <ul>
            <li><a href="https://www.webdesignerdepot.com/2014/02/how-to-supercharge-your-sites-speed-with-ajax-and-jquery/#page1" class="active" id="page1-link">Page 1</a></li>
            <li><a href="#page2" id="page2-link">Page 2</a></li>
            <li><a href="#page3" id="page3-link">Page 3</a></li>
            <li><a href="#page4" id="page4-link">Page 4</a></li>
        </ul>
    </nav>
</header>
<div id="main-content">
<?php include('pages/page1.html'); ?>
</div> <!-- end #main-content -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="custom.js"></script>
</body>

Entonces la línea comienza está llamando al primer archivo HTML de nuestra carpeta de páginas e insertándolo por completo en nuestro DIV # main-content. El archivo llamado puede contener cualquier contenido que desee que aparezca en la página.

Usando $ .ajax en JavaScript

Pasemos al nuevo JavaScript, ahora se ve ligeramente diferente, principalmente ahora estamos usando AJAX para buscar el nuevo contenido de cada archivo HTML cuando el usuario hace clic en la navegación correspondiente. Aquí está la primera función en el código (la segunda permanece igual que antes):

$(function() {
    $('header nav a').click(function() {
        var $linkClicked = $(this).attr('href');
        document.location.hash = $linkClicked;
        var $pageRoot = $linkClicked.replace('#page', '');
        if (!$(this).hasClass("active")) {
            $("header nav a").removeClass("active");
            $(this).addClass("active");
            $.ajax({
                type: "POST",
                url: "load.php",
                data: 'page="+$pageRoot,
                dataType: "html",
                success: function(msg){
                if(parseInt(msg)!=0)
                {
                    $("#main-content').html(msg);
                    $('#main-content section').hide().fadeIn();
                }
            }
        });
    }
    else {
        event.preventDefault();
    }
});

Entonces, expliquemos lo que está pasando. Estamos agregando una variable más, que es $ pageRoot. Este es básicamente el número real en el que se hizo clic (tomando la parte ‘#page’ del enlace hash y dejando el número individual). Luego, dentro de la misma declaración «if» como antes, llamamos ajax y usamos el otro archivo PHP que mencionamos anteriormente para analizar la información proporcionada (en qué enlace se hizo clic) y encontrar la página correspondiente. Luego, si regresa sin error, insertamos el nuevo HTML del archivo recibido en nuestro # main-content DIV. Luego, solo para evitar que cambie de repente, ocultamos todo y luego lo atenuamos.

CONTENIDO RELACIONADO  Samsung revelará la causa de la explosión de la batería del Galaxy Note 7 este domingo

load.php

El contenido del nuevo archivo PHP es corto y atractivo, toma el número de página que jQuery le ha enviado y busca ver si existe el archivo HTML correspondiente. Si lo hace, obtiene todo el contenido y lo devuelve a la función AJAX (que mostramos hace un momento que insertamos ese contenido en el DIV principal).

<?php
if(!$_POST['page']) die("0");
$page = (int)$_POST['page'];
if(file_exists('pages/page'.$page.'.html'))
echo file_get_contents('pages/page'.$page.'.html');
else echo 'There is no such page!';
?>

Después de eso, el sitio debería verse como usted quiera, pero en su mayoría funcionará correctamente.

¡Eso es! El sitio ahora llama al archivo HTML correspondiente a la derecha cada vez que el usuario hace clic en un enlace de navegación. Cambia el contenido sin tener que recargar la página. ¡Y de esta manera todavía no tiene que llamar a todo el contenido en la carga de la página inicial! Espero que hayas logrado aprender algún método útil de este tutorial y que puedas usarlo para mejorar algún proyecto de alguna manera.

Puede ver la demostración de jQuery aquí, la demostración de PHP aquí, o descargar la fuente y echar un vistazo más de cerca.

¿Ha utilizado AJAX para cargar contenido? ¿Ha utilizado una técnica similar para acelerar su sitio? Háganos saber sus pensamientos en los comentarios a continuación.

Imagen destacada / miniatura, imagen sobrealimentada a través de Shutterstock.

Deja un comentario

También te puede interesar...

Fundamentos del diseño: restricciones

Fundamentos del diseño: restricciones El concepto de restricciones en el diseño se puede definir como la práctica de limitar las acciones del usuario en un sistema. Las restricciones limitan las acciones que puede realizar el

Firefox agrega un servicio de archivos antimalware

Mozilla ha anunciado que la nueva versión 31.0 de Firefox, lanzada a principios de esta semana, verificará las descargas de archivos individuales contra el servicio confiable de Google Safe Browsing para determinar si se trata

Un día en la vida de un trader profesional de Forex

El estatus profesional de un comerciante de divisas requiere años de compromiso y está respaldado por estrategias claramente definidas que muestran una rentabilidad constante. Pero las recompensas valen el esfuerzo; Los comerciantes de divisas profesionales

Diamond aumenta el volumen del MP3

Diamond Multimedia Systems Inc. el volumen en el mercado de la música digital ha aumentado. RioPort Inc., una Diamante (Nasdaq:DIMDATA) lanzó un nuevo programa de software fácil de usar para MP3 y Windows Media Audio:

GitHub combate los ciberataques DDoS | Krypton Solid

Symantec GitHub ha estado trabajando para mitigar un nuevo ataque DDoS percibido contra el servicio esta semana. El almacén de códigos, utilizado para alojar código, desde sistemas de seguridad hasta marcos de aplicaciones y almacenes

¿Qué producto lanzará Apple el 19 de mayo?

Anticipándose al décimo aniversario minorista de Apple el 19 de mayo, los empleados minoristas recibieron órdenes estrictas de proteger las misteriosas entregas y exhibidores que llegaron a las tiendas Apple esta semana, como dijo Boy.

HomeAdvisor de Microsoft obtiene $ 100 millones en fondos

El servicio de financiamiento y compra en línea de Microsoft Corp., HomeAdvisor Technologies Inc., ha obtenido más de $ 100 millones en financiamiento de dos importantes compañías hipotecarias. Inversiones de capital de Chase Manhattan Mortgage,

Descarga gratuita: Samsung Galaxy S10 PSD Mockups

Descarga gratuita: Samsung Galaxy S10 PSD Mockups Este impresionante conjunto de maquetas de Samsung Galaxy S10 fue creado por Cedric Pereira y está disponible en formato PSD. ¡Utilice esta elegante maqueta en publicidad, carteles, pancartas