The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
Problem with getimagesize function
I have a serious problem with a modification I have done.
I've modified the handle_bbcode_img_match function in functions_bbcodeparse.php of vB, to check for large images in the posts. The code of the function has been extended to use the getimagesize function to check for the size of the images. However, this results in extreme increase of the time it takes to load a page, with lots of images. For example, a page which has 7 pictures and loads in 1.20 seconds without the size checking, takes 6.22 seconds if the function is used. Another one which has 26 pictures goes from 1.8 sec without the size checking to 30 secs when the size is checked. Here is the code I am using to check the size of the pictures. Code:
function handle_bbcode_img_match($link) { // <-- This is the button/image that will be displayed instead of the big image. $img_replacement1 = "images/misc/toobigimage.gif"; // <-- This is the button/image that will be displayed when there is no image at the URL. $img_replacement2 = "images/misc/notexistimage.gif"; // <-- This is the maximum width that an image is allowed to be viewed safely. $img_max_width = 800; // <-- This is the maximum height that an image is allowed to be viewed safely. $img_max_height = 600; $link = strip_smilies(str_replace('\\"', '"', $link)); $link = str_replace(' ', '', $link); // Let's get the properties of the image. We'll also check if the image exists if ($imginfo=@getimagesize($link)) { // If image exists and its size is outside our specs.... if (($imginfo[0] > $imginfo[1] and (($imginfo[0] > $img_max_width) or ($imginfo[1] > $img_max_height))) or ($imginfo[0] < $imginfo[1] and (($imginfo[1] > $img_max_width) or ($imginfo[0] > $img_max_height))) or ($imginfo[0] == $imginfo[1] and ($imginfo[0] * $imginfo[1] > $img_max_width * $img_max_height))) { // we change the image to a link, $w=imageResize($imginfo[0], $imginfo[1], 100); $thumb="<img src=\"$link\" $w>"; $inp_string="<table><tr><td valign=\"middle\" align=\"left\"><a href=\"$link\" target=\"_blank\"><img src=\"$img_replacement1\" border=\"0\" alt=\"\"></A></td><td valign=\"middle\" align=\"left\"><a href=\"$link\" target=\"_blank\">$thumb</A></td></tr></table><p>"; return $inp_string; } else { // else, we return the image. $inp_string='<img src="' . $link . '" border="0" alt="" />'; return $inp_string; } } else { if (!$allowimgsizefailure) { @unlink($link); // If the image does not exist at the specified URL, show the proper icon and the URL $inp_string="<table><tr><td valign=\"middle\" align=\"left\"><img src=\"$img_replacement2\" border=\"0\" alt=\"\"></td><td valign=\"middle\" align=\"left\">($link)</td></tr></table><p>"; return $inp_string; } } } I would appreciate all the help you can give me on this. |
#2
|
|||
|
|||
I don't think the function is your problem. The problem lies, it appears IMO, in the latency of fetching and checking each remote image specified from the respective websites.
|
#3
|
|||
|
|||
I could understand that, but the same page loads much faster without the image size checking. So it has to be something in the function, or in the way I've implemented it. However, most of the code is copied from vB itself, if my memory chips are still running. The funniest thing is that that particular page with the 26 images, which goes from 1.8 seconds to 30+, contains only correct-size images, so it doesn't do any resizing etc. I am getting frustrated about this, since I have no idea what is wrong with this.
|
#4
|
|||
|
|||
Yes, when you remove that function you eliminate the remote calls to outside sites for images. The same function running local and fetching images local without going out to http would be much much faster.
You are at the mercy of the response time of the remote sites here IMO, not the function. |
#5
|
|||
|
|||
Quote:
|
#6
|
|||
|
|||
What I am saying is that you are making 26 remote calls. those are the slowness. if those images were on your server, it may would likely be faster. but in the end, you'll still be loading 26 tests.
Site to site latency is the big hit here and I don't think you can improve it. You could try to fetch each image with fsockopen and buffer them using a time out to speed it up. But, you may then wind up with empty buffers and false not exists tests. |
#7
|
|||
|
|||
I am afraid I can't understand your point of view. Site to site latency is there, either with or without the image check. 26 remote calls are made either with or without the image check.
|
#8
|
|||
|
|||
No, the members browser calls the images, not your site in the case of normal display.
In your case, you are having your site fetch and size the image before displaying the img tags. Doing this causes your site to read the images from those sites which does not happen with an img tag. So, in a normal situation, you supply the url and the members browser calls for the image. In your case, your server fetches the image from the remote server then creates a url and the members browser fetches the image. That is two calls to a server per image you process. One for your server and one for the member. |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|