@jjlmoya/utils-developer 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +64 -0
- package/src/category/i18n/en.ts +34 -0
- package/src/category/i18n/es.ts +34 -0
- package/src/category/i18n/fr.ts +34 -0
- package/src/category/index.ts +31 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +11 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +78 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +146 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/css_specificity_logic.test.ts +39 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/aspectRatio/bibliography.astro +14 -0
- package/src/tool/aspectRatio/component.astro +468 -0
- package/src/tool/aspectRatio/i18n/en.ts +177 -0
- package/src/tool/aspectRatio/i18n/es.ts +177 -0
- package/src/tool/aspectRatio/i18n/fr.ts +177 -0
- package/src/tool/aspectRatio/index.ts +34 -0
- package/src/tool/aspectRatio/seo.astro +14 -0
- package/src/tool/aspectRatio/ui.ts +12 -0
- package/src/tool/calculadoraTiempoDatos/bibliography.astro +14 -0
- package/src/tool/calculadoraTiempoDatos/component.astro +829 -0
- package/src/tool/calculadoraTiempoDatos/i18n/en.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/es.ts +163 -0
- package/src/tool/calculadoraTiempoDatos/i18n/fr.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/index.ts +33 -0
- package/src/tool/calculadoraTiempoDatos/seo.astro +14 -0
- package/src/tool/calculadoraTiempoDatos/ui.ts +24 -0
- package/src/tool/colorConverter/bibliography.astro +14 -0
- package/src/tool/colorConverter/component.astro +504 -0
- package/src/tool/colorConverter/i18n/en.ts +126 -0
- package/src/tool/colorConverter/i18n/es.ts +126 -0
- package/src/tool/colorConverter/i18n/fr.ts +126 -0
- package/src/tool/colorConverter/index.ts +33 -0
- package/src/tool/colorConverter/seo.astro +14 -0
- package/src/tool/colorConverter/ui.ts +16 -0
- package/src/tool/conversorExcelCsvHtml/bibliography.astro +14 -0
- package/src/tool/conversorExcelCsvHtml/component.astro +595 -0
- package/src/tool/conversorExcelCsvHtml/i18n/en.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/es.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/fr.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/index.ts +33 -0
- package/src/tool/conversorExcelCsvHtml/seo.astro +14 -0
- package/src/tool/conversorExcelCsvHtml/ui.ts +14 -0
- package/src/tool/cronGenerator/bibliography.astro +14 -0
- package/src/tool/cronGenerator/component.astro +667 -0
- package/src/tool/cronGenerator/i18n/en.ts +191 -0
- package/src/tool/cronGenerator/i18n/es.ts +191 -0
- package/src/tool/cronGenerator/i18n/fr.ts +191 -0
- package/src/tool/cronGenerator/index.ts +34 -0
- package/src/tool/cronGenerator/seo.astro +14 -0
- package/src/tool/cronGenerator/ui.ts +45 -0
- package/src/tool/cssSpecificityCalculator/bibliography.astro +14 -0
- package/src/tool/cssSpecificityCalculator/component.astro +292 -0
- package/src/tool/cssSpecificityCalculator/i18n/en.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/es.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/fr.ts +168 -0
- package/src/tool/cssSpecificityCalculator/index.ts +34 -0
- package/src/tool/cssSpecificityCalculator/logic.ts +100 -0
- package/src/tool/cssSpecificityCalculator/seo.astro +14 -0
- package/src/tool/cssSpecificityCalculator/ui-controller.ts +57 -0
- package/src/tool/cssSpecificityCalculator/ui.ts +11 -0
- package/src/tool/cssToInlineConverter/bibliography.astro +14 -0
- package/src/tool/cssToInlineConverter/component.astro +308 -0
- package/src/tool/cssToInlineConverter/i18n/en.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/es.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/fr.ts +160 -0
- package/src/tool/cssToInlineConverter/index.ts +34 -0
- package/src/tool/cssToInlineConverter/seo.astro +14 -0
- package/src/tool/cssToInlineConverter/ui.ts +12 -0
- package/src/tool/duplicateCssRemover/bibliography.astro +14 -0
- package/src/tool/duplicateCssRemover/component.astro +353 -0
- package/src/tool/duplicateCssRemover/i18n/en.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/es.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/fr.ts +167 -0
- package/src/tool/duplicateCssRemover/index.ts +34 -0
- package/src/tool/duplicateCssRemover/seo.astro +14 -0
- package/src/tool/duplicateCssRemover/ui.ts +12 -0
- package/src/tool/generadorSecurityTxt/bibliography.astro +14 -0
- package/src/tool/generadorSecurityTxt/component.astro +473 -0
- package/src/tool/generadorSecurityTxt/i18n/en.ts +173 -0
- package/src/tool/generadorSecurityTxt/i18n/es.ts +173 -0
- package/src/tool/generadorSecurityTxt/i18n/fr.ts +173 -0
- package/src/tool/generadorSecurityTxt/index.ts +33 -0
- package/src/tool/generadorSecurityTxt/seo.astro +14 -0
- package/src/tool/generadorSecurityTxt/ui.ts +27 -0
- package/src/tool/hashGenerator/bibliography.astro +14 -0
- package/src/tool/hashGenerator/component.astro +367 -0
- package/src/tool/hashGenerator/i18n/en.ts +118 -0
- package/src/tool/hashGenerator/i18n/es.ts +118 -0
- package/src/tool/hashGenerator/i18n/fr.ts +118 -0
- package/src/tool/hashGenerator/index.ts +33 -0
- package/src/tool/hashGenerator/md5.ts +138 -0
- package/src/tool/hashGenerator/seo.astro +14 -0
- package/src/tool/hashGenerator/ui.ts +11 -0
- package/src/tool/inspectorCertificadosSsl/bibliography.astro +14 -0
- package/src/tool/inspectorCertificadosSsl/component.astro +580 -0
- package/src/tool/inspectorCertificadosSsl/i18n/en.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/es.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/fr.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/index.ts +33 -0
- package/src/tool/inspectorCertificadosSsl/seo.astro +14 -0
- package/src/tool/inspectorCertificadosSsl/ui.ts +29 -0
- package/src/tool/jsonFormatter/bibliography.astro +14 -0
- package/src/tool/jsonFormatter/component.astro +590 -0
- package/src/tool/jsonFormatter/i18n/en.ts +156 -0
- package/src/tool/jsonFormatter/i18n/es.ts +156 -0
- package/src/tool/jsonFormatter/i18n/fr.ts +156 -0
- package/src/tool/jsonFormatter/index.ts +34 -0
- package/src/tool/jsonFormatter/seo.astro +14 -0
- package/src/tool/jsonFormatter/ui.ts +15 -0
- package/src/tool/keycode/bibliography.astro +14 -0
- package/src/tool/keycode/component.astro +540 -0
- package/src/tool/keycode/i18n/en.ts +160 -0
- package/src/tool/keycode/i18n/es.ts +160 -0
- package/src/tool/keycode/i18n/fr.ts +160 -0
- package/src/tool/keycode/index.ts +34 -0
- package/src/tool/keycode/seo.astro +14 -0
- package/src/tool/keycode/ui.ts +10 -0
- package/src/tool/llmCostCalculator/bibliography.astro +14 -0
- package/src/tool/llmCostCalculator/component.astro +488 -0
- package/src/tool/llmCostCalculator/data.ts +99 -0
- package/src/tool/llmCostCalculator/i18n/en.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/es.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/fr.ts +165 -0
- package/src/tool/llmCostCalculator/index.ts +34 -0
- package/src/tool/llmCostCalculator/seo.astro +14 -0
- package/src/tool/llmCostCalculator/ui.ts +11 -0
- package/src/tool/mobileMockupGenerator/app.ts +614 -0
- package/src/tool/mobileMockupGenerator/bibliography.astro +14 -0
- package/src/tool/mobileMockupGenerator/component.astro +1044 -0
- package/src/tool/mobileMockupGenerator/constants.ts +48 -0
- package/src/tool/mobileMockupGenerator/i18n/en.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/es.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/fr.ts +121 -0
- package/src/tool/mobileMockupGenerator/index.ts +33 -0
- package/src/tool/mobileMockupGenerator/rendering.ts +189 -0
- package/src/tool/mobileMockupGenerator/seo.astro +14 -0
- package/src/tool/mobileMockupGenerator/store.ts +145 -0
- package/src/tool/mobileMockupGenerator/types.ts +41 -0
- package/src/tool/mobileMockupGenerator/ui.ts +48 -0
- package/src/tool/musicalTypography/bibliography.astro +14 -0
- package/src/tool/musicalTypography/component.astro +480 -0
- package/src/tool/musicalTypography/i18n/en.ts +179 -0
- package/src/tool/musicalTypography/i18n/es.ts +179 -0
- package/src/tool/musicalTypography/i18n/fr.ts +179 -0
- package/src/tool/musicalTypography/index.ts +33 -0
- package/src/tool/musicalTypography/seo.astro +14 -0
- package/src/tool/musicalTypography/ui.ts +25 -0
- package/src/tool/placeholderGenerator/bibliography.astro +14 -0
- package/src/tool/placeholderGenerator/component.astro +499 -0
- package/src/tool/placeholderGenerator/i18n/en.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/es.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/fr.ts +176 -0
- package/src/tool/placeholderGenerator/index.ts +34 -0
- package/src/tool/placeholderGenerator/seo.astro +14 -0
- package/src/tool/placeholderGenerator/ui.ts +14 -0
- package/src/tool/promptLibrary/bibliography.astro +14 -0
- package/src/tool/promptLibrary/component.astro +1131 -0
- package/src/tool/promptLibrary/controller.ts +49 -0
- package/src/tool/promptLibrary/i18n/en.ts +131 -0
- package/src/tool/promptLibrary/i18n/es.ts +131 -0
- package/src/tool/promptLibrary/i18n/fr.ts +126 -0
- package/src/tool/promptLibrary/index.ts +33 -0
- package/src/tool/promptLibrary/seo.astro +14 -0
- package/src/tool/promptLibrary/ui.ts +29 -0
- package/src/tool/readabilityCalculator/bibliography.astro +14 -0
- package/src/tool/readabilityCalculator/component.astro +534 -0
- package/src/tool/readabilityCalculator/i18n/en.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/es.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/fr.ts +133 -0
- package/src/tool/readabilityCalculator/index.ts +33 -0
- package/src/tool/readabilityCalculator/seo.astro +14 -0
- package/src/tool/readabilityCalculator/ui.ts +27 -0
- package/src/tool/svgSanitizer/bibliography.astro +14 -0
- package/src/tool/svgSanitizer/component.astro +554 -0
- package/src/tool/svgSanitizer/i18n/en.ts +125 -0
- package/src/tool/svgSanitizer/i18n/es.ts +125 -0
- package/src/tool/svgSanitizer/i18n/fr.ts +125 -0
- package/src/tool/svgSanitizer/index.ts +33 -0
- package/src/tool/svgSanitizer/seo.astro +14 -0
- package/src/tool/svgSanitizer/ui.ts +18 -0
- package/src/tool/svgToCss/bibliography.astro +14 -0
- package/src/tool/svgToCss/component.astro +381 -0
- package/src/tool/svgToCss/i18n/en.ts +174 -0
- package/src/tool/svgToCss/i18n/es.ts +174 -0
- package/src/tool/svgToCss/i18n/fr.ts +174 -0
- package/src/tool/svgToCss/index.ts +34 -0
- package/src/tool/svgToCss/seo.astro +14 -0
- package/src/tool/svgToCss/ui.ts +13 -0
- package/src/tool/urlCleaner/bibliography.astro +14 -0
- package/src/tool/urlCleaner/component.astro +458 -0
- package/src/tool/urlCleaner/i18n/en.ts +116 -0
- package/src/tool/urlCleaner/i18n/es.ts +116 -0
- package/src/tool/urlCleaner/i18n/fr.ts +116 -0
- package/src/tool/urlCleaner/index.ts +33 -0
- package/src/tool/urlCleaner/seo.astro +14 -0
- package/src/tool/urlCleaner/ui.ts +12 -0
- package/src/tool/urlEncoderDecoder/bibliography.astro +14 -0
- package/src/tool/urlEncoderDecoder/component.astro +291 -0
- package/src/tool/urlEncoderDecoder/i18n/en.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/es.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/fr.ts +162 -0
- package/src/tool/urlEncoderDecoder/index.ts +34 -0
- package/src/tool/urlEncoderDecoder/seo.astro +14 -0
- package/src/tool/urlEncoderDecoder/ui.ts +11 -0
- package/src/tool/utmGenerator/bibliography.astro +14 -0
- package/src/tool/utmGenerator/component.astro +270 -0
- package/src/tool/utmGenerator/i18n/en.ts +117 -0
- package/src/tool/utmGenerator/i18n/es.ts +117 -0
- package/src/tool/utmGenerator/i18n/fr.ts +117 -0
- package/src/tool/utmGenerator/index.ts +33 -0
- package/src/tool/utmGenerator/seo.astro +14 -0
- package/src/tool/utmGenerator/ui.ts +13 -0
- package/src/tools.ts +27 -0
- package/src/types.ts +72 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { CalculadoraTiempoDatosUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'data-time-calculator-web-speed-impact';
|
|
6
|
+
const title = 'Data Time Calculator Impact of Web Speed';
|
|
7
|
+
const description = 'Discover how much lifetime your users lose waiting for your website to load on 3G, 4G, and 5G connections. Calculate the real impact of your site weight.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Why is knowing my website load time important?',
|
|
12
|
+
answer: 'Because it directly impacts user experience, SEO, and conversions. Google has documented that each second of delay reduces conversions by 7%. Additionally, 53% of mobile visitors abandon a page that takes more than 3 seconds to load.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'What are those small percentages of lifetime loss?',
|
|
16
|
+
answer: 'They represent the percentage of a person\'s total lifetime (approximately 80 years or 2.5 billion seconds) spent waiting for your page to load. Though small individually, multiplied by millions of users, they represent enormous amounts of wasted human time.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'What is the average connection speed worldwide?',
|
|
20
|
+
answer: '4G is standard in developed countries. However, millions of users in developing countries still rely on 3G. This is why it is crucial to optimize your site for all connection speeds.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'What should my website weight be?',
|
|
24
|
+
answer: 'Google recommends that the homepage load in less than 3 seconds on a typical 4G connection. For this, a site should ideally weigh between 1-2 MB. However, the global average is close to 2-3 MB.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'How can I reduce my site weight?',
|
|
28
|
+
answer: 'Main strategies: optimize images (50-80% of weight), minify CSS and JavaScript, use lazy loading, implement browser cache, and use a CDN. Image optimization is usually the most impactful factor.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: 'Does load speed affect Google ranking?',
|
|
32
|
+
answer: 'Yes, absolutely. Google considers Core Web Vitals as important ranking factors. A slower site will rank worse than a faster one, even with similar content.',
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const howToData = [
|
|
37
|
+
{ name: 'Enter Your Site Weight', text: 'Use browser developer tools or WebPageTest to find your page weight. Enter that value in MB.' },
|
|
38
|
+
{ name: 'Observe Load Times', text: 'The calculator shows how many seconds your site takes to load on 3G, 4G, and 5G. Real-world times are usually higher.' },
|
|
39
|
+
{ name: 'Understand Lifetime Impact', text: 'The "lifetime" percentage shows how much of someone\'s life is spent waiting. Use this as motivation to optimize.' },
|
|
40
|
+
{ name: 'Optimize and Recalculate', text: 'After optimizing, measure again and recalculate. See how small improvements have big impact.' },
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
44
|
+
'@context': 'https://schema.org',
|
|
45
|
+
'@type': 'FAQPage',
|
|
46
|
+
mainEntity: faqData.map((item) => ({
|
|
47
|
+
'@type': 'Question',
|
|
48
|
+
name: item.question,
|
|
49
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
62
|
+
'@context': 'https://schema.org',
|
|
63
|
+
'@type': 'SoftwareApplication',
|
|
64
|
+
name: title,
|
|
65
|
+
description,
|
|
66
|
+
applicationCategory: 'UtilityApplication',
|
|
67
|
+
operatingSystem: 'All',
|
|
68
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
69
|
+
inLanguage: 'en',
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const ui: CalculadoraTiempoDatosUI = {
|
|
73
|
+
headerTitle: 'Time Lost in Networks',
|
|
74
|
+
labelWebSize: 'Website weight (MB)',
|
|
75
|
+
unit: 'MB',
|
|
76
|
+
presetsLabel: 'REALISTIC EXAMPLES',
|
|
77
|
+
labelSpeed: 'Connection speed',
|
|
78
|
+
speedLabel3g: '3G',
|
|
79
|
+
speedValue3g: '0.4 Mbps',
|
|
80
|
+
speedLabel4g: '4G/LTE',
|
|
81
|
+
speedValue4g: '10 Mbps',
|
|
82
|
+
speedLabel5g: '5G',
|
|
83
|
+
speedValue5g: '100+ Mbps',
|
|
84
|
+
labelTimes: 'How many times per day?',
|
|
85
|
+
resultTitle: 'Results',
|
|
86
|
+
resultSingleLoad: 'Single load',
|
|
87
|
+
resultDailyTotal: 'Daily total',
|
|
88
|
+
resultTimePerYear: 'per year waiting',
|
|
89
|
+
resultLifeYears: 'in your lifetime',
|
|
90
|
+
resultMessage: 'You have lost approximately 1 year of life',
|
|
91
|
+
copyMessage: 'Copied',
|
|
92
|
+
preset3g: '3G',
|
|
93
|
+
preset4g: '4G',
|
|
94
|
+
preset5g: '5G',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const content: ToolLocaleContent<CalculadoraTiempoDatosUI> = {
|
|
98
|
+
slug,
|
|
99
|
+
title,
|
|
100
|
+
description,
|
|
101
|
+
ui,
|
|
102
|
+
faqTitle: 'Frequently Asked Questions',
|
|
103
|
+
faq: faqData,
|
|
104
|
+
bibliographyTitle: 'Technical Resources on Web Optimization',
|
|
105
|
+
bibliography: [
|
|
106
|
+
{ name: 'Google PageSpeed Insights', url: 'https://pagespeed.web.dev/' },
|
|
107
|
+
{ name: 'WebPageTest - Analyze Website Speed', url: 'https://www.webpagetest.org/' },
|
|
108
|
+
{ name: 'Web.dev - Core Web Vitals', url: 'https://web.dev/vitals/' },
|
|
109
|
+
{ name: 'MDN - Web Performance', url: 'https://developer.mozilla.org/en-US/docs/Web/Performance' },
|
|
110
|
+
],
|
|
111
|
+
howTo: howToData,
|
|
112
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
113
|
+
seo: [
|
|
114
|
+
{ type: 'title', text: 'Why Website Load Speed is Critical', level: 2 },
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: 'In today\'s digital era, website load speed is not a luxury but a necessity. Every millisecond counts when retaining users, improving search rankings, and maximizing conversions. Modern users expect pages to load in less than 3 seconds.',
|
|
118
|
+
},
|
|
119
|
+
{ type: 'title', text: 'Impact on User Experience', level: 3 },
|
|
120
|
+
{
|
|
121
|
+
type: 'paragraph',
|
|
122
|
+
html: '53% of mobile visitors abandon a page if it takes more than 3 seconds to load. Conversion rates drop 7% for each additional second of latency.',
|
|
123
|
+
},
|
|
124
|
+
{ type: 'title', text: 'Understanding Connection Speeds', level: 3 },
|
|
125
|
+
{
|
|
126
|
+
type: 'list',
|
|
127
|
+
items: [
|
|
128
|
+
'<strong>3G:</strong> 0.4 Mbps - Common in rural areas and developing countries',
|
|
129
|
+
'<strong>4G/LTE:</strong> 10 Mbps - Standard in developed countries',
|
|
130
|
+
'<strong>5G:</strong> 100+ Mbps - Gradually expanding, still limited',
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
{ type: 'title', text: 'Strategies to Reduce Site Weight', level: 3 },
|
|
134
|
+
{
|
|
135
|
+
type: 'list',
|
|
136
|
+
items: [
|
|
137
|
+
'<strong>Image Optimization:</strong> Represents 50-80% of weight. Reduce by 40-60% with tools like TinyPNG.',
|
|
138
|
+
'<strong>Minification:</strong> Remove unnecessary code from CSS and JavaScript. Save 30-50%.',
|
|
139
|
+
'<strong>Lazy Loading:</strong> Load images only when users scroll to them.',
|
|
140
|
+
'<strong>Browser Cache:</strong> Cache static files on user browsers.',
|
|
141
|
+
'<strong>CDN:</strong> Serve content from geographically close servers.',
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{ type: 'title', text: 'Conclusion: Every Second Counts', level: 2 },
|
|
145
|
+
{
|
|
146
|
+
type: 'paragraph',
|
|
147
|
+
html: 'Your website is often the first impression users have of your brand. A slow site frustrates users and loses business. A fast, responsive site creates a positive experience and improves all your metrics.',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { CalculadoraTiempoDatosUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculadora-tiempo-datos-impacto-velocidad-web';
|
|
6
|
+
const title = 'Calculadora de Tiempo en Datos Impacto de la Velocidad Web';
|
|
7
|
+
const description = 'Descubre cuánto tiempo de vida pierden tus usuarios esperando a que tu web cargue en conexiones 3G, 4G y 5G. Calcula el impacto real del peso de tu sitio.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: '¿Por qué es importante saber el tiempo de carga de mi sitio web?',
|
|
12
|
+
answer: 'Porque directamente impacta en la experiencia del usuario, el SEO y las conversiones. Google ha documentado que cada segundo de retraso reduce las conversiones un 7%. Además, el 53% de los visitantes móviles abandonan una página que tarda más de 3 segundos en cargar.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '¿Qué son esos porcentajes tan pequeños de "tiempo de vida"?',
|
|
16
|
+
answer: 'Son el porcentaje del tiempo de vida total de una persona (aproximadamente 80 años o 2.5 mil millones de segundos) que se invierte esperando que tu página cargue. Aunque parezcan pequeños, cuando se multiplican por millones de usuarios, representan enormes cantidades de tiempo humano desperdiciado.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '¿Cuál es la velocidad de conexión promedio en el mundo?',
|
|
20
|
+
answer: 'Varía enormemente por región. En países desarrollados, 4G es estándar. Sin embargo, millones de usuarios en países en desarrollo aún dependen de 3G. Por eso es crucial optimizar tu sitio para funcionar bien en todas las velocidades.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '¿Qué peso debería tener mi sitio web?',
|
|
24
|
+
answer: 'Google recomienda que la homepage cargue en menos de 3 segundos en una conexión 4G típica. Para esto, un sitio debería idealmente pesar entre 1-2 MB. Sin embargo, el promedio global es cercano a 2-3 MB, lo que significa que la mayoría de sitios están por encima del óptimo.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '¿Cómo puedo reducir el peso de mi sitio?',
|
|
28
|
+
answer: 'Las principales estrategias son: optimizar imágenes (representan 50-80% del peso), minificar CSS y JavaScript, usar lazy loading, implementar cache del navegador y usar un CDN. La optimización de imágenes suele ser el factor más impactante.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: '¿La velocidad de carga afecta el posicionamiento en Google?',
|
|
32
|
+
answer: 'Sí, absolutamente. Google considera Core Web Vitals (que miden velocidad y experiencia de usuario) como factores de ranking importantes. Un sitio lento tendrá peor posicionamiento que uno rápido, incluso con contenido similar.',
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const howToData = [
|
|
37
|
+
{ name: 'Ingresa el Peso de tu Sitio', text: 'Utiliza las herramientas de desarrollador de tu navegador (Network tab) o servicios como WebPageTest para averiguar el peso total de tu página. Introduce ese valor en MB.' },
|
|
38
|
+
{ name: 'Observa los Tiempos de Carga', text: 'La calculadora mostrará automáticamente cuántos segundos tardará tu sitio en cargar en conexiones 3G, 4G y 5G. Recuerda que en la práctica, los tiempos suelen ser mayores.' },
|
|
39
|
+
{ name: 'Entiende el Impacto en Tiempo de Vida', text: 'El porcentaje de "tiempo de vida" ilustra cuánto del tiempo de vida total de una persona se invierte en esperar. Usa esto como motivación para optimizar.' },
|
|
40
|
+
{ name: 'Optimiza y Vuelve a Calcular', text: 'Después de optimizar tu sitio, vuelve a medir el peso y recalcula. Verás cómo pequeñas mejoras tienen grandes impactos.' },
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
44
|
+
'@context': 'https://schema.org',
|
|
45
|
+
'@type': 'FAQPage',
|
|
46
|
+
mainEntity: faqData.map((item) => ({
|
|
47
|
+
'@type': 'Question',
|
|
48
|
+
name: item.question,
|
|
49
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
62
|
+
'@context': 'https://schema.org',
|
|
63
|
+
'@type': 'SoftwareApplication',
|
|
64
|
+
name: title,
|
|
65
|
+
description,
|
|
66
|
+
applicationCategory: 'UtilityApplication',
|
|
67
|
+
operatingSystem: 'All',
|
|
68
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
69
|
+
inLanguage: 'es',
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const ui: CalculadoraTiempoDatosUI = {
|
|
73
|
+
headerTitle: 'Tiempo Perdido en Redes',
|
|
74
|
+
labelWebSize: 'Peso de la web (MB)',
|
|
75
|
+
unit: 'MB',
|
|
76
|
+
presetsLabel: 'EJEMPLOS REALISTAS',
|
|
77
|
+
labelSpeed: 'Velocidad de conexión',
|
|
78
|
+
speedLabel3g: '3G',
|
|
79
|
+
speedValue3g: '0.4 Mbps',
|
|
80
|
+
speedLabel4g: '4G/LTE',
|
|
81
|
+
speedValue4g: '10 Mbps',
|
|
82
|
+
speedLabel5g: '5G',
|
|
83
|
+
speedValue5g: '100+ Mbps',
|
|
84
|
+
labelTimes: '¿Cuántas veces al día?',
|
|
85
|
+
resultTitle: 'Resultados',
|
|
86
|
+
resultSingleLoad: 'Una carga',
|
|
87
|
+
resultDailyTotal: 'Total diario',
|
|
88
|
+
resultTimePerYear: 'al año esperando',
|
|
89
|
+
resultLifeYears: 'en tu vida útil',
|
|
90
|
+
resultMessage: 'Has perdido aproximadamente 1 año completo de vida',
|
|
91
|
+
copyMessage: 'Copiado',
|
|
92
|
+
preset3g: '3G',
|
|
93
|
+
preset4g: '4G',
|
|
94
|
+
preset5g: '5G',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const content: ToolLocaleContent<CalculadoraTiempoDatosUI> = {
|
|
98
|
+
slug,
|
|
99
|
+
title,
|
|
100
|
+
description,
|
|
101
|
+
ui,
|
|
102
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
103
|
+
faq: faqData,
|
|
104
|
+
bibliographyTitle: 'Recursos Técnicos sobre Optimización Web',
|
|
105
|
+
bibliography: [
|
|
106
|
+
{ name: 'Google PageSpeed Insights', url: 'https://pagespeed.web.dev/' },
|
|
107
|
+
{ name: 'WebPageTest - Analiza la velocidad de tu sitio', url: 'https://www.webpagetest.org/' },
|
|
108
|
+
{ name: 'Web.dev - Core Web Vitals', url: 'https://web.dev/vitals/' },
|
|
109
|
+
{ name: 'MDN - Web Performance', url: 'https://developer.mozilla.org/en-US/docs/Web/Performance' },
|
|
110
|
+
],
|
|
111
|
+
howTo: howToData,
|
|
112
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
113
|
+
seo: [
|
|
114
|
+
{ type: 'title', text: '¿Por Qué la Velocidad de Carga es Crítica para tu Web?', level: 2 },
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: 'En la era digital actual, la velocidad de carga de un sitio web no es un lujo, sino una <strong>necesidad absoluta</strong>. Cada milisegundo cuenta cuando se trata de retener usuarios, mejorar el posicionamiento en buscadores y maximizar las conversiones. La realidad es que los usuarios modernos tienen expectativas muy altas: esperan que una página web cargue en menos de 3 segundos.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: 'El peso de tu sitio web es uno de los factores más directamente relacionados con la velocidad de carga. Esta calculadora te ayuda a entender exactamente cuánto tiempo pierden tus visitantes esperando que tu página se cargue.',
|
|
122
|
+
},
|
|
123
|
+
{ type: 'title', text: 'El Impacto de la Velocidad en la Experiencia del Usuario', level: 3 },
|
|
124
|
+
{
|
|
125
|
+
type: 'paragraph',
|
|
126
|
+
html: 'La velocidad de carga afecta directamente a varios aspectos críticos de tu presencia en línea. Los estudios demuestran que el 53% de los visitantes de sitios móviles abandonan una página si tarda más de 3 segundos en cargar.',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'Las tasas de conversión caen un 7% por cada segundo adicional de latencia. Si tu tienda online pierde 100 ventas al día porque tu sitio tarda 5 segundos en lugar de 2, estás perdiendo decenas de miles de euros anualmente.',
|
|
131
|
+
},
|
|
132
|
+
{ type: 'title', text: 'Entendiendo las Diferentes Velocidades de Conexión', level: 3 },
|
|
133
|
+
{
|
|
134
|
+
type: 'paragraph',
|
|
135
|
+
html: 'Las velocidades de conexión varían enormemente según la geografía y la tecnología disponible:',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'table',
|
|
139
|
+
headers: ['Tecnología', 'Velocidad', 'Disponibilidad', 'Tiempo de Carga (5MB)'],
|
|
140
|
+
rows: [
|
|
141
|
+
['<strong>3G</strong>', '0.4 Mbps', 'Común en áreas rurales y países en desarrollo', '[100 segundos'],
|
|
142
|
+
['<strong>4G/LTE</strong>', '10 Mbps', 'Estándar en países desarrollados', '[4 segundos'],
|
|
143
|
+
['<strong>5G</strong>', '100+ Mbps', 'Crecimiento gradual, aún limitado', '[0.4 segundos'],
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{ type: 'title', text: 'Estrategias para Reducir el Peso de tu Sitio', level: 3 },
|
|
147
|
+
{
|
|
148
|
+
type: 'list',
|
|
149
|
+
items: [
|
|
150
|
+
'<strong>Optimización de Imágenes:</strong> Representan entre el 50-80% del peso total. Usar TinyPNG o ImageOptim puede reducir el tamaño en un 40-60%.',
|
|
151
|
+
'<strong>Minificación de CSS y JavaScript:</strong> Elimina espacios en blanco y código innecesario. Puedes ahorrar el 30-50%.',
|
|
152
|
+
'<strong>Lazy Loading:</strong> Carga imágenes solo cuando el usuario se desplaza hacia ellas.',
|
|
153
|
+
'<strong>Cache Agresivo:</strong> Configura tu servidor para cachear archivos estáticos en el navegador del usuario.',
|
|
154
|
+
'<strong>CDN:</strong> Usa un CDN como Cloudflare para servir contenido desde servidores cercanos.',
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{ type: 'title', text: 'Conclusión: Cada Segundo Cuenta', level: 2 },
|
|
158
|
+
{
|
|
159
|
+
type: 'paragraph',
|
|
160
|
+
html: 'Tu sitio web es a menudo la primera impresión que los usuarios tienen de tu marca. Si esa impresión es de frustración mientras esperan a que cargue, has perdido la batalla antes de empezar. Un sitio rápido crea una experiencia positiva que fideliza usuarios y mejora todas tus métricas.',
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { CalculadoraTiempoDatosUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculatrice-temps-donnees-impact-vitesse-web';
|
|
6
|
+
const title = 'Calculatrice de Temps de Données Impact de la Vitesse Web';
|
|
7
|
+
const description = 'Découvrez combien de temps de vie vos utilisateurs perdent en attendant que votre site se charge sur les connexions 3G, 4G et 5G. Calculez l\'impact réel du poids de votre site.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Pourquoi est-il important de connaître le temps de chargement de mon site?',
|
|
12
|
+
answer: 'Parce qu\'il impacte directement l\'expérience utilisateur, le SEO et les conversions. Google a documenté que chaque seconde de retard réduit les conversions de 7%. De plus, 53% des visiteurs mobiles abandonnent une page qui prend plus de 3 secondes à charger.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Que signifient ces petits pourcentages de perte de temps de vie?',
|
|
16
|
+
answer: 'Ils représentent le pourcentage du temps de vie total d\'une personne (environ 80 ans ou 2,5 milliards de secondes) passé à attendre que votre page se charge. Bien que faibles individuellement, multipliés par des millions d\'utilisateurs, ils représentent d\'énormes quantités de temps humain gaspillé.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Quelle est la vitesse de connexion moyenne dans le monde?',
|
|
20
|
+
answer: '4G est standard dans les pays développés. Cependant, des millions d\'utilisateurs dans les pays en développement dépendent encore du 3G. C\'est pourquoi il est crucial d\'optimiser votre site pour toutes les vitesses de connexion.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Quel poids devrait avoir mon site web?',
|
|
24
|
+
answer: 'Google recommande que la page d\'accueil se charge en moins de 3 secondes sur une connexion 4G typique. Pour cela, un site devrait peser entre 1-2 MB. Cependant, la moyenne mondiale est proche de 2-3 MB.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Comment puis-je réduire le poids de mon site?',
|
|
28
|
+
answer: 'Principales stratégies: optimiser les images (50-80% du poids), minifier CSS et JavaScript, utiliser lazy loading, implémenter le cache du navigateur et utiliser un CDN. L\'optimisation des images est généralement le facteur le plus impactant.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: 'La vitesse de chargement affecte-t-elle le classement Google?',
|
|
32
|
+
answer: 'Oui, absolument. Google considère Core Web Vitals comme des facteurs de classement importants. Un site plus lent sera mal classé qu\'un site plus rapide, même avec un contenu similaire.',
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const howToData = [
|
|
37
|
+
{ name: 'Entrez le poids de votre site', text: 'Utilisez les outils de développement du navigateur ou WebPageTest pour connaître le poids de votre page. Entrez cette valeur en MB.' },
|
|
38
|
+
{ name: 'Observez les temps de chargement', text: 'La calculatrice montre combien de secondes votre site prend pour charger sur 3G, 4G et 5G. Les temps réels sont généralement plus élevés.' },
|
|
39
|
+
{ name: 'Comprenez l\'impact sur la vie', text: 'Le pourcentage de "vie" montre combien de la vie de quelqu\'un est passée à attendre. Utilisez cela comme motivation pour optimiser.' },
|
|
40
|
+
{ name: 'Optimisez et recalculez', text: 'Après optimisation, mesurez à nouveau et recalculez. Voyez comment les petites améliorations ont un grand impact.' },
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
44
|
+
'@context': 'https://schema.org',
|
|
45
|
+
'@type': 'FAQPage',
|
|
46
|
+
mainEntity: faqData.map((item) => ({
|
|
47
|
+
'@type': 'Question',
|
|
48
|
+
name: item.question,
|
|
49
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
62
|
+
'@context': 'https://schema.org',
|
|
63
|
+
'@type': 'SoftwareApplication',
|
|
64
|
+
name: title,
|
|
65
|
+
description,
|
|
66
|
+
applicationCategory: 'UtilityApplication',
|
|
67
|
+
operatingSystem: 'All',
|
|
68
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
69
|
+
inLanguage: 'fr',
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const ui: CalculadoraTiempoDatosUI = {
|
|
73
|
+
headerTitle: 'Temps Perdu en Réseaux',
|
|
74
|
+
labelWebSize: 'Poids du site web (MB)',
|
|
75
|
+
unit: 'MB',
|
|
76
|
+
presetsLabel: 'EXEMPLES RÉALISTES',
|
|
77
|
+
labelSpeed: 'Vitesse de connexion',
|
|
78
|
+
speedLabel3g: '3G',
|
|
79
|
+
speedValue3g: '0,4 Mbps',
|
|
80
|
+
speedLabel4g: '4G/LTE',
|
|
81
|
+
speedValue4g: '10 Mbps',
|
|
82
|
+
speedLabel5g: '5G',
|
|
83
|
+
speedValue5g: '100+ Mbps',
|
|
84
|
+
labelTimes: 'Combien de fois par jour?',
|
|
85
|
+
resultTitle: 'Résultats',
|
|
86
|
+
resultSingleLoad: 'Chargement unique',
|
|
87
|
+
resultDailyTotal: 'Total quotidien',
|
|
88
|
+
resultTimePerYear: 'par an à attendre',
|
|
89
|
+
resultLifeYears: 'dans votre vie',
|
|
90
|
+
resultMessage: 'Vous avez perdu approximativement 1 an de vie',
|
|
91
|
+
copyMessage: 'Copié',
|
|
92
|
+
preset3g: '3G',
|
|
93
|
+
preset4g: '4G',
|
|
94
|
+
preset5g: '5G',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const content: ToolLocaleContent<CalculadoraTiempoDatosUI> = {
|
|
98
|
+
slug,
|
|
99
|
+
title,
|
|
100
|
+
description,
|
|
101
|
+
ui,
|
|
102
|
+
faqTitle: 'Questions Fréquemment Posées',
|
|
103
|
+
faq: faqData,
|
|
104
|
+
bibliographyTitle: 'Ressources Techniques sur l\'Optimisation Web',
|
|
105
|
+
bibliography: [
|
|
106
|
+
{ name: 'Google PageSpeed Insights', url: 'https://pagespeed.web.dev/' },
|
|
107
|
+
{ name: 'WebPageTest - Analyser la vitesse du site', url: 'https://www.webpagetest.org/' },
|
|
108
|
+
{ name: 'Web.dev - Core Web Vitals', url: 'https://web.dev/vitals/' },
|
|
109
|
+
{ name: 'MDN - Performance Web', url: 'https://developer.mozilla.org/fr/docs/Web/Performance' },
|
|
110
|
+
],
|
|
111
|
+
howTo: howToData,
|
|
112
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
113
|
+
seo: [
|
|
114
|
+
{ type: 'title', text: 'Pourquoi la Vitesse de Chargement du Site est Critique', level: 2 },
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: 'À l\'ère numérique actuelle, la vitesse de chargement d\'un site web n\'est pas un luxe mais une nécessité. Chaque milliseconde compte pour fidéliser les utilisateurs, améliorer le classement dans les moteurs de recherche et maximiser les conversions. Les utilisateurs modernes s\'attendent à ce qu\'une page se charge en moins de 3 secondes.',
|
|
118
|
+
},
|
|
119
|
+
{ type: 'title', text: 'Impact sur l\'Expérience Utilisateur', level: 3 },
|
|
120
|
+
{
|
|
121
|
+
type: 'paragraph',
|
|
122
|
+
html: '53% des visiteurs mobiles abandonnent une page qui prend plus de 3 secondes à charger. Les taux de conversion chutent de 7% pour chaque seconde de latence supplémentaire.',
|
|
123
|
+
},
|
|
124
|
+
{ type: 'title', text: 'Comprendre les Vitesses de Connexion', level: 3 },
|
|
125
|
+
{
|
|
126
|
+
type: 'list',
|
|
127
|
+
items: [
|
|
128
|
+
'<strong>3G:</strong> 0,4 Mbps - Courant dans les zones rurales et les pays en développement',
|
|
129
|
+
'<strong>4G/LTE:</strong> 10 Mbps - Standard dans les pays développés',
|
|
130
|
+
'<strong>5G:</strong> 100+ Mbps - En expansion progressive, encore limité',
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
{ type: 'title', text: 'Stratégies pour Réduire le Poids du Site', level: 3 },
|
|
134
|
+
{
|
|
135
|
+
type: 'list',
|
|
136
|
+
items: [
|
|
137
|
+
'<strong>Optimisation des images:</strong> Représente 50-80% du poids. Réduire de 40-60% avec TinyPNG.',
|
|
138
|
+
'<strong>Minification:</strong> Supprimer le code inutile de CSS et JavaScript. Économiser 30-50%.',
|
|
139
|
+
'<strong>Lazy Loading:</strong> Charger les images uniquement quand l\'utilisateur se déplace.',
|
|
140
|
+
'<strong>Cache du navigateur:</strong> Mettre en cache les fichiers statiques.',
|
|
141
|
+
'<strong>CDN:</strong> Servir le contenu depuis des serveurs géographiquement proches.',
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{ type: 'title', text: 'Conclusion: Chaque Seconde Compte', level: 2 },
|
|
145
|
+
{
|
|
146
|
+
type: 'paragraph',
|
|
147
|
+
html: 'Votre site web est souvent la première impression que les utilisateurs ont de votre marque. Un site lent frustre les utilisateurs et perd des affaires. Un site rapide et réactif crée une expérience positive et améliore tous vos indicateurs.',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { DeveloperToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
|
|
2
|
+
import CalculadoraTiempoDatosComponent from './component.astro';
|
|
3
|
+
import CalculadoraTiempoDatosSEO from './seo.astro';
|
|
4
|
+
import CalculadoraTiempoDatosBibliography from './bibliography.astro';
|
|
5
|
+
import type { CalculadoraTiempoDatosUI } from './ui';
|
|
6
|
+
|
|
7
|
+
export type CalculadoraTiempoDatosLocaleContent = ToolLocaleContent<CalculadoraTiempoDatosUI>;
|
|
8
|
+
|
|
9
|
+
import { content as es } from './i18n/es';
|
|
10
|
+
import { content as en } from './i18n/en';
|
|
11
|
+
import { content as fr } from './i18n/fr';
|
|
12
|
+
|
|
13
|
+
export const calculadoraTiempoDatos: DeveloperToolEntry<CalculadoraTiempoDatosUI> = {
|
|
14
|
+
id: 'calculadora-tiempo-datos',
|
|
15
|
+
icons: {
|
|
16
|
+
bg: 'mdi:wifi',
|
|
17
|
+
fg: 'mdi:clock-outline',
|
|
18
|
+
},
|
|
19
|
+
i18n: {
|
|
20
|
+
es: async () => es,
|
|
21
|
+
en: async () => en,
|
|
22
|
+
fr: async () => fr,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { CalculadoraTiempoDatosComponent, CalculadoraTiempoDatosSEO, CalculadoraTiempoDatosBibliography };
|
|
27
|
+
|
|
28
|
+
export const CALCULADORA_TIEMPO_DATOS_TOOL: ToolDefinition = {
|
|
29
|
+
entry: calculadoraTiempoDatos,
|
|
30
|
+
Component: CalculadoraTiempoDatosComponent,
|
|
31
|
+
SEOComponent: CalculadoraTiempoDatosSEO,
|
|
32
|
+
BibliographyComponent: CalculadoraTiempoDatosBibliography,
|
|
33
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { calculadoraTiempoDatos } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await calculadoraTiempoDatos.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface CalculadoraTiempoDatosUI extends Record<string, string> {
|
|
2
|
+
headerTitle: string;
|
|
3
|
+
labelWebSize: string;
|
|
4
|
+
unit: string;
|
|
5
|
+
presetsLabel: string;
|
|
6
|
+
labelSpeed: string;
|
|
7
|
+
speedLabel3g: string;
|
|
8
|
+
speedValue3g: string;
|
|
9
|
+
speedLabel4g: string;
|
|
10
|
+
speedValue4g: string;
|
|
11
|
+
speedLabel5g: string;
|
|
12
|
+
speedValue5g: string;
|
|
13
|
+
labelTimes: string;
|
|
14
|
+
resultTitle: string;
|
|
15
|
+
resultSingleLoad: string;
|
|
16
|
+
resultDailyTotal: string;
|
|
17
|
+
resultTimePerYear: string;
|
|
18
|
+
resultLifeYears: string;
|
|
19
|
+
resultMessage: string;
|
|
20
|
+
copyMessage: string;
|
|
21
|
+
preset3g: string;
|
|
22
|
+
preset4g: string;
|
|
23
|
+
preset5g: string;
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { colorConverter } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await colorConverter.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SharedBibliography links={content.bibliography} />}
|