-
Notifications
You must be signed in to change notification settings - Fork 2
/
CDN.tsx
68 lines (56 loc) · 3.37 KB
/
CDN.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import React from 'react';
import { getClientId } from '../util';
export default function CDN() {
const [componentDidMount, setComponentDidMount] = React.useState(false);
const [componentDidUpdate, setComponentDidUpdate] = React.useState(false);
React.useEffect(() => {
if (!componentDidMount) {
// Create new script element to load cdn
const script = document.createElement('script');
script.src = 'https://ziping-liu-corporation.github.io/react-adobe-embed/lib/bundle.js';
script.async = true;
script.onload = () => {
setComponentDidUpdate(true);
};
// Add script to document body
document.body.appendChild(script);
setComponentDidMount(true);
}
} , [componentDidMount, componentDidUpdate]);
(window as any).React = React; // expose React as global since the react-adobe embed cdn expects React to be loaded via cdn as well
console.info("ReactAdobeEMbed",(window as any).ReactAdobeEmbed)
const ReactViewAdobe = (window as any).ReactAdobeEmbed?.ReactViewAdobe;
return (
<section className="container section">
<div className="row ws-m">
<div className="col s12">
<header className="sec-heading">
<h2>CDN Loaded Basic PDF Render</h2>
<span className="subheading">
Content Delivery Networking (CDN) allows the delivery of the react-adobe-embed component to a browser environment to occur as <strong>a separate process</strong> from the main body of the web application's code.
</span>
</header>
<p>
This approach involves loading the component as an independent script within the initial HTML page load, effectively integrating it into the HTML DOM environment. This method not only reduces the space required by the web application, thereby enhancing its load speed, but also leverages the benefits of distributed loading. By loading distinct components of the web application through separate network requests, we can maximize efficiency. In this instance, the react-adobe-embed component is sourced from a CDN as a separate network request, distinct from the main web application. This effectively allows the web application to load in two concurrent parts, or at least simulates this effect, thanks to the inherent multi-threading capabilities of computer systems.
</p>
{
componentDidUpdate && componentDidMount && (<ReactViewAdobe
clientId={getClientId()}
url="https://raw.githubusercontent.com/ZipingL/dna/main/23andMe_Ancestry_Book.pdf"
debug={true}
className="col container-fluid post-content"
style={{
height: "calc(100vh - 420px)",
width: "100%"
}}
previewConfig={{}}
fileMeta={{
fileName: "23andMe_Ancestry_Book.pdf",
}}
/>)
}
</div>
</div>
</section>
)
}