
Récemment, il y a eu de nombreux articles sur les lacunes des logiciels modernes, alors que personne n'essaie de proposer leurs solutions pour changer la situation. Cet article est la réponse à certains articles à ce sujet, ainsi qu'aux rêves d'un navigateur parfait. Comment pourrions-nous repenser le navigateur, son interface utilisateur, les méthodes d'interaction avec les sites, améliorer les protocoles et l'expérience utilisateur en général. Si vous en avez, même les pensées les plus audacieuses à ce sujet, je vous suggère d'en discuter et peut-être de jeter les bases de la création du navigateur parfait. En fin de compte, tôt ou tard, cela devra être fait, car la situation sur le marché des navigateurs pour le moment n'est pas du tout joyeuse. Et ce n'est pas un problème que les autres navigateurs sont très complexes et difficiles à rattraper - nous pouvons suivre notre propre chemin, implémenter uniquement les parties nécessaires des normes, et en même temps, nous pouvons introduire nos propres extensions non standard. Pas besoin de courir après les autres, laissez les autres courir après nous. Que notre navigateur soit créé pour les gens, et non pas au nom des intérêts commerciaux de sociétés de bons et étranges consortiums, qui n'ont plus servi depuis longtemps.

Que devrait être un navigateur idéal?
Chercher
Si vous créez un nouveau navigateur, la première chose à faire est une recherche locale sur tout. Par des onglets ouverts, cache, fichiers téléchargés et des tonnes de méta-informations à l'intérieur. La recherche doit être à la fois par index et par régulière, et l'utilisateur doit pouvoir sélectionner toutes les options possibles, y compris les encodages de documents (par exemple, une très bonne recherche dans Far).
Une fois, dans l'un des forums, j'ai trouvé un concept intéressant de l'algorithme. Il n'y a pas eu de discussion, j'ai donc rapidement fermé l'onglet, mais le concept lui-même s'est installé dans ma tête. Après y avoir réfléchi en arrière plan, j'ai décidé de partager mes idées ... Mais où? En regardant rapidement les forums où je vivais habituellement - je n'ai rien trouvé de tel. Les moteurs de recherche n'ont rien non plus, mais ce n'est pas surprenant - les forums ne sont pas indexés instantanément. J'ai commencé à fouiller dans l'historique du navigateur - je n'ai rien trouvé, mais ce n'est pas surprenant, car il est grand, il est peu pratique à utiliser, je pourrais manquer quelque chose. J'ai redécouvert presque toutes les pages - je n'ai rien trouvé de tel. J'ai commencé à chercher des messages dans le courrier, dans des messagers, même à demander aux gens - sans résultat. Je commençais déjà à penser que j'étais contrôlé par des reptiliens, des concepts inspirants, comment j'ai décidé d'utiliser le dernier outil: rechercher les fichiers de cache du navigateur. Et presque instantanément, il a trouvé l'endroit qu'il cherchait. Il s'est avéré que puisque personne n'a répondu au sujet du forum, l'auteur a pensé qu'il avait écrit de la stupidité, il avait honte et il a simplement supprimé le fil. Et je cherchais ce sujet éloigné depuis longtemps et je ne pouvais pas le trouver, me liquidant.
Une autre fois, j'avais besoin de mettre à jour un fichier vidéo. Le fichier s'appelait 1.mp4 (je pense que beaucoup de ces fichiers en contiennent beaucoup). C'était d'une certaine valeur pour moi, mais malheureusement, il s'est avéré être cassé. Où l'ai-je téléchargé? J'ai dû le rechercher à nouveau pour les mots clés qui se trouvaient dans la vidéo elle-même.
Séances
Lorsque vous essayez de comprendre un nouveau sujet, des dizaines d'onglets s'ouvrent d'eux-mêmes. Lien après lien et nous avons une lecture pendant plusieurs jours. De plus, chaque onglet est quelque chose d'important qui doit être lu. On fait quoi? Surtout quand tout cela s'accumule de plus en plus?
Vous pouvez simplement fermer tout ce que vous voyez et compter sur l'histoire, disent-ils à l'avenir, si nécessaire, il sera trouvé. Ou videz tous les onglets dans les signets. Ou même enregistrer / imprimer des pages n'est pas très pratique, mais les informations exactes trouvées ne seront jamais perdues (cependant, les informations sur l'enregistrement des informations seront écrites plus tard).
Ou peut-être enregistrer toute la session en tant que projet? Donnez-leur des noms significatifs tels que «Je cherchais un modèle de bateau», «Apprendre à programmer» et allumer / éteindre au besoin? Chaque navigateur a maintenant un profil ou un mécanisme de session, mais il est souvent caché, ce qui le rend difficile à trouver et encore plus difficile à utiliser. Le seul navigateur où un tel mécanisme est bien implémenté est peut-être le navigateur Edge dans ses dernières versions. Avec toutes les lacunes de ce navigateur, ce mécanisme est rendu aussi pratique que possible et vous permet de ne pas accumuler d'onglets, mais il est pratique de les trier. Bien sûr, il n'y a pas de limite à la perfection, mais avoir au moins une telle option est un must. Mieux encore, vous pouvez enregistrer de telles sessions avec le cache / contenu des pages. Ce n'est pas la façon dont les navigateurs le font maintenant, en enregistrant le cache sous une forme binaire, mais afin d'ouvrir 100 onglets sur un nouveau sujet, enregistrez-les dans un format lisible par d'autres appareils (.html / .pdf) et téléchargez-le sur votre téléphone , où il est facile à lire, peut-être loin de la civilisation.
Confidentialité
L'utilisateur doit décider quelles informations avec le site il souhaite partager. Je ne devrais pas chercher différents commutateurs User-Agent, une telle fonctionnalité devrait être intégrée au navigateur lui-même. Par exemple, le moteur de recherche Google.com fonctionne bien si vous vous présentez en tant que liens, mais une recherche instantanée désagréable qui mange le texte saisi n'apparaît pas.
Je veux pouvoir:
* définir la largeur et la hauteur de l'écran (n'importe lequel, au moins 50000x50000 pixels)
* profondeur de couleur, quels que soient les paramètres actuels
* ajoutez le site à confiance afin que ses cookies ne soient pas acides lorsque vous cliquez sur "effacer tout"
* remplacer les polices sur la page, tout en fournissant au site la liste des polices qu'il souhaite
* fournir un User-Agent arbitraire, peut-être même aléatoire, tiré d'un grand fichier d'options ou lié à un site spécifique
* choisissez la langue du contenu et voyez ce qui est transmis au serveur, et pas seulement la «langue préférée», qui ne sait pas encore ce qui va se dérouler
* nombre et séquence d'en-têtes, y compris l'émulation de bogues connus d'autres navigateurs
Et en général, tout ce qui peut être empreintes digitales doit pouvoir changer. Je veux avoir cette opportunité.
Ce qui est drôle, c'est que les anciens navigateurs ont un tas de paramètres pour cela. Par exemple, les navigateurs tels que les liens, w3m et netsurf peuvent non seulement désactiver le référent / l'agent utilisateur, mais également fournir de nombreuses options intéressantes différentes où vous pouvez affiner le comportement du navigateur, comment il remplira ces champs. Alors que seules les futures versions de Firefox apprendront à le faire, et seulement partiellement, sans donner une protection à 100% des utilisateurs, sans aucune option, définissant strictement le comportement uniquement dans certaines conditions (cependant, nous parlerons des paramètres et des conditions du site).
Navires volants
Pendant très longtemps, MSIE n'a pas soutenu la position: fixe, pour laquelle il a été grondé. Et comme le montre la pratique, c'est bien que je ne l'ai pas soutenu. Certes, cela n'a pas arrêté les gens et ils l'ont émulé via JS avec des menus sautants, qui ont survécu à ce jour sur des millions de sites.
Aujourd'hui, des éléments qui se chevauchent sont utilisés pour tout ce qui est utile: des fenêtres de connexion en plein écran qui apparaissent pendant la navigation et ne peuvent pas être supprimées (facebook), des assistants contextuels qui se révèlent être des robots de discussion, des messages en plein écran sur les promotions et les cadeaux, comment j'ai gagné quelque chose , parfois ils me montrent juste des publicités (sans publicité mais sans bouton de fermeture), des pop-ups transparents qui m'empêchent de cliquer sur la page (pornhub), et l'apothéose: ils me disent que je dois désactiver AdBlock, ce que je n'ai pas.
Avez-vous essayé d'imprimer une page? Mais j'imprime souvent le PDF et je veux battre ceux qui font des extensions pop-up comme «nous utilisons des cookies» ou «ici les dernières nouvelles» quelque part au-dessus ou en dessous de l'écran. Eh bien, ou tout simplement un menu fixe en haut et un simple pied de page en bas. Non, eh bien, sur l'écran, il ne semble toujours rien, vous pouvez faire défiler la page et lire en quelque sorte ce qu'ils bloquent. Savez-vous que cette boue est imprimée sur chaque page? Et imprimé en haut du texte? Et que vous ne pouvez pas gratter le papier, bien que ce soit une chasse, parce que cette boue bloque une partie du contenu qui ne peut être lu en aucune façon? Jusqu'à présent, je dois casser les styles ou supprimer certains menus séparés via l'inspecteur / ublock d'élément, seulement après cela, je peux «imprimer» la page. C'est un peu ennuyeux. Mais s'il y avait de simples éléments contrôlables, cela ne se produirait même pas!
Mais à l'intérieur du moteur de navigation, vous pouvez détecter lorsqu'un élément chevauche des informations textuelles et ... Eh bien, par exemple, supprimez-le quelque part sur le côté. Ou même casser des styles, les déclarant dangereux. Beaucoup d'options. Vous pouvez présenter la page sous forme de couches et donner à l'utilisateur quelques boutons pour «couper» les couches supérieures ou les renvoyer, comme cela a été fait dans certains jouets ou éditeurs en trois dimensions - je veux cette fonction depuis des années!
C'est drôle, mais une fois qu'IE a refusé de rendre la balise clignotante, mais cela a permis à JS de déplacer la fenêtre du navigateur et de faire des popups non fermants. Aujourd'hui, même afficher du texte dans la barre d'état est déjà difficile, il est plus facile de l'émuler. Maintenant, je propose de faire quelque chose avec des blocs qui se chevauchent, il est possible de rompre cette fonction. Et vous devez interrompre de plus en plus de fonctionnalités afin qu'elles ne puissent pas être utilisées au détriment. Oui, pour cela, vous pouvez écrire votre navigateur, bien que sans respecter les normes, mais c'est pratique pour lire du texte, et en plus, programmer moins.
Instantané de page
Il arrive que lorsque vous ouvrez une page simple avec du texte, vous l'oubliez parfois et la laissez pendre dans les onglets, "pour plus tard", "pour ne pas oublier". En règle générale, il n'y a rien de spécial là-bas. Par exemple, ils disent comment faire pousser des fraises dans le pays et rien du tout qui laisse présager des problèmes.
Et étant arrivé à l'ordinateur après quelques heures, vous remarquez que le CURSEUR DE SOURIS bouge à peine, TOUT dans SWAP est impossible de travailler sur l'ordinateur, avec horreur vous ouvrez la liste des processus et maudit (si vous pouvez attendre que le processus soit dessiné). Et ici, l'onglet se ferme juste avec ce site innocent.
Pour éviter cela, j'ai écrit un plug-in pour Firefox qui, 5 secondes après le chargement de la page (événement onload), a remplacé setInterval / setTimeout / requestAnimationFrame par des appels vides qui n'ont rien fait, mais qui ont déconnecté les appels existants. En gros, j'étais content. Certes, toutes sortes d'éléments interactifs, tels que les spoilers dépliants, ont également cessé de fonctionner, car il n'y avait plus de minuteurs, et l'ouverture du spoiler a lancé un minuteur pour l'animation. Est-ce un gros prix? J'ai dû abandonner mon plugin, car je ne pouvais pas retourner de gestionnaires pour un événement, mais si nous écrivons notre navigateur, pourquoi pas?
Implémentation alternative: après 10 secondes à partir de l'événement onload, nous arrêtons l'intégralité du JS, déchargeons le DOM et ne laissons que les structures en mémoire nécessaires au rendu des rectangles avec du texte, des tableaux et des images. Voilà, laissez l'onglet d'arrière-plan être quelque chose comme une image avec du texte, rien de plus. Une autre alternative: nous rendons la mise en page entière dans un processus séparé, et nous ne chargeons les coordonnées du texte et des images qu'après le rendu, comme c'était le cas dans Opera Mini, notre navigateur sera donc un peu plus sûr.
La chose la plus intéressante est qu'il existe déjà quelque chose de similaire dans l'Opéra moderne, mais il ne s'allume que lors du passage à l'alimentation par batterie. Je veux toujours avoir cette option pour les sites, en particulier pour les sites que je visite pour la première fois. En général, dans l'intestin de tous les navigateurs modernes, il existe de nombreuses fonctions utiles, mais elles sont codées en dur et ne peuvent pas être configurées par l'utilisateur, c'est pourquoi les navigateurs perdent pratiquement un énorme potentiel.
Mise en cache du contenu localement
Je raconte l'idée d'un million de dollars: charger la page en 0 ms. Non, même si le site est complètement dans notre cache, il ne s'ouvrira pas tant que nous n'aurons pas envoyé de demande, attendu le temps d'aller-retour, analysé la réponse, puis fait de même avec tous les scripts et styles restants. Et qu'est-ce qui vous empêche de l'ouvrir IMMÉDIATEMENT à partir du cache et de valider le contenu en arrière-plan, d'envoyer immédiatement des demandes à TOUTES les ressources en arrière-plan, tout en utilisant une double mise en mémoire tampon en arrière-plan, pour mettre à jour les données en cas de changements, en redessinant simplement des images et des blocs de texte? Dites ce qui était déjà dans IE et s'appelait "Travailler hors ligne"? Oui, IE a encore beaucoup de fonctions intéressantes et intéressantes, mais premièrement, cette fonction n'a pas toujours fonctionné, et deuxièmement, nous ne pourrons pas actualiser la page, et dans mon cas, la page sera redessinée automatiquement lors de sa validation.
Malheureusement, sur le Web moderne, la mise en cache ne fonctionne pas seulement mal, mais ne fonctionne pas du tout. Mais qu'est-ce qui empêche les pages forcées d'être enregistrées sur le disque? Cela permettrait non seulement d'ouvrir le site en cas de décès, d'enregistrer du contenu utile, mais aussi de surveiller, par exemple, la dynamique des changements de prix des biens ou de faire comprendre aux interlocuteurs qu'ils ont changé de poste. Bien sûr, vous pouvez enregistrer les pages sur le disque manuellement ... Mais en règle générale, vous ne vous en souvenez que lorsque vous devez revenir à une ancienne version, mais il n'y en a pas et il y a peu d'espoir pour une archive Web. Parfois, vous pouvez récupérer du contenu dans les moteurs de recherche, mais cela ne fonctionne pas toujours, surtout si vous ne l'avez pas fait tout de suite. Cela serait particulièrement utile dans les cas où le contenu est facilement divisé en éléments gérés distincts, mais plus à ce sujet plus tard.
Bien sûr, la mise en cache doit prendre la forme de différences incrémentielles (sinon il n'y aura pas assez d'espace pour tout), avec analyse intellectuelle des informations non affichées (il n'est pas nécessaire de stocker le code changeant des compteurs), avec mise en évidence des modifications, avec le choix des anciennes versions directement dans la barre d'adresse. Vous pouvez stocker des pages déjà analysées sous forme d'un ensemble de rectangles et de leurs coordonnées à l'écran, de cette façon, vous pouvez accélérer le rendu, et les images peuvent être réduites et stockées au format h265, ce qui est bien mieux que les images jpeg - nous économisons de l'espace. Et si nous avons déjà consacré autant d'efforts au cache forcé et à son ennoblissement, alors pourquoi ne pas le partager avec quelqu'un d'autre? L'interface utilisateur est la chose principale. La fonctionnalité devrait non seulement être, mais elle devrait être pratique à utiliser: ouvrir différentes versions de la page, supprimer ou enregistrer des versions de pages, les annoncer comme cache public, faire une sélection de pages et décharger les versions locales du site (les pages visitées), faire quelque chose comme mht / pdf avec des liens de travail afin qu'ils puissent être ouverts sur d'autres appareils, et non seulement ils se sont installés quelque part dans les référentiels internes du navigateur, comme cela se produit dans certains navigateurs mobiles.
Pour accélérer le chargement des pages et vous protéger contre les injections de code inattendues, divers scripts, tels que jquery et similaires, stockés sur différents CDN, peuvent être chargés directement à partir du disque local, comme le fait l'extension Decentraleyes. Le téléchargement des polices et des packs d'icônes sera instantané. En savoir plus sur ce qui existe déjà:
addons.mozilla.org/en-US/firefox/addon/decentraleyes . Bien sûr, il serait bien de faire des injections de votre code, par analogie avec browser.js (seulement pas avec les mains des auteurs) ou Grease Monkey (seulement sans chevaux de Troie), afin que vous puissiez changer / corriger le code des sites. Non, pas des béquilles sous forme de plugin, mais un support natif, qui ne ralentira pas, comme c'était le cas à l'Opera. Mais hélas, il n'y a maintenant plus d'outils pratiques pour patcher le code du site. Richard Stallman appelle ces sites "tivoizatsii", mais cela sera écrit dans la section sur les signatures de code.
Nous ajoutons ici un hypothétique sitemap.xml, qui détermine l'affinité des articles, des pages pour une mise en cache proactive, un lien vers un tracker pour l'échange de contenu p2p ... Et nous obtenons un site auto-répliquant qui peut être enregistré et utilisé localement, qui résistera à toute charge et dont le contenu ne mourra pas jamais. Cependant, nous en parlerons, ainsi que des sites distribués.
Signature du code
Beaucoup d'entre nous ne le pensent pas, mais différentes personnes peuvent exécuter du code dans le navigateur, écrit sous diverses licences, y compris non libres. Et pas le fait que l'utilisateur accepte ces licences. C'est comme avoir des relations sexuelles sans consentement préalable. En principe, dans la plupart des cas, rien de mauvais ne se produira, mais il peut y avoir des nuances. Richard Stallman a écrit un excellent article «Javascript Trap», sur la base duquel l'extension LibreJS a été écrite:
en.wikipedia.org/wiki/GNU_LibreJS - c'est ce qui devrait être le point de départ pour interpréter Javascript dans notre navigateur!
Si l'indication de la licence faisait partie de la norme, la vie serait un peu plus facile, mais ce n'est pas le cas. Si les auteurs du code l'ont signé avec leur clé publique, je pourrais au moins faire confiance à divers auteurs, mais il n'y en a pas non plus. Il ne reste plus qu'à hacher les scripts, y compris les plus petits cousus dans la page et demander à l'utilisateur de "permettre cela?" pour exécuter chacun d'eux, en maintenant une base de données de scripts autorisés ou interdits. Quelque chose comme un antivirus. Recherchez également «virus» par signatures, mais au lieu d'un analyseur heuristique - indiquant une licence et des questions à l'utilisateur. Sur la base de ces hachages, vous pouvez non seulement vous protéger contre le code malveillant, mais également créer un système de gestion des versions. Créez une infrastructure où seul le code de confiance sera exécuté! Après tout, êtes-vous fatigué de combattre des scripts qui retournent du texte et vous demandent de désactiver Adblock? Je le désactiverais, mais je n'ai pas Adblock, ni la confiance que demain ils ne me demanderont pas de faire un don ou de souscrire à une arnaque.
Si vous ne connaissez pas le travail remarquable de Richard Stallman, je vous recommande de lire:
www.gnu.org/philosophy/javascript-trap.ru.html (en russe).
Évaluation / anti-évaluation du site Web
Certains navigateurs, comme Opera, ont essayé pour une raison quelconque de réparer chaque site avec leurs mains, en créant des correctifs en injectant du code personnalisé.
Et une fois qu'ils en ont assez, nous connaissons tous le résultat. Bien qu'ils soient fiers à juste titre de leurs réalisations, qui ont été confirmées dans divers puzomerki, effectuant des tests de conformité à la norme.Mais on pourrait aller dans l'autre sens: au lieu de patcher quelque chose, d'écrire à quelqu'un un e-mail, d'utiliser des connexions personnelles et tout cela, on pourrait afficher le texte du patch directement en haut de la page avec les mots «l'auteur de ce site n'adhère pas à la norme, ce qui suit le code pourrait réparer ce site. " Défi Jerked uniquement pour IE? Pas d'émulation, au lieu d'un gros pop-up rouge sur la pertinence de l'auteur (bien sûr, sans bloquer le contenu). De nombreux utilisateurs l'ignoreront bien sûr, mais quelqu'un peut poser la question aux auteurs du site: "Pourquoi y a-t-il tant de rouge ici?" Et les propriétaires du site diront comment ils ont économisé de l'argent sur les programmeurs. Ou dites au client qu'il serait nécessaire de mettre "Google Khroma normal", à cause de quoi le client est plus susceptible de les quitter. Si un tel site affiche quelque chose comme "location.href = 'http://google.com/',revenez vers nous »- c'est encore mieux, ne plaisante pas avec de telles personnes.Vous pouvez aller plus loin: l'image sur la page est affichée en 100x100, mais en réalité 500x500? Pop-up rouge avec un message indiquant que l'auteur n'est pas en mesure de redimensionner les photos. Une image avec des graphismes photoréalistes rétrécie en PNG? Pop-up rouge indiquant que l'auteur ne comprend pas les formats de fichier. La page n'a pas de lien vers la page principale? Une popup rouge avec un message indiquant que l'auteur du site n'a pas effectué une navigation normale.Bien sûr, les popups rouges ne peuvent pas toujours être affichés. Par exemple, si une image PNG peut être mieux optimisée via optipng, vous pouvez afficher juste un petit avertissement rouge, comme le déduisent leurs bloqueurs de publicités. Divers optimiseurs CDN font déjà quelque chose de similaire, qui compressent les images et réduisent le code, et essaient même de filtrer les injections SQL à l'entrée. Mais toute cette joie ne sera que si l'auteur a payé de l'argent et connecté les services correspondants, et que devrait faire un simple utilisateur? Et un simple utilisateur peut simplement refuser d'utiliser un site de mauvaise qualité, et son navigateur devrait l'aider à cet égard.Déjà, le rapport de blocage des publicités, qui affiche des chiffres numériques, peut être considéré comme une sorte de site anti-classement. Plus il y a d'anti-rating, pire le site et l'auteur devraient faire quelque chose. Pour certaines valeurs, vous pouvez simplement afficher des avertissements selon lesquels la visite de ce site peut être indésirable. De plus, je pense que le navigateur devrait partager ses découvertes avec la communauté. Vous pouvez créer une note globale pour chaque site, en vous accrochant aux chiffres convoités de chaque lien, afin de ne pas aller accidentellement quelque part où l'utilisateur attend une «mauvaise expérience». Bien sûr, tout ne peut pas être automatisé. Par conséquent, vous pouvez créer plusieurs évaluations, dont certaines seront dirigées par des personnes vivantes, en vérifiant manuellement le code, en vérifiant leurs licences et la qualité du code, la qualité du site dans son ensemble. Bien sûr, le mécanisme doit être décentralisé et non contrôlé par des individus spécifiques.Laissez l'utilisateur décider quel abonnement sera souscrit.Paramètres de site individuels
Chaque site ou groupe de sites doit avoir ses propres paramètres individuels, similaires à la façon dont il pourrait être configuré dans l'ancien Opera (jusqu'à 12 versions incluses). Seul ce mécanisme peut être amélioré.Tout d'abord, identifiez les sites non seulement par domaine ou sous-domaine, mais également par expression régulière dans le domaine. Ou par l'adresse IP reçue de ce domaine. Par exemple, je ne veux pas exécuter de scripts sur des sites / ressources de Yandex (voir les raisons ci-dessous), je pourrais trouver des listes de blocs d'adresses IP appartenant à Yandex et interrompre doucement l'exécution de code non fiable. C'est simple et facile. Mais pour le moment, je suis obligé de me limiter à interdire des domaines individuels (je ne les connais pas tous!), Entrer toutes les plages d'adresses dans un pare-feu, ce qui est extrêmement gênant, ou élever mon serveur DNS avec les adresses du masque * yandex *, que je faire pour le moment.Deuxièmement, afin de ne pas produire une entité, vous pouvez créer des profils de base, tels que "site de confiance", "site régulier", "mauvais site", "pour les sites de Vasyan", "pour Aliexpress" et attribuer vos paramètres à tel ou tel site . Et selon le profil, son User-Agent sera envoyé, la séquence et le contenu des en-têtes, la prise en charge ou le chargement non pris en charge des styles, des polices, des scripts et tout ce qui peut être configuré. Même pour déterminer s'il est possible d'intercepter le clic droit de la souris, avec quelle précision pour démarrer les minuteries ou s'il faut jouer des animations et des sons (pour une raison inconnue, une demande de MIDI apparaît sur AliExpress). Vous pouvez également fournir des paramètres qui changent de manière aléatoire, tels que des valeurs aléatoires de l'agent utilisateur à partir d'une grande liste ou d'un proxy arbitraire pour un site particulier (plus d'informations à ce sujet plus loin).Copiez et collez
Il semblerait que quelle pourrait être la fonction la plus élémentaire des programmes qui affichent du texte? Travaillez avec la sélection / copie / collage de texte bien sûr!Hélas, même avec une simple sélection, les problèmes commencent déjà. Avez-vous essayé de mettre en évidence le lien? Dans un navigateur, dans le courrier, dans la messagerie instantanée? Et comment c'est? Quelque part, le lien commence à glisser, quelque part où vous cliquez dessus, même si vous n'avez pas relâché le bouton, et quelque part, vous devez viser l'écart millimétrique pour pouvoir le sélectionner. La sélection des photos est une loterie distincte, parfois cela ne peut pas être fait du tout, sauf en appuyant sur la combinaison de hackers secrets CTRL + A. Un pas à droite et à gauche - et nous avons sélectionné toute la page, et non le paragraphe que nous visions.Ou le texte peut ne pas ressortir du tout, créant l'illusion d'un bouton de souris cassé. Même si nous visions et pouvions sélectionner le texte, ce n'est pas un fait que lorsque nous cliquons avec le bouton droit, nous n'obtiendrons pas un avertissement sympa comme "Le texte de cette page est coolly protected". Ou rien n'apparaîtra du tout, car les navigateurs ont appris à interrompre automatiquement ces scripts. Ou la demande d'envoyer un rapport sur une faute de frappe trouvée sur la page ne sortira pas. En lisant un texte, je le sélectionne souvent avec une souris pour en faciliter la perception, et une telle boue me rend incroyablement furieux.L'insert est encore pire. Le formatage sera-t-il enregistré ou non? Parfois, cela dépend si vous utilisez un raccourci clavier ou utilisez une «roue» - comportement différent, pour une action apparemment unique. Y aura-t-il des lacunes dans ce qui est inséré dans les applications tierces s'il n'y avait pas d'espaces entre les blocs? Et parfois, vous ne vous débarrasserez pas de la mise en forme: vous collez le texte copié dans la page, par exemple, dans la lettre tapée, et le paragraphe tapé devient soudainement en gras et / ou se transforme en citation.Dernier cri de mode: remplacez le contenu du presse-papiers. Vous avez copié le texte sur les chats, l'a collé à contrecœur dans le chat et ... Ils ont ratissé l'interdiction, car avec le texte souhaité, une publicité pour la ressource a été insérée, d'où provenait la copie. Bien sûr, vous devez être prudent, regarder quoi et où vous envoyez ... Mais d'un autre côté, pourquoi mes outils de visualisation de texte se permettent-ils de se comporter de cette façon?Stockage distribué
La mise en cache locale du contenu dont nous avons parlé plus tôt n'est qu'une partie des besoins d'un utilisateur Web moderne. La deuxième partie importante du problème est la mise en cache du contenu sur le serveur, sur le chemin vers le client sur différents CDN et similaires. En fait, les petits sites peuvent être confrontés au fait qu'il faut trop de trafic pour fournir des fichiers essentiellement statiques. Partout et encore. Et ils n'ont pratiquement pas d'autre choix que d'alimenter le CloudFlare ricanant pour qu'il fournisse son cache distribué.CloudFlare lui-même possède une technologie RailGun intéressante: www.cloudflare.com/website-optimization/railgun- C'est une béquille cool qui vous permet de mettre en cache non-cache, à l'aide de laquelle non seulement ils mettent en cache les anciennes versions de pages, mais aussi font des différences avec eux et envoient la différence déjà reconstruite à partir de leurs serveurs. Ainsi, il s'avère que vous pouvez mettre à jour la page avec seulement 1 paquet de données de 400 octets (le numéro est tiré de la description), et le serveur d'origine peut héberger même sur le téléphone (en fait, ce n'est pas le cas). Mais pour une telle chose, vous devez payer, à partir de 200 $ par mois, ce qui est très substantiel pour les petits sites.Oh, et s'il était possible de diviser le contenu en petits éléments gérables ... Mais oui, plus à ce sujet plus tard. Bien qu'il existe des béquilles comme diff et cloudflare avec son Railgun.Mais le système de fichiers IPFS divisé existe déjà. Et il y a ZeroNet, qui en ce moment, prêt à l'emploi, vous permet d'héberger des sites Web de manière distribuée. Vous pouvez essayer de télécharger le client et regarder ce réseau inhabituel, qui n'a pas besoin de serveurs!Cependant, il n'y a rien de nouveau ici. Il y a environ 15 ans, les sites Web populaires avaient leur propre client de bureau (et parfois plus d'un) et une sorte de distribution torrent dans le kit pour cela. Et aujourd'hui, il existe sous une forme ou une autre, par exemple, l'application WikiTaxi, qui vous permet de garder Wikipédia dans votre poche. Et je me souviens aussi d'une chose comme AportExpress, à l'intérieur de laquelle il y avait un moteur de modèle à part entière et des modèles Aport natifs du serveur, qui collectaient des pages sur le client.Mise en réseau améliorée
Pouvez-vous imaginer que parfois les gens accèdent au réseau via différents modems GSM, où la vitesse déjà faible est coupée par les mauvaises conditions de réception du signal / les mauvaises conditions du contrat? Et il y a des sites comme imgur.com/a/XJmb7 où il y a de très belles choses, mais le poids de la page elle-même, y compris tous les graphiques, dépasse les dizaines de mégaoctets. Le seul problème est que ces pages ne peuvent pas être consultées avec une telle connexion.Aujourd'hui, le navigateur essaie de charger toutes les images en même temps, ce qui ralentit le chargement de chacune d'entre elles (pour cela, elles font encore un tas de sous-domaines pour contourner les limites sur le nombre de connexions). Après un certain temps, un délai d'attente se produit et le serveur ferme simplement la connexion, nous laissant avec des images cassées, qui sont bonnes, voire pas du tout ouvertes. Si vous appuyez sur F5, pendant un instant, il y aura un dessin (annulation du téléchargement et affichage de ce qui a été chargé), puis le téléchargement reprendra depuis le début, sans reprendre les images individuelles. Et vous avez souvent remarqué que le navigateur «télécharge» la page ou le fichier d'abord à une vitesse de 50 Ko / s, puis à 20 Ko / s, puis à 3 Ko / s? Cela signifie que la vitesse de téléchargement réelle est devenue pour une raison quelconque égale à 0 octet / s, et que la déconnexion et le redémarrage se heurtent à de grandes difficultés,même si le téléchargement du fichier est techniquement possible.Mais le serveur web peut générer des fichiers torrent pour la statique et les distribuer en mode automatique, ce qui permettra à la fois de télécharger des fichiers et de supprimer la charge du canal réseau! À la base, un fichier torrent n'est qu'une liste de sommes de contrôle qui vous permettent de télécharger un fichier à partir d'un emplacement arbitraire et de vérifier l'exactitude du téléchargement. Ainsi, même des images incomplètes peuvent être facilement dégonflées, même avec la 5e tentative, pour résoudre avec précision le problème de la gestion des versions et de la validation du cache.Et puisque nous donnons au client des métadonnées sur les fichiers, nous pouvons concevoir la page entière comme «une grande distribution» sous la forme d'un paquet de données, à l'intérieur duquel des informations sur la page, ainsi que des fichiers image, des styles, des pages liées et autres références (y compris d'autres "distributions"), une sorte de petit sitemap binaire. Cela vous permettra de mieux mettre en cache / pré-mettre en cache les sites, de charger toutes les ressources plus rapidement, sans attendre le chargement complet de la page ou des scripts, et même d'optimiser les sites pour les personnes handicapées en leur offrant une navigation avancée dans les pages. Ou ne téléchargez aucun élément à la fois, par exemple, des icônes Apple sur le demi-écran ou de nombreuses vidéos.Malheureusement, les développeurs modernes essaient de traiter ces problèmes à leur manière, sans fournir de paramètres et implémenter tout cela de leurs propres mains, c'est-à-dire "Comment ça se passe." Par exemple, le téléchargement de photos / vidéos via un tas de JS, de nombreux domaines et le traitement du défilement des pages, c'est pourquoi il n'est plus possible de faire défiler rapidement la page jusqu'à la «dixième page», ce qui me rend très furieux. Heureusement, certains grands fournisseurs tels que Xiaomi ont commencé à lutter contre cela, demandant à chaque fois: «Voulez-vous lire la vidéo? Des frais supplémentaires peuvent être facturés pour cela! », Mais jusqu'à présent, il est impossible de mettre en place une interdiction automatique de telles disgrâces, et il existe encore de nombreuses façons de contourner le développeur.Si nous avons déjà abordé des sites sans fin avec un défilement sans fin, nous aimerions noter: rien n'empêche l'utilisateur d'afficher le squelette vide de l'ensemble du flux géant afin qu'il puisse facilement le parcourir et charger le contenu de manière dynamique. Mais personne ne le fait.Téléchargement de sites
Disons que j'ai trouvé un site avec des manuels de culture de fraises. J'ai admiré, j'ai été enthousiasmé par l'idée, je suis allé au chalet et ... Et après avoir rencontré des problèmes, j'ai réalisé que je devais convertir chaque page au format PDF, puis seulement aller au chalet. Pourquoi en pdf? Oui, parce que les pages modernes ne veulent même pas être enregistrées correctement en passant, et ce qui reste à afficher lorsque le HTML local est ouvert et où il bourre Cookie ne peut être deviné.
Mais autrefois, je pouvais prendre Teleport Pro et pomper tout le site avec des fraises, le verser sur mon téléphone et aller tranquillement au chalet! Toutes les images seront pompées, tous les liens seront liés, presque tout fonctionnera. Il y avait même des sites avec des sites déjà téléchargés - une chose indispensable à apprendre pendant ces années, ainsi que des moteurs de recherche sur JS qui fonctionnaient directement dans le navigateur!
Mais que se passera-t-il aujourd'hui si j'essaye de le faire? J'attends la découverte que dans les sites Web modernes, les pages sont dynamiques, chaque page a mille URL, et je télécharge facilement trois pages 10 000 fois, les relie soigneusement, et quand je navigue vers la page souhaitée, je ne l'obtiendrai même pas si elle est téléchargée (par le chemin de 50 liens, que je devrai suivre exactement comme le rocking chair).
Et si tu veux vraiment? Dans ce cas, nous prenons et écrivons un analyseur de site aujourd'hui, sélectionnons le contenu (par des habitués ou xpath), nous le relions d'une manière ou d'une autre à l'aide de scripts faits maison, nous attachons un index à partir de merde et de bâtons, peut-être même un simple moteur de recherche. Tout cela prend 1 jour, jusqu'à ce que vous vous ennuyiez. Vous pouvez simplement enregistrer le texte dans Word et jurer sur le fait que tout est inséré dans Impact rouge et que le balisage va à un point tel qu'il est impossible de le regarder. Vous pouvez allumer l'enregistreur vidéo et faire défiler les pages - une option moins coûteuse dans le temps, même si un tel enregistrement pèsera beaucoup, mais à notre époque, il est peu préoccupant.
À ce stade, je devrais écrire que dans un navigateur idéal, j'ai besoin de la fonction de pompage de sites, afin que plus tard, je puisse facilement transférer du contenu vers un téléphone ou tout autre appareil * autonome *. Mais compte tenu de ce qui précède, cela est hélas impossible. Mais si notre contenu était divisé en petits éléments gérables ... Mais hélas. Par conséquent, un navigateur moderne, en plus de tout ce qui précède, devrait être capable non seulement d'analyser ces mêmes éléments, mais aussi de les stocker dans une base de données locale, une version et être une sorte de petit CMS.
Et ne pensez pas que les sites modernes, en principe, ne peuvent pas être dégonflés. Au contraire, la statique revient à la mode, il existe même des projets intéressants et populaires comme
github.com/jekyll/jekyll pour générer de la statique. Alors pourquoi ne pas distribuer la "source" du site?
Avertissement: Teleport Pro n'est utilisé ici que comme le logiciel le plus connu pour pomper des sites, ce n'est jamais une publicité ou de la nostalgie, personnellement je ne l'aimais pas à cause d'un tas de fichiers temporaires et de l'impossibilité d'analyser correctement javascript. Mon choix s'est porté sur d'autres rockers, moins connus, comme le webzip, qui, bien que nécessitant un tas de ressources, a inséré des publicités dans les pages, mais a pompé le contenu correctement et complètement.
Contenu multimédia
Comme de petits éléments gérés qui se transforment en un monolithe incontrôlable, les auteurs de sites créent des outils primitifs pour afficher le contenu multimédia. Autrement dit, chaque premier site essaie de me montrer une vidéo via son lecteur Web unique. Unique là, bien sûr, logo et pépins.
Non, il était une fois je me vantais aussi de pouvoir écrire un lecteur web sympa sur un flash, et je le ferais en seulement 20 lignes! Je suis cool, je peux tout faire! Avec l'âge, j'ai commencé à poser des questions:
1. Comment tordre la luminosité / le contraste à ce sujet? Et la normalisation dynamique?
2. Comment passer en plein écran? Et s'il n'y a pas de bouton, parce qu'ils ont oublié de le dessiner?
3. Comment accélérer une conférence ennuyeuse de 3 heures?
4. Comment tordre un égaliseur? Les conférenciers sont à peine audibles, même si vous dévissez les haut-parleurs
5. Comment pourrais-je couper cette pièce et l'envoyer à un ami?
6. Comment pourrais-je revenir en arrière rapidement, pendant quelques secondes, sans viser la souris sur une petite bande?
7. Comment faire sortir plus de 15 fps?
Certains fournisseurs tentent déjà de résoudre ce problème. Le problème est sous la forme de produits artisanaux primitifs avec des fonctionnalités de base. Par exemple, dans l'Opéra, vous pouvez «décoller» le lecteur de la page et le gérer séparément. Il y a youtube-dl, qui vous permet non seulement de télécharger des vidéos à partir d'un tas de services, mais également d'obtenir un lien afin que vous puissiez le mettre dans un lecteur normal, au moins dans VLC. Il y a aussi StreamLink et MPV, essayez-le, c'est sûr que vous l'aimerez plus que les joueurs réguliers.
Mais nous pouvons aller plus loin en appliquant tous les principes ci-dessus au multimédia. Si quelque chose veut perdre, nous demandons à l'utilisateur, puis le téléchargeons, le mettons en cache localement, le décodons et l'afficheons - comme dans tout autre navigateur. Mais puisque nous comprenons que le navigateur n'est pas une application multimédia et ne peut pas satisfaire toutes les demandes, nous pouvons afficher un bouton à proximité qui lancera un lecteur normal avec le contenu affiché. Faisons confiance aux professionnels et aux fans qui ont passé de nombreuses heures de leur vie là-dessus. Les gens qui vivent de la musique ou de la vidéo et qui ne sont pas obligés d'attacher un lecteur au site pour 20 dollars par heure.
Pour que la connexion à la source vidéo ne soit pas interrompue et que la vidéo ne soit pas téléchargée à nouveau, nous pouvons ouvrir un serveur proxy local, comme le font les clients torrent, avec le reconditionnement du flux vidéo à la volée, que nous utilisons pour distribuer la vidéo à une application externe, et lorsque la demande arrive. - une partie du cache, et une partie sera alimentée en temps réel, en fonction des demandes de l'application et des capacités du site. De même, toute vidéo / audio peut être facilement enregistrée sous forme de fichier, même s'il s'agissait à l'origine d'une diffusion en direct ou que les sources et fichiers multimédias de scripts générés de manière dynamique n'existaient même pas. Et vous n'avez pas besoin de chercher des liens directs quelque part dans le ventre des pages, de combattre les redirections ou d'inclure l'artillerie lourde sous forme d'enregistrement vidéo à partir de l'écran - le navigateur devrait être pour l'utilisateur, et l'utilisateur réussira, personne ne le dérangera. La chose la plus difficile ici est, peut-être, une injection dans le processus Flash. Mais son cycle de vie se termine, car trop souvent il ne doit pas être mis à jour.
Filtrage du contenu inapproprié
Si les mots sur le filtrage du contenu indésirable ne viennent généralement à l'esprit que de la publicité pornographique ou intrusive, mais vous avez rencontré un problème sur presque n'importe quel site quand il serait préférable de ne pas voir tel ou tel contenu. Rappelez-vous comment vous avez parcouru différents sites, parcourant des kilomètres de résultats de recherche aux résultats similaires. Ou pas du même type, mais vous avez essayé de trouver quelque chose de différent dans l'ensemble de données?
Par exemple, sur un site avec travail / freelance, vous pouvez souvent voir que quelqu'un a besoin d'écrire un essai, mais vous ne faites pas d'essais, tout comme vous n'écrivez pas en JS ou PHP, mais vous prenez et jetez souvent tous ces projets hors des résultats de recherche c'est tout simplement impossible, ainsi que de compter sur des catégories - personne ne les indique normalement. Ou regardez-vous un fil d'actualité, et après le crash d'un autre avion, vous ne savez pas où aller des informations sur l'avion, surtout s'il y avait des parents là-bas et ça vous fait mal? Certaines personnes ont obtenu des expressions de tendances à la mode et célèbres, ou même simplement de tendances, comme les filateurs ou Pokémon, à la suite de quoi même des plug-ins de navigateur spéciaux semblaient tout simplement ne pas voir cela. Et qui ne voudrait pas ajouter des «amis» à la liste noire afin de ne plus jamais revoir ses publications? Et ne voyez toujours pas les nouvelles du rhinocéros qui vomit avec leur publicité impudente, couverte par des tests de programmes open source et une aide gratuite à la communauté ...
Ce qui est amusant, c'est que presque tous les clients de messagerie disposent de filtres riches pour trier / supprimer automatiquement le courrier indésirable, mais presque aucun site Web n'a une telle fonctionnalité. Si notre contenu devait être découpé en petits éléments gérables, nous pourrions filtrer / mettre en évidence afin de ne pas perdre notre temps sur quelque chose qui ne nous intéresse clairement pas. Et je n'aurais pas à écrire d'analyseurs pour certains sites qui ont supprimé 90% du contenu et m'ont fourni une compression sous la forme des 10% restants dans le format dont j'avais besoin. Et pas 10 éléments par page. Au moins
1000 pièces . Il serait possible d'utiliser des lecteurs RSS, mais RSS / Atom est loin de partout, surtout il ne suffit pas dans les résultats de recherche.
Petits objets gérables
Quels sont donc ces petits éléments gérables du site mentionnés plus haut? Pour le rendre plus facile à comprendre, imaginons un fichier json statique avec quelques informations. Ou XML, ou la base de données SQLite, ou un fichier XLS, ou un moteur de texte CSV, ou quelque chose qui n'est même pas encore né, mais qui est nécessairement binaire, compressé et nanotechnologique ... Et à l'intérieur il y a de petites informations. Petit car ce sont des unités logiques indivisibles. Cela peut être un lien dans le panneau de navigation, un extrait de la description du produit, le produit lui-même avec toutes les propriétés, un commentaire utilisateur ou même un article entier. Il peut également s'agir de widgets de site distincts: champ de recherche, panier de commandes, champ de connexion / razlogin.
Géré parce que, contrairement à un monolithe à blindage solide, nous pouvons gérer de telles données: identifier les bonnes, les trier, les sortir dans l'ordre direct et inverse, les filtrer ou les décorer avec nos données, créant des mashups qui ont fait beaucoup de bruit en temps voulu. Presque chaque site possède une base de données qui gère SQL. Derrière SQL se trouvent la théorie relationnelle, l'algèbre relationnelle et de nombreuses méthodes de gestion de l'information. Et un peu plus bas, je montrerai comment les informations pourraient être gérées, et combien peu d'auteurs de sites nous donnent, le cas échéant.
Par exemple, j'essaye de trouver de nouveaux travaux sympas dans le domaine de la demoscene. Je vais sur
pouet.net , poke Prods, et puis ... D'une part, je ne veux que du travail sympa, donc je trie le travail en fonction du nombre de lois. En premier lieu, je vois mon fr-041 préféré: les débris, ainsi que d'autres œuvres que j'ai vues plus d'une fois. Mais je veux quelque chose de frais! Je veux dire à la date de sortie, ici, c'est seulement frais. Mais lequel est le meilleur? Comment combiner 2 tris? Ou au moins faire une sélection par période de temps du formulaire «pour les six derniers mois» et ensuite seulement le trier? Hélas, on ne m'a pas donné les outils pour le faire. Mais chacune des œuvres pourrait être représentée dans notre fichier JSON comme un élément du tableau des œuvres, sur la base du schéma de données, notre navigateur pourrait dessiner des contrôles indépendants des auteurs du site, où nous ferions des sélections pour notre plaisir.
Autre exemple: nous savons tous que la recherche est meilleure que Google n'existe tout simplement pas. Mais parfois, il se considère si intelligent qu'il jette des phrases entières de la requête de recherche, les traduit dans différentes langues et montre ce qu'il juge plus utile. Je n'en ai pas besoin. Où est la case à cocher «Arrête de devenir intelligent, je suis en charge ici»? Auparavant, cela consistait à organiser correctement les guillemets et les avantages, et maintenant il se trouve sur
bing.com - une recherche plus primitive est immédiatement activée, mais elle recherche exactement ce dont j'ai besoin et n'est pas intelligente, n'ignore pas mes mots clés, n'ignore pas les conditions de la demande. S'il trouve quelque chose, mais s'il ne le fait pas, il le dira honnêtement, sans essayer de trouver quelque chose de lui-même. Dans ce cas, si nous recevions de petits éléments gérables, nous pourrions facilement être en mesure de combiner les résultats de recherche des deux moteurs de recherche en un seul flux de recherche, pour cela, nous n'aurions qu'à connecter 2 du même type de tableau.
Très souvent, les résultats de recherche sur des sites individuels sont encombrés de spam ou de publicités similaires, ou simplement de descriptions tordues de quelque chose. Par exemple, un chemisier peut avoir 20 options de couleur - je devrai faire défiler complètement tout cela avec mes yeux. Et dans le meilleur des cas, je ne peux supprimer du problème que certaines catégories de produits ou afficher des annonces de quelqu'un, mais cela est extrêmement gênant, et souvent de telles fonctionnalités ne sont tout simplement pas fournies. Si nous avons de petits éléments gérables, je peux simplement filtrer le vendeur négligent, ou même sélectionner immédiatement les vêtements de la couleur souhaitée.
Retour au tri à nouveau. Comme dans la recherche de belles demoscènes, lors de la recherche de produits dans les magasins en ligne, plusieurs paramètres sont souvent intéressants, mais vous ne pouvez trier les résultats de la sélection que par un. Si possible. Cela affecte même les plus grandes salles de marché. S'ils retournaient des données brutes, ce serait très facile à manipuler. En pratique, vous devez ouvrir 50 pages et comparer manuellement les descriptions de produits, lancer des pièces et espérer que l'achat sera réussi. Il n'y a pas de stratagème frauduleux lorsqu'un peigne de 1 $ est ajouté au lot en tant qu'accessoire, mais en fait le coût minimum est de 10 $. Il existe des méthodes plus intéressantes. Lorsque j'ai acheté ma première tablette, j'ai pompé des descriptions de 15 000 produits et de colis avec des habitués à la recherche des mots clés dont j'avais besoin - c'était très lent, mais j'ai trouvé mon amour (c'était U9GT2).
Mais revenons à nos fraises. Ou plutôt, sur le site avec des manuels sur la culture des fraises.
Imaginez que l'instruction pour cultiver des fraises soit une ressource (toujours sous la forme d'un fichier json, pour plus de simplicité), qui peut être demandée séparément, à l'intérieur de laquelle se trouve un balisage sémantique (il nous indiquera à quelles pages il se réfère et le type de liens). Pas de navigation, les meilleurs conseils ou commentaires des autres utilisateurs - juste du contenu pur. Eh bien, des sommets, des commentaires et des conseils quelque part à proximité, bien sûr, il peut y en avoir aussi, mais l'essentiel est que ce n'est pas sous la forme d'un monolithe, vous pouvez identifier avec précision les types de données requis. Bien sûr, des publicités et des scripts seront certainement ajoutés ici, mais plus à ce sujet plus tard. Pour l'instant, nous pensons que nous avons du contenu pur, directement à partir de la base de données (ou même de l'éditeur de contenu). Il est facile de dégonfler, plier, indexer, sans parler de la facilité de mise en cache et de livraison de contenu. Ces éléments peuvent être utilisés pour la pré-mise en cache à la fois sur CDN et dans le navigateur, créant des packages en vrac avec du contenu pour une compression et un chargement efficaces (afin de ne pas tirer chaque bouton séparément pendant 50 octets), pour la gestion des versions et l'archivage. Ces données peuvent être tordues et tournées dans un navigateur pendant longtemps sans aucune charge sur le serveur, jouées pendant longtemps avec des sortes et des sélections différentes. Ce qui est drôle, c'est que tout cela est exactement comme cela est stocké dans les bases de données à l'intérieur du CMS de gestion. Mais tout cela passe par un «monolithiseur», qui imprime les données en HTML monolithique, ce qui est alors très difficile à travailler.
Vous pouvez créer de nombreuses fonctionnalités intéressantes avec de telles données à portée de main. Par exemple, vous pouvez analyser les publications sur les forums, les mettre en cache, puis regarder les publications supprimées.
Où sont ces petits éléments? Qu'est-ce qui est déjà là?
C'est difficile à croire, mais les tentatives de séparer le contenu de sa présentation existent depuis un certain temps. Le premier signe était RSS, qui fait un excellent travail de livraison d'extraits de code. Yandex.market nécessite le déchargement des magasins dans un format XML spécial qui contient les prix, les images, les informations sur le fabricant et même la livraison. D'autres sites ont leurs propres formats de téléchargement, par exemple, Google Merchant utilise RSS2.0 légèrement modifié, mais en général, ces formats peuvent être lus et rendus aujourd'hui.
Si vous plongez dans les rêves, c'est-à-dire toutes sortes d'opengrades et de microformats, et beaucoup a été ajouté à HTML5, mais hélas, compter sur cela est difficile aujourd'hui. D'un autre côté, de nombreux sites contiennent déjà du balisage sémantique, donc refuser de le lire est stupide.
On pourrait échanger du XML pur ou du JSON avec un tas de champs nommés et semi-standardisés. Vous pouvez même échanger les bases de données elles-mêmes au format SQLite ou y générer de petites sélections. L'essentiel est qu'il devrait y avoir des données propres, sans aucun code (plus à ce sujet plus tard).
Où trouver le bonheur?
Dans un premier temps, jusqu'à ce que les développeurs comprennent les avantages de la nouvelle façon d'interaction, nous devrons nous-mêmes obtenir notre propre bonheur. Autrement dit, je suggère d'analyser les sites et de leur arracher les entités dont nous avons besoin. Vous pouvez le faire avec xpath, des sélecteurs CSS à la mode ou de bonnes vieilles expressions régulières. Oui, pour chaque site sur Internet, vous devrez écrire votre propre analyseur. À première vue, c'est une œuvre titanesque avec un résultat inaccessible, mais est-ce le cas?
À ce jour, il existe plusieurs projets spécialisés dans l'analyse des sites. Certains, comme Octoparse, ne nécessitent presque aucune connaissance, les blocs nécessaires sont sélectionnés avec la souris. En plus du plan de "crawling", le site est également rempli de souris. Cela signifie que le seuil d'entrée pour la «programmation» sera extrêmement bas, même une femme au foyer peut faire son propre analyseur si elle le souhaite. Si l'analyseur est de mauvaise qualité ou cesse de fonctionner, le navigateur affichera simplement la page telle quelle, jusqu'à ce que quelqu'un d'autre écrive un nouvel analyseur.
Il existe également des projets plus proches qui fonctionnent aujourd'hui. Par exemple, il s'agit de la fonction Instant View dans Telegram. Les gens ont déjà écrit de nombreux analyseurs qui contournent les sites célèbres et seuls les contenus propres sont analysés. Et lorsque quelqu'un publie un lien vers un tel site dans Telegram, le précieux bouton Instant View apparaît. Si vous appuyez dessus, seul le contenu pur arrivera, sans publicité et autres déchets. Cela ne prendra que quelques kilo-octets de trafic et de mémoire à télécharger, plutôt que des mégaoctets de trafic et des gigaoctets de mémoire, comme ce serait le cas avec le navigateur.
Le téléchargement d'une si petite quantité de données se produit instantanément, d'où le nom de la fonctionnalité - Instant View. Si un analyseur tombe en panne, c'est-à-dire un outil de suivi des bogues et une communauté prête à écrire un nouvel analyseur, qui sera géré par un éditeur pratique. Donc, si quelqu'un ne peut pas croire à la possibilité d'une telle idée, jusqu'à ce qu'il le voit de ses propres yeux - bienvenue.Certes, notre tâche sera un peu plus compliquée, car en plus d'afficher le texte des articles, nous devons également afficher des flux avec des articles, naviguer dans les sections du site (articles, forum et magasin - tout cela ne doit pas être interféré dans un seul flux). Il est nécessaire non seulement d'extraire ce qui est nécessaire de la page, mais aussi de décider des tables pour l'arranger. Par exemple, j'aime vraiment lire les commentaires, et si seules les principales nouvelles ou l'article sont retirés, la valeur de la ressource deviendra moindre pour moi. Par exemple, je regardais Youtube via SkyTube et trouvais beaucoup de commentaires nouveaux et intéressants, mais en passant à NewPipe, je me suis retrouvé sans eux. Le même ensemble d'analyseurs que YouTube-DL en souffre. Et voici comment trier le contenu résultant en étagères - c'est une grande question, toutes les femmes au foyer ne seront pas en mesure de concevoir la structure de la base de données. La plus grande question estcomment naviguer sur ce contenu. Quelle est la principale et quelle est la filiale? Il y a quelques années, j'ai déjà écrit un analyseur universel avec heuristique, donc il a coupé le contenu principal, ne laissant que des commentaires, car je pensais que les commentaires étaient la chose principale.Il est encore plus difficile de comprendre quoi faire avec les données reçues, comment les afficher. Seules les méthodes existantes viennent à l'esprit ici: les modèles HTML, PHP et SQL. Et si les navigateurs sur NodeJS fonctionnent déjà, pourquoi ne pas ajouter PHP au navigateur pour l'une des fonctionnalités? Je ne suis pas fan de cette langue, mais le seuil pour y entrer est minime, et là où il ne sera pas possible de le faire avec des modèles simples, les gens pourront y programmer (ou toute autre langue, voir ci-dessous). Quelque chose comme cette génération de pages me rappelle l'ancien Aport Express - un petit programme du moteur de recherche Aport, qui était chargé d'afficher les résultats de la recherche directement sur le client, réduisant ainsi le trafic sur la numérotation utilisée à l'époque. Si quelqu'un veut s'immerger dans l'histoire, vous pouvez lire sur web.archive.org/web/20010124043000/http: //www2.aport.ru: 80 / aexpress /, et téléchargez sur web.archive.org/web/20040627182348/http : //www.romangranovsky.narod.ru: 80 / aexpress.exeBannières et trackers
Non, la publicité en elle-même ne me dérange plus: au fil des années de présence sur le réseau, j'ai développé un bandeau aveugle, qui consiste dans le fait que je ne vois tout simplement pas de blocs dans des "endroits bien en vue", ainsi que des blocs qui sont écrits dans une police non standard ou simplement en majuscules. Parfois, il s'agit du ridicule - je cherche depuis longtemps les boutons "s'inscrire", "télécharger" ou "nouveau sujet", car ils sont grands et visibles, mais je ne les remarque pas. Parfois, jusqu'à ce qu'ils m'envoient une capture d'écran avec un bouton encerclé. Et ce n'est pas une question de trafic ou de vitesse. Aujourd'hui, c'est un problème de sécurité, car tout d'abord, la bannière publicitaire est un code ** exécutable **, ce qui signifie que ce n'est pas seulement une fuite de données personnelles pour le soi-disant «ciblage» et le suivi de tout, mais en fait, ce n'est qu'un trou de sécurité,à travers lequel vous pouvez remplir un sploit ou juste un mineur. Si auparavant, il était possible de dire «n'allez pas sur les sites pornographiques et tout ira bien», maintenant «site pornographique» est intégré dans presque tous les sites, sur chaque page.Mais les trackers me font particulièrement mal, d'ailleurs, ceux qui travaillent constamment sur la page. Je peux prendre Yandex.Metrica comme exemple d'une telle boue; tout était insupportablement lent. Cela valait la peine d'interdire tous les domaines Yandex et ma vie était remplie de bonheur, car les sites ont soudainement cessé de freiner et j'ai même cessé de penser à la mise à niveau du fer. L'interdiction de domaine Yandex est la première chose que je fais lorsque je configure un système pour quelqu'un. Les gens ne perdent rien du tout, mais la vitesse de navigation augmente d'un ordre de grandeur.La solution est très simple: la possibilité de spécifier des "domaines amis" pour le site et de désactiver les requêtes pour tout le reste. Vous pouvez donc couper les publicités à l'aide de la politique de demande ou équivalent, qui, contrairement aux outils de découpe en forme d'AdBlock, fonctionnera sur presque tous les sites, ne nécessitera pas d'abonnement et vous aidera même si le site a été piraté et qu'un tas de code malveillant y est placé.J'entends des cris là-bas que la réduction de la publicité réduit le revenu des auteurs? N'oubliez pas que pendant longtemps, personne ne paie pour afficher des bannières. Il est inutile de diffuser des annonces _me_, cela ne fait que dépenser mon trafic et celui du serveur, mais cela n'apportera pas un sou aux auteurs. Mais cela ne peut que me mettre en colère. À un moment donné, j'ai écrit un ensemble d'utilitaires pour des sites particulièrement distingués.Si vous acceptez la collecte / fuite de données personnelles et que l'utilisateur est en colère en même temps, je recommanderais d'installer quelque chose comme la merveilleuse extension AdNauseam. Probablement la seule extension pour bloquer les publicités qui a été interdite par Google. L'essence de cette extension est très simple: elle clique sur chaque élément à bloquer en mode caché, c'est-à-dire sans rien montrer à l'utilisateur. Les annonceurs obtiennent leurs clics tant attendus, tout comme ils le souhaitent. Et si vous cliquez sur chaque bannière, les données personnelles divulguées seront mélangées à un tas d'ordures, car elles ne correspondront pas aux véritables préférences de l'utilisateur. Le ciblage et le suivi deviennent inutiles. Très bonne extension. Et une idée géniale.Publicité (profil cible)
Condamner? Suggérez! Oui, je condamne la pratique de la collecte de données ciblées, en particulier à l'aide de la surveillance et de mauvais trucs similaires (pour moi). Pourquoi ne pas saisir les données de ciblage directement dans le navigateur? Je vais tout dire sur moi, je n'ai pas besoin de surveillance ni de virus:Sexe: masculinÂge: 55 ansÉducation: spécial secondaireLoisirs: fisting, bdsm, transexuelle, appareils de chasteté, contrôle du souffle du masque à gazRésidence: Klyuchi (une colonie) à Ust -Kamchatsky District du Kamtchatka KraiDernière vérification en magasin: 28 roubles (miche de pain) Situationfinancière: pas d'argent, je vis de l'indemnité et dans mon jardin personnelAttitude à l'égard des produits gratuits:J'écris des critiques négatives à leur sujet, je mets CokeProfil sur les réseaux sociaux: il n'y a pas et ne sera pasCarte de crédit: il n'y a pas et ne sera pasen attente des offres que je peux utiliser, en tenant compte de mon profil.Je comprends très bien que les éditeurs doivent en quelque sorte gagner de l'argent et survivre dans nos moments difficiles en achetant un autre avion ou une villa, mais ils doivent également comprendre les utilisateurs qui sont agacés par une publicité qui leur est de toute façon inaccessible. Je comprends aussi parfaitement que toute publicité ne puisse pas être supprimée, je suis donc pour une publicité ciblée, dont le profil est facile à fournir. Et pas de bannières.Je voudrais également un mécanisme de notation des utilisateurs pour les publicités divulguées. Par exemple, j'ouvre une vidéo sur Youtube, la chaîne de mon bien-aimé Creosan, et à un moment donné, Creosan lui-même commence à parler de certains casinos là-bas. Je serais heureux de mettre en évidence la zone avec de la publicité et de publier les données sur cette zone en tant que «publicité» afin que plus tard, d'autres utilisateurs puissent facilement ignorer une telle publicité. Parfois, la publicité se trouve dans le texte des articles eux-mêmes, et les articles dans leur ensemble sont des publicités déguisées. Il est très désagréable pour moi de lire de tels articles, donc je les marquerais avec plaisir comme «publicité».Prise en charge proxy / VPN intégrée
Malheureusement, certaines personnes stupides décident pour moi si je peux utiliser tel ou tel service, et elles le font en fonction du pays dans lequel je suis né / vis. Et pas seulement les sites (un triste regard vers Google Play). Par exemple, je ne peux utiliser Spotify que si j'habite aux États-Unis, mais je peux utiliser le service Advcash si je n'habite PAS aux États-Unis. Bien sûr, si vous n’avez pas de chance à la naissance, il n’est pas nécessaire de végéter dans un pays arriéré, en théorie, vous pouvez aller dans le bon pays, mais je ne sais pas comment vivre dans 2 pays en même temps.Solution: mécanisme VPN intégré, et il doit être entièrement configuré pour chaque site séparément. Pour quelqu'un, je serai seulement allemand, pour quelqu'un américain et je ferai des achats dans le pays pour lequel des prix plus bas sont offerts.Pourquoi ne pas acheter un VPN normal et l'utiliser, pourquoi le faire glisser dans le navigateur? Ensuite, seul le navigateur peut séparer un site d'un autre, en séparant chaque onglet. Si nous acheminons tout le trafic via le VPN du système, nous devrons constamment changer, ou parfois intercepter les déconnexions et les interdictions, si nous oublions de le faire.Plugins
Parfois, du contenu coupé en tuiles apparaît. Par exemple, il peut s'agir de cartes satellites ou de photographies. En principe, il peut être sélectionné dans le navigateur aujourd'hui, mais quelle est la prochaine étape? Il n'est pas pratique de regarder des tuiles individuelles. À coller? Quoi et comment? Bien sûr, je peux écrire un fichier de force brute qui comparera les bords des carreaux et recherchera des options pour un collage transparent, mais ici, vous pouvez faire une erreur, et si le navigateur enregistre également des informations sur où et quelle tuile était par rapport aux autres tuiles, le collage sera rapide et irréprochable! Vous pouvez joindre une exportation pratique de tuiles directement depuis le cache ou la page actuelle!Et je ne veux pas inventer et entrer des identifiants / mots de passe sur chaque site, mais je voudrais plutôt spécifier une graine aléatoire, à partir de laquelle les identifiants et les mots de passe pour un site spécifique seraient générés. Par exemple, je spécifie la ligne «soMeRanDOooo0MStr11nng» et quand je vais sur example.com, ces 2 lignes concaténent et créent un UID sur la base duquel vous pouvez générer n'importe quoi, y compris les connexions / mots de passe (et encore mieux, toutes les informations personnelles restantes afin que il était possible de s'inscrire en un clic et de ne pas penser à quels autres noms il y avait sauf Sergey sans utiliser fakenamegenerator). Et la possibilité de fouiller ces mots de passe sur bugmenot. Au fait, un tel générateur est déjà dans Safari!En d'autres termes, le navigateur doit fournir un mécanisme de plugin flexible. De plus, les plugins doivent être à l'intérieur du navigateur afin que vous puissiez accrocher presque toutes les parties du navigateur, et non comme les injections JS après le chargement de pages ou de boutons dans la barre d'outils. Bien sûr, je veux écrire des plugins en C, les compromis sur la vitesse de traitement des pages sont tout simplement inacceptables.Pièces du navigateur en tant que services
Presque tous les navigateurs ont un utilitaire pour télécharger des fichiers. C'est le problème avec une interface tordue qui télécharge des fichiers dans un répertoire incompréhensible, ne sait pas comment reprendre, puis il indique également que des virus ont été détectés à l'intérieur du fichier. Mais cette chose est, et plus important encore, elle fait partie du navigateur, ce qui signifie qu'elle utilise des cookies et d'autres attributs de session. Cela signifie qu'en vous connectant à un site, nous n'aurons plus besoin de choisir des cookies pour les mettre en wget ou en curl. Le navigateur lui-même peut agir comme un tel utilitaire, prenant pleinement en charge la session en cours. Et cela signifie que nous pouvons initialement développer à la fois le sous-système réseau et une telle boucle de fortune avec une base de code unique et une mauvaise connectivité avec le code du navigateur principal, mais plus à ce sujet plus tard.Presque tous les navigateurs ont un listeur de fichiers primitif qui peut afficher le contenu des répertoires de répertoires locaux. Il le fait de travers, mais c'est souvent bien mieux que rien du tout. Mais l'ancien opéra était capable de tâtonner les fichiers entre les utilisateurs et avait même une application avec un réfrigérateur sur laquelle dessiner. Oui, les gars ont vraiment fait l'avenir. Et ils l'ont un peu dépassé.Le navigateur peut avoir un client de messagerie qui serait agréable à utiliser à partir de la ligne de commande, avec un historique détaillé. Cela permettrait d'automatiser un grand nombre de tâches, du ratissage du spam à l'envoi de rappels. Les rappels peuvent être extraits du service RSS intégré.Navigateur de pièces
L'écriture d'un navigateur entier est une tâche assez compliquée. De plus, beaucoup de choses, comme le téléchargement de fichiers, un lecteur RSS ou un client de messagerie, ne me viennent même pas à l'esprit quand ils entendent le mot «navigateur». Au minimum, ces applications peuvent être écrites séparément, peuvent se présenter sous la forme d'applications à part entière, peuvent prendre la forme de liaisons par-dessus celles existantes, ou peut-être même sous forme de solutions temporaires de quelques centaines de lignes dans un langage de script.La mise en réseau peut également être déplacée vers un démon distinct. À proximité, vous pouvez supprimer un résolveur DNS avec une liste noire de domaines intégrée et une mise à jour automatique des listes noires, un sous-système pour la mise en cache du contenu et bien d'autres choses. Même le rendu peut être repris dans un processus distinct, comme c'était le cas dans Opera Mini (et ce qui peut être fait en utilisant des sources fusionnées, car ce code ne pénètre même pas directement dans le projet, mais sera un «plug-in» tiers, la pureté de la licence est également préservée). github.com/browsh-org/browsh - ici le moteur furefox est rendu quelque part dans vpsk, et celui déjà rendu vous est envoyé sous forme de texte et de pseudo-graphiques de texte - il a l'air très cool, vous pouvez même regarder la vidéoAu début, tout cela peut être implémenté en tant que microservices indépendants, avec un développeur écrivant en java, un autre en python et le troisième en Ruby et ils n'ont pas besoin de se quereller, en choisissant une pile technologique. Après tout, tout le monde connaît la situation où quelqu'un ne peut pas imaginer un navigateur Java à cause des freins, quelqu'un a peur de Sishku par peur des vulnérabilités, et quelqu'un veut essayer Go à la mode et l'agiter? Ici, chacun pourra choisir une petite pièce pour lui-même et y répondre strictement, il suffira de se mettre d'accord sur un protocole de communication. Et si certaines pièces fonctionnent mal, à la fin, elles peuvent simplement être remplacées. Ou prenez et adaptez les solutions existantes pour une intégration plus étroite, comme cela a été fait dans le navigateur Arachne.Même le rendu peut être exécuté dans un processus distinct et ne transmettre que des informations pour l'affichage. Au début, vous pouvez simplement prendre le code existant de w3m / links / netsurf, puis ceux qui le souhaitent peuvent attacher des modes commutables de Gecko / Servo / Blink.Bien sûr, il est censé écrire un grand nombre de plugins. Les signets, y compris ceux qui sont synchronisés via les nuages ou les services de recommandation, les onglets à plusieurs niveaux avec des aperçus et la saisie automatique des formulaires basés sur les réseaux de neurones, sont tout ce que vous voulez. Peut-être que quelqu'un a à portée de main la source des téléchargements de fichiers multi-threads (ou quelqu'un a vu quelque chose comme ça sur un github), qui peut commencer à porter ce code sur une nouvelle plate-forme maintenant?Et bien sûr, ici, vous pouvez suivre l'ancien principe: laissez chaque programme faire une chose, mais faites-le bien. Le navigateur est un ensemble très complexe de programmes qui fonctionnent avec le réseau, et donc la complexité de l'ensemble du système. Peut-il donc être facile de diviser notre navigateur en un maximum de pièces, garantissant la qualité et la fiabilité de chacune d'entre elles?Plugins en tant que fonctionnalités garanties
Certains plugins peuvent être définis par défaut dans l'installation. Par exemple, des plugins pour fournir des onglets, télécharger des fichiers, un plugin pour la barre d'adresse avec saisie semi-automatique, pompons et dragons, etc., qui est déjà dans n'importe quel navigateur. Mais je propose d'aller un peu plus loin et d'inclure un peu plus dans la livraison par défaut. Bien sûr, c'est un chemin glissant qui peut nous conduire à Bloatware, mais à mon avis, vous ne devriez pas avoir peur d'expérimenter (bien sûr, pas comment Mozilla le fait, qui comprend des extensions trouées de différents programmes d'affiliation sans possibilité de déconnexion).Par exemple, vous souvenez-vous dans IE6 d'un bouton aussi obscur que Discuter? Il est apparu après l'installation de MS-office, n'a presque jamais fonctionné, car il avait besoin de SharePoint côté serveur pour son travail. Mais la chose était géniale: lorsque vous avez cliqué dessus, une barre d'outils s'est ouverte, à travers laquelle vous pouvez ajouter des commentaires à la page, il y avait encore une salle de discussion en forme d'arbre (bien que je m'en souvienne déjà très mal, mais je ne pouvais pas la rechercher sur Google), et cela a fonctionné avec n'importe quelle page. Imaginez: des commentaires sur n'importe quel site, sans modération des auteurs, où vous pouvez exprimer tout ce que vous pensez hardiment et directement en personne sur n'importe quel site. Je crois qu'un tel plugin était simplement un must dans le bundle de notre navigateur.Autre exemple: de nombreux sites ouvrent les cartes Google Maps ou Yandex sur la page des itinéraires routiers, et cela est considéré comme une bonne pratique, personne ne pose même de questions de confidentialité et ne demande pas non plus à l'utilisateur si je veux qu'une organisation tierce sache quels objets Êtes-vous intéressé par la ville? Ces éléments peuvent être coupés et remplacés par des cartes OSM ou même des cartes de référentiel local. Personne ne se soucie de télécharger le vidage OSM complet et de créer des cartes locales, un ou deux gigaoctets sur le disque aujourd'hui ne signifie presque rien.Résumé
Voici ma vision d'un navigateur parfait. Bien sûr, loin de tout ce qui a été écrit: les thèmes de la réplication, des formulaires multi-niveaux et de la protection des données utilisateurs ne sont pas abordés, il n'y a rien sur le modèle économique ou les moyens d'attirer des sponsors pour le projet. Et des sponsors sont nécessaires, car peu de gens apporteront quelque chose d'utile pour faire un tel volume de travail gratuitement. Il n'y a pas de description de la façon de se protéger des intérêts du sponsor, car en sortie, nous pouvons obtenir un autre Firefox avec des plugins de télémétrie qui informent sur la déconnexion de la télémétrie.Mais à ce stade, la chose la plus importante pour créer le navigateur parfait, ce sont les gens. Écrivez vos idées, vos pensées et si vous pouvez aider le projet avec du code ou des mises en page, n'hésitez pas à offrir votre aide. La critique des idées et pensées ci-dessus est particulièrement intéressante. Peut-être, sinon moi personnellement, alors quelqu'un qui a lu ce texte pourra écrire un bon navigateur. J'ai commencé à écrire cet article il y a un an, en réponse à d'autres sujets, j'allais organiser un financement participatif, mais l'agitation de la vie était distrayante, car je le publie tel quel, pour que d'autres personnes y réfléchissent.Ce texte est disponible sous la licence du domaine public et vous pouvez le distribuer librement n'importe où. Peut-être que de cette façon, nous (les gens en général) pourrons obtenir un navigateur qui est au moins un peu plus pratique à utiliser.